您的位置:首页 > 其它

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

2017-09-08 20:32 281 查看
协同过滤是用来做推荐的算法

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推荐物品:



协同过滤的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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习