mahout推荐相似度学习总结

平时没写过文章,觉得还是要养成写文章的习惯,刚好最近在学习mahout,因此把我的学习总结下,下面主要介绍mahout推荐系统中,用户相似度计算的各种方式,以及我的实验结果。

mahout的推荐主要是基于协同过滤,协同过滤是通过了解用户与物品之间的关系,也就是用户对物品的偏好来总结经验(无需了解物品的属性),从而进行推荐。

而协同过滤又分为基于用户和基于物品。

基于用户是寻找用户与用户之间的相似度,如A用户和B用户都喜欢a,b,c物品,那么可以认为A和B用户很相似,如果A还喜欢d物品,那么B很有可能也喜欢d物品,因此可以推荐d物品给B用户。

基于物品是寻找物品与物品之间的相似度。如a和b物品同时被A,B,C用户喜欢,则可以认为a和b物品很相似,如果D用户还喜欢a物品,那么D用户也很有可能也喜欢b物品。

mahout的推荐系统由多个组建混搭而成,我们可以根据自己的需求和场景选择最适合自己的组建来搭配。下面介绍基于用户的,通常包括如下组建:
数据模型:由DataModel的子类实现
用户间的相似性度量:由UserSimilarity的子类实现。
用户领域的定义:由UserNeighborhood的子类实现。
推荐引擎:由Recommender的子类实现。

下面开始介绍计算用户相似度的各种算法:

首先有数据如下:
横排是物品,竖列是用户,中间的是用户对物品的评分,5分是很喜欢,3分是一般,1分是讨厌。 没有得到用户对该物品的偏好。

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

1. 基于皮尔逊相关系数的相似度

皮尔逊相关系数是一个介于-1和1之间的数,它度量两个一一对应的数列之间的线性关系度量,也就是说,它表示两个数列中对应数字一起增大或一起减小的可能性。当接近于1时,表明他们数字变化趋势一致,当接近于0时,变化趋势没什么关系,当接近于-1时,变化趋势是相反的。
公式如下:

这里写图片描述
从最下面的公式能看得出来,pearson就是把两个向量减去他们的平均值后,计算他们夹角的cos。当然夹角越小,两个向量的方向越一致。
在基于用户的协同过滤中,我们把一个用户对所有物品的评价联合起来,看作向量。
如计算上面用户1和5的相似度。他们都评价了101,102,103,把这些评价组合成向量,则用户1的向量是(5,3,2.5),用户5的向量是(4,3,2),然后套入上面的公式,向量1的平均值是3.5,向量5的平均值是3. 分子是向量的点乘得出是2.5.分母是两个向量的长度相乘是2.64.再相除得到pearson相似系数为0.945。

这里写图片描述

用户1和3只共同评价了一个物品,所以不能得出他们间的pearson相关系数。

缺点:没有考虑两个用户同时给出偏好值的物品数量。如1和4只同时给出了两个物品的偏好,但他们的pearson相似度还高于5(5和1同时给出了3个物品的偏好),这跟直观感觉不一致。
1.不能计算两个用户只同时给出了一个物品的偏好值。2.如果一个用户给所有物品的偏好都一样,也不能算他与别人的相似度(代入上面的公式就知道)。因此在小的或疏松的数据集中,比较有问题。
为了解决上面的问题,可以加入权重(weighting),即基于较多物品计算相关系数时,使正相关值向1靠近,使负相关值向-1靠近。基于较少物品时,使相关系数向均值靠近。

2. 基于欧式距离定义相似度

可以将用户想象为多维空间的点(维数等于物品数),偏好值是他们的坐标。这种相似度量就是计算两个用户点间的欧式距离d。他们越远代表越不相似,越近越相似。
公式为:
这里写图片描述

可以先看看平面两点距离计算公式,就容易看懂了。实际应用中将1/(1+d)作为相似度,那么就是越接近于1越相似,越接近于0越不相似。

这里写图片描述

3.基于余弦相似性度量

和欧式距离一样&#

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值