mahout的itembased推荐算法改造

mahout的itembased推荐算法改造



需求背景:

itembased主要是两个步骤:

1 item相似度的计算

2根据user所评分过的item,以及item之间的相似度,预测未知item的分数

 

mahout的itembased现有的问题:

mahout集成的itembased算法,

里面的每个步骤耦合度太强,难以分割。

 

我们希望上面两个步骤能分开进行,

一来是步骤1和步骤2结果的更新频率不一定是相同的,

二来是我们可能考虑其他特征来计算item的相似度。

 

 

因此,我对itembased进行了一定的改造,将相似度计算和预测评分两个步骤拆分开,两者互相独立。

 

itembased算法的主程序是org.apache.mahout.cf.taste.hadoop.item.RecommenderJob

 

改造后,主程序有两个

org.apache.mahout.cf.taste.hadoop.item.RecommenderFirstJob

org.apache.mahout.cf.taste.hadoop.item.RecommenderSecondJob

前者的输出是item之间的相似度,

后者需要前者的输出作为输入,预测user对未知item的评分。

 

好处是显然易见的,

1预测评分的更新比item相似性计算更加频繁

2 我们融入其他特征或者算法优化item相似度计算,输入给RecommenderSecondJob,

  以此优化预测评分的效果。

 

使用说明:

hadoop jar mahout-examples-0.9-job.jarorg.apache.mahout.cf.taste.hadoop.item.RecommenderFirstJob-Dmapred.output.compress=false

-Dmapreduce.user.classpath.first=true

-i$hdfs_input_path

-o$hdfs_result_path

--tempDir$hdfs_tmp_path

--booleanDatatrue

--minPrefsPerUser1

--similarityClassnameorg.apache.mahout.math.hadoop.similarity.cooccurrence.measures.CooccurrenceCountSimilarity--outputPathForSimilarityMatrix $hdfs_similarity_path;

 

 

 

hadoop jarmahout-examples-0.9-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderSecondJob -Dmapred.output.compress=false

-Dmapreduce.user.classpath.first=true

-i$hdfs_input_path

-o$hdfs_result_path

--numRecommendations100

--tempDir$hdfs_tmp_path

--booleanDatatrue

--minPrefsPerUser1

--similarityClassnameorg.apache.mahout.math.hadoop.similarity.cooccurrence.measures.CooccurrenceCountSimilarity--outputPathForSimilarityMatrix $hdfs_similarity_path;

 

 

hadoop jarmahout-examples-0.9-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob

-Dmapred.output.compress=false

-Dmapreduce.user.classpath.first=true

-i$hdfs_input_path

-o$hdfs_result_path

--numRecommendations100

--tempDir$hdfs_tmp_path

--booleanDatatrue

--minPrefsPerUser1

--similarityClassnameorg.apache.mahout.math.hadoop.similarity.cooccurrence.measures.CooccurrenceCountSimilarity--outputPathForSimilarityMatrix $hdfs_similarity_path;

 

 

 

代码改动说明:

主要是RecommenderSecondJob从hdfs读取item相似度,

将item原始ID映射回内部索引,

将相似度读进一个矩阵中。

需要注意的是,相似度数据的存储格式,

输入时,数据格式,每一行是这样子的:item1,item2,similarity

输入后,每一行大概是这样子的:item1 vector[(item2,similarity),(item3,similarity)]

 

改造后的代码

https://github.com/linger2012/mahout-0.9-custom


本文作者:linger

本文链接:http://blog.csdn.net/lingerlanlan/article/details/50673495


你可能感兴趣的:(Hadoop,mahout,itembased,协同过滤,源码修改)