(1)ALS交替最小二乘算法
ALS指使用交替最小二乘法求解的协同过滤算法。通过观察到的所有用户给产品打分,来推断每个用户的喜好并向用户推荐合适的产品。
具体推荐是 通过用户评分矩阵来实现的,用户评分矩阵每一行代表一个用户,每一列代表一个产品,每一个元素代表一个用户对某一种产品的打分。用户评分矩阵通过用户特征矩阵和物品特征矩阵得到。。通过U和V来近似A。这样算法的自由度就从变为了。
算法的目标使得U*A尽可能近似A。则算法的优化目标就是.F 代表Frobenius范数。
最小化每一个元素和 重构之间的误差平方和。该优化问题就是采用ALS来实现。
ALS的目标函数不是凸的,而且变量相互耦合。如果固定用户特征矩阵U或者产品特征矩阵V就可以使问题变得简单。原问题就转换为凸函数且可拆分。就可以使用最小二乘法求解。
这里的交替最小二乘法就是先随机生成U,然后固定U去求解V;在固定V去求解U,这样一直交替下去,直到收敛。但由于问题本质上是非凸的,因此ALS不保证最终可以得到全局最优解。在实际使用中,ALS对初始点不是很敏感,是不是全局最优解影响不大。
在使用MLlib中,算法最重要的是通过合理的数据分区和RDD缓存来减少数据交换,并设计良好的数据结构来进行结构优化,优化内存使用。
在实际训练时候,类方法为ALS。输入数据为一个三元元组{用户id,物品id,评分}
val model = ALS.train(data,rank,numIterations,lambda);其中rank代表特征数量,numIterations代表迭代次数;lambda代表正则化因子,0.01;
预测时 val predictions = model.predict(userProducts).map{
case Rating(user,product,rate)=> #这里的rate 只有一个值 原始值
((user,product),rate) #这里的rate有两个值 原始值和预测值
}
而userProduct为随机生成的(用户id,产品id)
(2)协同过滤推荐算法
协同过滤算法是通过分析用户兴趣,在用户群中找到指定用户的相似用户,综合这些相似用户对某一物品的评价,形成指定用户对某一物品的预测。
首先是收集用户偏好。通常通过评分,投票,转发,保存书签,购买,点击流以及页面停留时间等。然后将这些行为分组加权减噪和归一化。然后通过计算相似度对用户分组。相似度可以通过欧式距离、皮尔逊相关系数、Jacccard距离(文档类数据)等得到。
而推荐部分也可以基于两个角度,根据用户分组和物品分组。
网友评论