还是推荐电影,这次是基于物品的协同过滤
基于用户的协同过滤,适用于物品较少,用户也不太多的情况。如果用户太多了,针对每个用户的购买情况来计算哪些用户和他品味类似,效率很低下。如果商品很多,每个用户购买的商品重合的可能性很小,这样判断品味是否相似也就变得比较困难了。
还有一类智能推荐算法,是“基于物品的协同过滤”。消费者每天都在买买买,行为变化很快,但是物品每天虽然也有变化,但是和物品总量相比变化还是少很多。这样,就可以预先计算物品之间的相似程度,然后再利用顾客实际购买的情况找出相似的物品做推荐。
由于物品整体变化不大,所以这个相似程度不用每天都算,节省计算资源;同时,可以只给某一样商品只备选5个相似商品,推荐时只做这5个相似物品的加权评分,避免对所有商品都进行加权评分,以避免大量计算。这么说有点抽象,还是看一个例子吧。
还是用上一篇文章的例子,目的是给A推荐一部电影
Score
首先是计算电影之间的相似度,方法还是有很多,这次用Pearson相关系数来做,公式为:
pearson.png公式看起来复杂,其实可以分成6个部分分别计算就好了,我们选《寻龙诀》(X)和《小门神》(Y)作为例子,来算一下相似度,则
X=(3.5,5.0,3.0)
Y=(3.0,3.5,2.0)
数字就是评分,因为只有三个人同时看了这两个电影,所以X,Y两个向量都只有三个元素。按照公式逐步计算:
1. x和y的乘积再求和:3.5×3.0+5.0×3.5+3.0×2.0 = 34
2. x求和乘以y求和,再除以个数:((3.5+5.0+3.0)×(3.0+3.5+2.0))/ 3 = 32.58
3. x的平方和:3.52+5.02+3.0^2 = 46.25
4. x和的平方除以个数:((3.5+5.0+3.0)^2)) / 3 = 44.08
5. y的平方和:3.02+3.52+2.0^2 = 25.25
6. y和的平方除以个数:((3.0+3.5+2.0)^2)) / 3 = 24.08
最终把这几块的结果带入到整体的公式中:得出相关系数为0.89。
按照这种方法,需要两两计算电影的相似性,最终结果如下表:
相似性
相关系数取值为【-1,1】,1表示完全相似,0表示没关系,-1表示完全相反。结合到电影偏好上,如果相关系数为负数,比如《老炮儿》和《唐人街探案》,意思是说,喜欢《老炮儿》的人,存在厌恶《唐人街探案》的倾向。
然后就可以为A推荐电影了,思路是:A只看过两个电影,然后看根据其他电影与这两个电影的相似程度,进行加权评分,得出应该推荐给A的电影,具体方法可以列一个表:
final用A看过的电影的评分,和其他电影的相似度相乘(红框),然后再把相乘后的结果加和(绿框),得出最后的推荐度。这里可以看到,应该向A推荐《寻龙诀》,和上一篇文章用基于用户的协同过滤算法结果是一致的。
#总结#
推荐算法的几个基本思想:
- 根据和你共同喜好的人来给你推荐(基于用户的)
- 根据你喜欢的物品找出和它相似的来给你推荐(基于物品的)
- 根据你给出的关键字来给你推荐(退化成搜索算法)
- 根据上面的几种条件组合起来给你推荐
经过多年的发展,思想还是这些思想,变化的地方在于计算相似度的衡量标准上,进而衍生出了各种计算相似度的算法,各种算法的优劣体现在相似度判定的准确度以及算法的计算速度和占用的计算资源:
- 欧氏距离算法
- 余弦距离算法
- Jaccard距离算法
- 皮尔逊距离算法
- ……