mahout分布式:Item-based推荐

1.简介


Ø基于用户的协同推荐算法随着使用者数量的增多,计算的时间就会变长,所以在2001年Sarwar提出了基于项目的协同过滤推荐算法(Item-based Collaborative Filtering Algorithms)。基于项目的协同过滤方法有一个基本的假设:“能够引起使用者兴趣的项目,必定与其之前评分高的项目相似”,通过计算项目之间的相似性来代替使用者之间的相似性。 基于项目的协同过滤不用考虑使用者间的差别,所以精度相对较差。但是却不需要使用者的历史资料,或是进行使用者识别。对于项目来讲,它们之间的相似性要稳定很多,因此可以离线完成工作量最大的相似性计算步骤,从而降低了线上计算量,提高推荐效率,尤其是在使用者多于项目的情形下尤为显著。

 ØMahout基于Item的分布式推荐算法的主要内容见org.apache.mahout.cf.taste.hadoop.item

基于 item 的推荐方法假设:能够引起用户兴趣的 item ,必定与其评分高的 item 相似。主要包括三个步骤: (1) 得到每个用户对 item 的评分数据; (2) 对 item 进行最近邻的搜索; (3) 产生推荐。


2.数据
使用wikipedia页面链接数据库(page-to-page link database),使用Henry Haselgrove整理好的部分数据集links-simple-sorted.zip

3.目标
为页面推荐相关的链接页面。

4.程序
使用Mahout基于item推荐的分布式实现 org.apache.mahout.cf.taste.hadoop.item.RecommenderJob,详细代码见:
mahout-distributied-0.7/core/src/main/java/org/apache/mahout/cf/taste/hadoop/item/
RecommenderJob.java.

5.步骤 

 Ø数据准备

 l下载links-simple-sorted.zip,解压得到links-simple-sorted.txt,重新格式化文件,生成input.txt数据文件;新建users.txt文件,按行存放要求推荐的用户编号,实验中只为编号为3的用户做推荐;将input.txt和users.txt放在WikiPedia/input目录中,该步骤已经完成,WikiPedia文件夹存放在hdfs:/share/data/ Mahout_examples_Data_Set中

 l将WikiPedia放在hdfs的用户根目录下 

user@hadoop:$hadoop dfs -cp /share/data/Mahout_examples_Data_Set/WikiPedia/ . 

 Ø执行推荐步骤

user@hadoop:$mahout org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -i WikiPedia/input/input.txt -o WikiPedia/output -s SIMILARITY_COOCCURRENCE --usersFile WikiPedia/input/users.txt                                                                    

 Ø查看结果

user@hadoop:$hadoop dfs -cat WikiPedia/output/part-r-0000

默认情况下,mahout使用的reduce数目为1,这样造成大数据处理时效率较低,可以通过参数mahout执行脚本中的MAHOUT_OPTS中的-Dmapred.reduce.tasks参数指定reduce数目。



6 处理流程

Mahout 中基于 item 的推荐包括 12 个 MapReduce 过程。下面对每一个 MapReduce 的作用进行描述。 输入的数据以userid  “\t” itemid  “\t”  perferenceValue 格式输入,分别表示用户编号、产品编号和该用户对该产品的评分值。

(1)      第 1 个 MapReduce :将 itemID 长整型映射到整型的序号上。这样做的目的是为后续以该序号为矩阵的一个维度,所以需要处理成整型。

(2)      第 2 个 MapReduce :统计每个用户对哪些 item 进行了评分,评分值是多少。

(3)      第 3 个 MapReduce :统计用户的总数。

(4)      第 4 个 MapReduce :统计每个 item 被哪些用户评分了,评分值是多少。

(5)      第 5,6,7 个 MapReduce :计算每个 item 与所有 item 之间的相似度。

(6)      第 8 个 MapReduce :将相同 item 之间的相似度置为 NaN 。

(7)      第 9 个 MapReduce :确定要推荐的用户,这些用户对哪些 item 进行了评分,评分值是多少。

(8)      第 10 个 MapReduce :根据以上的统计结果得到每个 item 与其他 item 之间的相似度,这些 item 分别被哪些用户评分了,评分值是多少。

(9)      第 11 个 MapReduce :过滤掉指定用户不需要推荐的 item 。

(10)   第 12 个 MapReduce :得到每个用户要推荐的 item 。这些 item 对于该用户来说是评分最高的前 n 个。


7 算法流程  参数

--output 输出路径

--input   输入路劲

-n      为每个用户推荐的产品数

-u      待推荐的用户列表

-i      待推荐的 item 列表

-f      过滤指定用户不需要推荐的 item 。格式为 userID, itemID 对

-b      输入的样本不带产品评分

-mp    设置每个用户喜好的最大数量 默认 10

-m     设置每个用户喜好的最小数量 默认 1

-mo    样本抽样

-s      相似度量方法。包括:

SIMILARITY_URRENCE(DistributedurrenceVectorSimilarity.class),

SIMILARITY_EUCLIDEAN_DISTANCE(DistributedEuclideanDistanceVectorSimilarity.class),

SIMILARITY_LOGLIKELIHOOD(DistributedLoglikelihoodVectorSimilarity.class),

SIMILARITY_PEARSON_CORRELATION(DistributedPearsonCorrelationVectorSimilarity.class),

SIMILARITY_TANIMOTO_COEFFICIENT(DistributedTanimotoCoefficientVectorSimilarity.class),

SIMILARITY_UNCENTERED_COSINE(DistributedUncenteredCosineVectorSimilarity.class),

SIMILARITY_UNCENTERED_ZERO_ASSUMING_COSINE(DistributedUncenteredZeroAssumingCosineVectorSimilarity.class),

SIMILARITY_CITY_BLOCK(DistributedCityBlockVectorSimilarity.class);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值