mahout基于项目的协同过滤步骤
来源:互联网 发布:华为笔试java 编辑:程序博客网 时间:2024/06/05 01:51
1 第一阶段:
该阶段包含三个job:
(1)输入是原始数据,格式为:<userid,itemid,preference> ,计算每个teamid对应的index,并保存index及其对应的teamid中的最小值,输出为<index,min(teamid)>。
(2)输入为原始数据,格式为:<userid,itemid,preference> ,生成用户矩阵,输出为:<userid,vector<IndexOfIteamid,pre>>。
(3)输入为(2)的结果,生成项目矩阵,输出为:<IndexOfIteamid,vector<IndexOfUserId,pre>>
2 第二阶段:
该阶段包含5个job:其中前4个属于RowSimilarityJob步骤,生成相似度矩阵,第五个为输出TextOutputFormat文件格式的相似度矩阵。
(4)输入为(3)的结果,统计数据中不同user的个数,输出为:vector<IndexOfUserid,CountOfUser>
(5)输入为(3)的结果,对输入进行选样,输出(3)的样本对应的转置,
<IndexOfuserid,vector<IndexOfIteamid,pre>>,输出每个样本项目对应多的norm值,
vector<IndexOfIteamid,norm(teamid)>,如果用户设定threshold参数,而不是默认值,则还输出每个样本项目对应的用户数及对应的pref最大值,
vector<IndexOfIteamid,numNonZeroEntries> ,vector<IndexOfIteamid,maxValue>。
(6)输入为(5)的输出,其中转置矩阵作为job的输入,其它利用configure的参数传递文件地址,进而通过地址操作文件,生成共生矩阵(相似度矩阵上三角),输出为:<IndexOfIteamA,vector<IndexOfIteamB,similarityValue>>。如果用户设定threshold参数,而不是默认值,则similarityValue小于threshold的对应项被丢弃。由threshold参数和文件地址中的内容共同决定是否计算IteamA与 IteamB的相似度。
(7)输入为(6)的输出,生成完整的相似度矩阵,并保留每个项目对应的相似度最大的topk项,输出为:<IndexOfIteamA,vector<IndexOfIteamB,similarityValue>>。
(8)输入为(7)的输出,生成相似度矩阵的TextOutputFormat文件,输出为:<<IteamA,IteamB>,similarityValue>。
3 第三阶段:
该阶段由一个Job完成,该Job由两个输入路径,两种不同的map,一种reduce组成。
- 第一个输入为(7)的输出,对应第一个map,将输入的相似度向量中与自己的相似度设为NAN,输出为:<IndexOfIteamA,vector<IndexOfIteamB,similarityValue>>;第二个输入为(2)的输出,对应第二个map,如果存在推荐用户表,则只针对需要推荐的用户生成对应的转置<IndexOfIteamid,vector<userId,pref>>,如果不存在推荐用户表,则对所有用户生成对应的转置<IndexOfIteamid,vector<userId,pref>>。注意:第二个map中只保留pref最大的前N项对应的IndexOfIteamid,其他的IndexOfIteamid对应的pref设为NAN。
Reduce将上面两种map的输出作为输入,生成项目对应的相似项,用户及评分,输出为:
<IndexOfIteamid,<similarityMatrixColumnOfIndexOfIteamid,UserListOfIndexOfIteamid,prefListOfIndexOfIteamid>>。
4 第四阶段:
该阶段包含两个job:
- 如何用户设定过滤文件,则进行该job,输入为该过滤文件,将过滤文件中用户-项目对应的相似项目中的对应值设为NAN(用于后面的过滤),输出为<IndexOfIteamid,<similarityMatrixColumnOfIndexOfIteamid,UserListOfIndexOfIteamid,prefListOfIndexOfIteamid>>。
- 计算用户的推介项目,在计算结果后,保存结果之前进行过滤,对所有用户,根据推荐项目表,对推介项目进行过滤,同时利用过滤文件产生的结果,进行二次过滤。生成:<userid,List<iteamid,value>>。
- mahout基于项目的协同过滤步骤
- mahout基于项目的协同过滤源码分析
- mahout基于用户的协同过滤-userCF
- mahout基于物品的协同过滤指令
- 基于项目的协同过滤
- Mahout基于项目的协同过滤算法源码分析(1)--PreparePreferenceMatrixJob
- Mahout基于项目的协同过滤算法源码分析(2)--RowSimilarityJob
- Mahout基于项目的协同过滤算法源码分析(3)--RowSimilarityJob
- Mahout基于项目的协同过滤算法源码分析(4)共生矩阵乘法
- Mahout基于项目的协同过滤算法源码分析(5)--推荐
- Mahout基于项目的协同过滤算法源码分析(6)--总结
- 基于 Apache Mahout 实现高效的协同过滤推荐
- Apache Mahout基于商品的协同过滤算法流程分析
- 【Machine Learning】Mahout基于协同过滤(CF)的用户推荐
- 深入理解mahout基于hadoop的协同过滤流程
- Mahout中基于Item的协同过滤之pairwiseSimilarity
- Mahout基于item的协同过滤之asMatrix
- Mahout分布式程序开发 基于物品的协同过滤ItemCF
- UVa213-信息解码
- 连接池中的maxIdle,MaxActive,maxWait参数
- 网络中LAN、WAN、WLAN、VLAN和VPN的区别
- Android基础&进阶(收藏)
- 第二篇:策略模式
- mahout基于项目的协同过滤步骤
- JQuery笔记流
- 【Hibernate】初识了解
- 优化SQL的一般步骤
- let 命令 ---待更新
- WatcherWebService2
- redis优化配置
- CNN资料
- mahout基于项目的协同过滤源码分析