posts - 495,comments - 227,trackbacks - 0
http://www.linuxidc.com/Linux/2012-07/65008.htm


推荐器实现类在:

org.apache.mahout.cf.taste.Hadoop.item.RecommenderJob。其输入数据放在默认输入目录下,使用mapred.input.dir参数指定的输入数据,是userID,itemID[,preferencevalue]值对形成的文本文件。可以有多个文件存放在该目录下。

运行时相关参数如下:

numRecommendations:为每个用户产生的推荐个数 "Number of recommendations per user"

usersFile:包含待推荐用户的用户ID列表;

itemsFile:包含待推荐项目的项目ID列表;

filterFile:用来做推荐过滤的训练文件,内容为使用逗号分隔的userID,itemID对,

booleanData:不带推荐值的训练数据文件;

maxPrefsPerUser:Maximum number of preferences considered per user in final recommendation phase;

minPrefsPerUser:ignore users with less preferences than this in the similarity computation ;   maxSimilaritiesPerItem:Maximum number of similarities considered per item;

maxurrencesPerItem:try to cap the number of urrences per item to this;

similarityClassname:Name of distributed similarity class to instantiate, alternatively use one of the predefined similarities,可用的相似度类有:

 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);

RecommendJob运行一系列MR任务,在开发时,可以根据自己的需要进行改写。但是RecommendJob申明成final,这个比较头疼。

1.itemIDIndex 任务:

map:解析输入的itemsFile;将长整型的ID通过算法映射到整形的序号上,以便后续处理。由于处理中涉及到矩阵计算,每一个项目对应矩阵中的一个维度,所以必须处理成整形;产生序号-ID值对;

reducer:对序号-ID对进行验证,产生序号-ID值对;

2.toUserVector任务:

ToItemPrefsMapper:从filterFile中读取偏好信息,转成用户-偏好值对。

ToUserVectorReducer:将用户-偏好*,转成用户-偏好矢量对,矢量表即为所有的ItemID。

3.countUsers 任务:计算用户数量,输出为用户数量--空。

4.maybePruneAndTransponse,一个名称很奇怪的任务。

MaybePruneRowsMapper:输入为任务2的输出,生成针对每个item项目的推荐值矩阵单元,即Item序号和矩阵单元的值对。

ToItemVectorsReducer:输出为矩阵行号(即Item序号)-矩阵行矢量

5. RowSimilarityJob: 计算相似度矩阵:这是引用一个现有的任务来完成计算,输入为任务4输出的矩阵;输出为相似度矩阵,即item-相似度矢量。其中相似度矢量是当前item和其他item的相似度值形成的矢量。

6. prePartialMultiply1:输入为任务5的输出,将相似度矩阵中的对角线行,即(N,N)数值设置为Double.NaN,为后续计算做准备;

7. prePartialMultiply2:输入为任务2的输出,将user-(项目矢量),拆分成item-(userId, 推荐值)对。如果设置了usersFile,则仅处理usersFile中指定的用户。

8. partialMultiply: 合并任务6和7的额输出,变成item-(相似度矢量、userId、推荐值) 对。

9. itemFiltering:如果有filterFile,则处理filterFile文件,转换成item-(相似度矢量、userId、推荐值)对。其中相似度矢量的值为0;

aggregateAndRecommend:将8和9的输出合并作为输入,

PartialMultiplyMapper: 将item-(相似度矢量、userId、推荐值)集转换成userId-(推荐值,相似度矢量)值对;

AggregateAndRecommendReducer:汇总map输出,产生userId-((itemId, 推荐值)列表)值对,其中(itemId, 推荐值)列表是按照推荐度来排序,如果maxPrefsPerUser、minPrefsPerUser、maxurrencesPerItem,则只产 生符合条件的userId值对。

posted on 2014-12-04 14:39 SIMONE 阅读(668) 评论(0)  编辑  收藏 所属分类: hadoop mahout

只有注册用户登录后才能发表评论。


网站导航: