机器学习常用算法三:协同过滤

协同过滤是用来做推荐的算法

1. 基于用户的协同过滤(UserCF)

(1) 收集用户资料
(2) 最近邻搜索找到相似用户
(3) 计算产生推荐结果

基于用户的协同过滤

2. 基于物品的协同过滤(ItemCF)

(1) 收集用户资料
(2) 针对物品的最近邻搜索找到相似物品
(3) 计算产生推荐结果

基于物品的协同过滤

3. 四种求相似度的方法

不管是那种协同过滤,都需要找到相似的物品或用户,有以下4种求相似度的方法

(1) 基于距离计算相似度(欧几里德距离)
通过求高维空间中的点的距离来计算相似度

(2) 基于相关系数计算相似度(皮尔逊相关系数)
皮尔逊相关系数一般用于计算两个变量间联系的紧密程度,它的取值在[-1,+1]之间

(3) 基于夹角余弦计算相似度(Cosine Similarity)
一般用于计算文本之间的相似度

(4) 基于Tanimoto谷本系数计算相似度,也成Jaccard系数,是Cosine相似度的扩展,也用于计算文档数据的相似度

4. 基于物品的协同过滤的计算步骤

(1) 建立物品的同现矩阵

同现矩阵是体现商品相似度的一种方式

求同现矩阵的方法

(2) 建立用户对物品的评分矩阵

用户评分矩阵

这个评分矩阵中大部分数据为0,因为用户购买的物品是远远小于物品所有的种类的,这样的矩阵称为稀疏矩阵
做推荐的本质就是:把用户的评分从稀疏矩阵变成稠密矩阵,也就是预测用户对没买过的物品的评分,然后取TopN后

(3) 物品的同现矩阵与用户评分矩阵相乘

比如,给用户3推荐物品:

ItemCF算法

协同过滤的mahout命令格式如下:

MAHOUT_HOME/bin/mahout recommenditembased
# 输入文件的位置                                                                         
--input <input> 
# 输出文件的位置
--output <output> 
# 给每个用户推荐物品的数量,如果可推荐的数量小于指定的数量,取可推荐的数量的最大值
--numRecommendations <numRecommendations>   
# 设置误差的阈值
--threshold <threshold>                                                      
# 选择计算相似度的方法:常用的有以下5种,协同过滤我们选择同现矩阵,可以缩写为-s
--similarityClassname             
    SIMILARITY_COOCCURRENCE # 同现矩阵                                                
    SIMILARITY_TANIMOTO_COEFFICIEN # 谷本系数                                                                         
    SIMILARITY_COSINE # cos余弦夹角                                              
    SIMILARITY_PEARSON_CORRELATION # 皮尔逊相关系数                                                

使用mahout提交机器学习相关的内容,需有以下条件:
(1) Hadoop集群(HDFS和YARN)正常启动
(2) Mahout安装在Hadoop集群中的机器上

提交命令:

/opt/mahout-0.10.2/bin/mahout recommenditembased 
-s SIMILARITY_COOCCURRENCE 
--input /mahout/input/user.txt 
--output /mahout/output/ 
--numRecommendations 5

注意:

(1) 在Linux中,一条命令必须是一行,屏幕中显示不了会自动换行,我们这里为了方便阅读,进行了人为换行

(2) - -input 和 - - output后接的路径都是HDFS的路径

(3) user.txt的内容如下

1,101,5.0
1,102,3.0
1,103,2.5
2,101,2.0
2,102,2.5
2,103,5.0
2,104,2.0
3,101,2.5
3,104,4.0
3,105,4.5
3,107,5.0
4,101,5.0
4,103,3.0
4,104,4.5
4,106,4.0
5,101,4.0
5,102,3.0
5,103,2.0
5,104,4.0
5,105,3.5
5,106,4.0

(5) 如果报错内容中出现HDFS路径,比如
Output directory temp/preparePreferenceMatrix/itemIDIndex already exists
那么路径前没有加”/”的都是相对路径,temp/preparePreferenceMatrix/itemIDIndex 其实是 HDFS中的/user/当前登陆的用户名/temp/preparePreferenceMatrix/itemIDIndex,如果报以上错误,删除这个临时文件就可以,也有另外一种办法:提交命令时指定新的临时文件目录(仅适用于本次提交):/opt/mahout-0.10.2/bin/mahout recommenditembased - -tempDir

执行结果:

1   [105:3.875,104:3.7222223,106:3.6]
2   [106:2.9285715,105:2.5833333,107:2.0]
3   [106:3.5,102:3.3333333,103:3.3125]
4   [107:4.75,105:4.3333335,102:4.111111]
5   [107:3.8333333]
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值