协同过滤算法主要用于推荐系统,推荐系统是信息过载所采用的措施,面对海量的数据信息,,从中快速推荐出符合用户特点的物品。一些人的“选择恐惧症”、没有明确需求的人。
解决如何从大量信息中找到自己感兴趣的信息。
解决如何让自己生产的信息脱颖而出,受到大众的喜爱。
1.协同过滤要解决的问题
根据用户已经评分物品,补充用户给物品评分表的空格的评分,供推荐系统使用。
2.要解决的问题
有了相似度的比较,那么比较多少个用户或者物品为好呢?一般会有基于固定大小的邻域以及基于阈值的邻域。具体的数值一般是通过对模型的评比分数进行调整优化。
3.基于用户的CF
for每个其他用户w
计算用户u和用户w的相似度s
按相似度排序后,将位置靠前的用户作为邻域n
for (n中用户有偏好,而u中用户无偏好的)每个物品i
for (n中用户对i有偏好的)每个其他用户v
计算用户u和用户v的相似度s
按权重s将v对i的偏好加入平均值
4.基于物品的CF
计算物品相似度
for每个物品i
for每个其他物品j
for对于i和j均有偏好的每个用户u
将物品对(i与j)间的偏好值差异加入u的偏好
给用户推荐物品
for用户u未表达过偏好的每个物品i
for用户u表达过偏好的每个物品j
找到j与i之间的平均偏好值差异
添加该差异到u对j偏好值
添加其至平均值
return 值最高的物品(按平均差异排序)
5.基于LFM思想的矩阵分解-ALS
LFM主要应用在两个方面:一个是用户评分预测,一个是物品隐类Top-N热门排行。
假设用户物品评分矩阵为R,现在又u个用户,i个物品,我们想要发现F个隐类,我们的任务就是找到两个矩阵U和V,使这两个矩阵的乘积近似等于R,即将用户物品评分矩阵R分解成两个低维矩阵相乘。
6.代码实现
- 创建sparkContext 【spark中对于推荐目前只提供了ALS模型、Word2Wec模型】。
- 载入训练数据,模型要求数据为RDD[Rating]结构。
- 训练模型。
- 通过预测的方法,能够获取某个用户对某个商品的喜爱程度。
- 关闭sparkContext。
package com.dengdan
import org.apache.spark.mllib