`
anylin
  • 浏览: 14114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Mahout的taste推荐系统里的几种Recommender分析

 
阅读更多

 

Taste简介

Mahout apache下的一个java语言的开源大数据机器学习项目,与其他机器学习项目不同的是,它的算法多数是mapreduce方式写的,可以在hadoop上运行,并行化处理大规模数据。

 

协同过滤在mahout里是由一个叫taste的引擎提供的, 它提供两种模式,一种是以jar包形式嵌入到程序里在进程内运行,另外一种是MapReduce Job形式在hadoop上运行。这两种方式使用的算法是一样的,配置也类似。基本上搞明白了一种,就会另外一种了。

 

Taste的系统结构如下图

 

 

其中:

Perference表示用户的喜好数据,是个三元组(userid, itemid, value),分别表示用户id, 物品id和用户对这个物品的喜好值。

DataModelPerference的集合,可以认为是协同过滤用到的user*item的大矩阵。DateModel可以来自db, 文件或者内存。

Similarity相似度计算的接口,各种相似度计算算法都是继承自这个接口,具体相似度计算的方法,可以参考这篇文章:http://anylin.iteye.com/blog/1721978

Recommender:  利用Similarity找到待推荐item集合后的各种推荐策略,这是最终要暴露个使用者的推荐接口,本文将重点介绍下taste里各种recommender的实现策略,有错误之处,请多指正。

 

各种Recommender介绍

按照协同过滤方法的分类, taste里的recommender可以分别划到对应的分类下:

Item-based:

         GenericItemBasedRecommender

         GenericBooleanPrefItemBasedRecommender

         KnnItemBasedRecommender

User-based:

         GenericUserBasedRecommender

         GenericBooleanPerfUserBasedRecommender

Model-based:

         SlopeOneRecommender

         SVDRecommender

         TreeClusteringRecommender

  ItemAverageRecommender

         ItemUserAverageRecommender

 

每种Recommender的详细介绍如下:

GenericUserBasedRecommender

一个很简单的user-based模式的推荐器实现类,根据传入的DataModelUserNeighborhood进行推荐。其推荐流程分成三步:

第一步,使用UserNeighborhood获取跟指定用户Ui最相似的K个用户{U1…Uk}

第二步,{U1…Uk}喜欢的item集合中排除掉Ui喜欢的item, 得到一个item集合 {Item0...Itemm}

第三步,对{Item0...Itemm}每个itemj计算 Ui可能喜欢的程度值perf(Ui , Itemj) ,并把item按这个数值从高到低排序,把前Nitem推荐给Ui。其中perf(Ui , Itemj)的计算公式如下:

其中 是用户UlItemj的喜好值。

GenericBooleanPerfUserBasedRecommender

继承自GenericUserBasedRecommender 处理逻辑跟GenericUserBasedRecommender一样,只是 的计算公式变成如下公式

其中是布尔型取值,不是0就是1

GenericItemBasedRecommender

一个简单的item-based的推荐器,根据传入的DateModelItemSimilarity去推荐。基于Item的相似度计算比基于User的相似度计算有个好处是,item数量较少,计算量也就少了,另外item之间的相似度比较固定,所以相似度可以事先算好,这样可以大幅提高推荐的速度。

其推荐流程可以分成三步:

       第一步,获取用户Ui喜好的item集合{It1…Itm}

第一步,使用MostSimilarItemsCandidateItemsStrategy(有多种策略, 功能类似UserNeighborhood) 获取跟用户喜好集合里每个item最相似的其他Item构成集合 {Item1…Itemk}

第二步,对{Item1...Itemk}里的每个itemj计算 Ui可能喜欢的程度值perf(Ui , Itemj) ,并把item按这个数值从高到低排序,把前NItem推荐给Ui。其中perf(Ui , Itemj)的计算公式如下:

其中 是用户UlIteml的喜好值。

GenericBooleanPrefItemBasedRecommender

继承自GenericItemBasedRecommender 处理逻辑跟GenericItemBasedRecommender一样,只是 的计算公式变成如下公式

其中是布尔型取值,不是0就是1

KnnItemBasedRecommender

继承自GenericItemBasedRecommender 处理逻辑跟GenericItemBasedRecommender一样,只是 的计算公式比较复杂,基于一篇论文提到的算法,论文地址在这里

http://public.research.att.com/~volinsky/netflix/BellKorICDM07.pdf。根据论文介绍,该算法对数据进行了一些预处理,同时改进了邻居选取策略,再不怎么增加计算量的情况下,可以较大幅度提高推荐准确度。

ItemAverageRecommender

这是一个提供给实验用的推荐类,简单但计算快速,推荐结果可能会不够好。它预测一个用户对一个未知item的喜好值是所有用户对这个item喜好值的平均值,预测公式如下。

ItemUserAverageRecommender

ItemAverageRecommender的基础上,考虑了用户喜好的平均值和全局所有喜好的平均值进行调整,它的预测公式如下:

         其中 是所有用户对Itemj喜好的平均值, 是用户Ul所有喜好的平均值,是全局所有喜好值的平均值。

RandomRecommender

随机推荐item,  除了测试性能的时候有用外,没太大用处。

SlopeOneRecommender

基于Slopeone算法的推荐器,Slopeone算法适用于用户对item的打分是具体数值的情况。Slopeone算法不同于前面提到的基于相似度的算法,他计算简单快速,对新用户推荐效果不错,数据更新和扩展性都很不错,预测能达到和基于相似度的算法差不多的效果,很适合在实际项目中使用。

 

基本原理:

 

用户   itema打分     itemb打分

X                          3                          4

Y                          2                          4

Z                          4                          ?

用户Zitemb的打分可能是多少呢? Slope one算法认为:所有用户对事物Aitemb的打分平均差值是:((3 - 4) + (2 - 4)) / 2 = -1.5,也就是说人们对itemb的打分一般比事物A的打分要高1.5,于是Slope one算法就猜测Zitemb的打分是4 + 1.5 = 5.5

 

当然在实际应用中,用户不止X,Y 两个,跟itemb相关的item也不止A一个,所以slopeone的预测公式如下:

其中表示与, 用户Ui打过分的除itemj之外所有其他item集合, 表示用户Ui itemk的打分。表示除Ui外所有其他用户对itemkitemj打分差值的平均值。

其中表示除Ui外其他所有用户的集合。

SVDRecommender

基于SVD矩阵分解技术的推荐器,暂时没有研究, 具体可以参考这个文档。

https://cwiki.apache.org/confluence/display/MAHOUT/Collaborative+Filtering+with+ALS-WR

TreeClusteringRecommender

利用聚类方法的推荐器,暂时没有研究。

 

  • 大小: 85.2 KB
  • 大小: 2.4 KB
  • 大小: 679 Bytes
  • 大小: 2.1 KB
  • 大小: 679 Bytes
  • 大小: 2.5 KB
  • 大小: 583 Bytes
  • 大小: 2.2 KB
  • 大小: 1 KB
  • 大小: 1.5 KB
  • 大小: 778 Bytes
  • 大小: 620 Bytes
  • 大小: 389 Bytes
  • 大小: 2.5 KB
  • 大小: 677 Bytes
  • 大小: 699 Bytes
  • 大小: 494 Bytes
  • 大小: 2 KB
  • 大小: 292 Bytes
分享到:
评论
1 楼 wufengyu1 2014-03-25  

相关推荐

    如何成功运行Apache Mahout的Taste Webapp-Mahout推荐教程-Maven3.0.5-JDK1.6-Mahout0.5

    在Mahout Taste Webapp的recommender.properties文件中,需要指定推荐算法的类,例如GroupLensRecommender。这是配置推荐系统行为的重要步骤。 7. 准备数据文件 Mahout Taste Webapp需要数据集来演示推荐系统的工作...

    人工智能-推荐系统-新闻推荐-基于Mahout的新闻推荐系统

    推荐算法 基于用户的协同过滤 基于内容的推荐 基于热点的推荐 Mahout:整体框架,实现了协同过滤 Deeplearning4j,构建VSM Jieba:分词,关键词提取 HanLP:分词,关键词提取 Spring Boot:提供API、ORM 关键...

    Mahout推荐系统

    ### Mahout推荐系统知识点概述 #### 一、推荐引擎的基本概念 推荐引擎是一种利用信息过滤技术,根据用户的兴趣偏好向其推荐相关内容的技术。这些内容可以是电影、音乐、书籍、新闻等多种类型。推荐引擎的核心在于...

    基于Mahout实现协同过滤推荐算法的电影推荐系统.zip

    本项目"基于Mahout实现协同过滤推荐算法的电影推荐系统"旨在利用Apache Mahout这一开源机器学习库,构建一个能够为用户推荐个性化电影的系统。以下将详细介绍该系统的相关知识点: 1. **协同过滤推荐算法**: 协同...

    测试mahout推荐算法的数据集

    【推荐算法】是一种重要的机器学习...通过对Chubbyjiang在GitHub上分享的数据集进行分析和处理,我们可以深入理解Mahout的协同过滤算法以及MapReduce在大数据环境下的工作原理,从而构建出更高效、更精准的推荐系统。

    mahout关联推荐算法

    Mahout关联推荐算法是Apache Mahout项目中的一种推荐系统算法,它基于用户的历史行为数据,通过挖掘用户之间的关联性来生成个性化的推荐。在Mahout中,关联推荐算法主要应用于发现用户行为模式,例如用户购买商品A后...

    Mahout案例实战 约会推荐

    Mahout实战案例-约会推荐系统,详情参考博客《Mahout案例实战--Dating Recommender 系统》http://blog.csdn.net/fansy1990/article/details/44181459

    news-recommender:基于Mahout的新闻推荐系统

    基于Mahout的新闻推荐系统 相关技术 推荐算法 基于用户的协同过滤 基于内容的推荐 基于景点的推荐 :整体框架,实现了协同过滤 ,建立VSM :分词,关键词提取 :分词,关键词 :提供API,ORM 关键实现 基于用户...

    基于Mahout的电影推荐系统

    这是这篇博文的工程代码,是MyEclipse的工程文件。...由于原工程开发的时候是在MyEclipse中引用mahout的jar包,所以这个压缩文件并没有相关的jar文件,故运行此项目之前需要做的事请,是需要导入mahout的开发包。

    基于Java+Mahout的协同过滤推荐算法图书推荐系统源码+项目说明.zip

    《基于Java+Mahout的协同过滤推荐算法图书推荐系统源码及项目说明》 本项目是一个采用Java语言开发,结合Apache Mahout库实现的协同过滤推荐算法图书推荐系统。协同过滤是推荐系统中最常见的一种算法,它基于用户的...

    基于协同过滤算法的电影推荐系统.docx

    Apache Mahout 是一个开源机器学习库,其中的 Taste 模块专门用于实现推荐系统。Taste 提供了一个高效的推荐引擎,支持基于 Java 的开发,具备良好的可扩展性,并且能够利用 Hadoop 的分布式架构,以 MapReduce 方式...

    mahout的基于用户的推荐Demo

    **Mahout用户基础推荐系统详解** Apache Mahout是一款开源机器学习库,专为大数据处理而设计,尤其在推荐系统、分类和聚类方面有广泛的应用。在这个“mahout的基于用户的推荐Demo”中,我们将深入探讨如何利用...

    基于Mahout的电影推荐系统的数据文件

    总结来说,基于Mahout的电影推荐系统依赖于`users.dat`、`movies.dat`、`ratings.dat`和`movie_preferences.txt`这些核心数据文件,通过分析用户的行为和偏好,构建模型并提供个性化的电影推荐。理解这些数据文件的...

    基于spark、mahout和spring boot构建的推荐系统.zip

    在本项目中,我们主要探讨如何利用Apache Spark、Apache Mahout和Spring Boot技术构建一个推荐系统。推荐系统是人工智能领域的一个重要应用,它通过分析用户的行为和偏好,为用户提供个性化的产品或服务推荐。以下是...

    基于Mahout分布式协同过滤推荐算法分析与实现.pdf

    Mahout中的分布式协同过滤推荐算法主要有两种实现方式:用户(User-Based)协同过滤和物品(Item-Based)协同过滤。用户协同过滤通过找到与目标用户行为相似的其他用户,利用这些用户的行为来预测目标用户可能喜欢的...

Global site tag (gtag.js) - Google Analytics