赞
踩
ALS算法是2008年以来,用的比较多的协同过滤算法。它已经集成到Spark的Mllib库中,使用起来比较方便。
用户对物品的打分行为可以表示成一个评分矩阵A(m*n),表示m个用户对n各物品的打分情况。如下图所示。
u\v | v1 | v2 | v3 | … |
---|---|---|---|---|
u1 | 5 | 4 | 3 | … |
u2 | ? | 5 | ? | … |
u3 | 4 | ? | 2 | … |
… | … | … | … |
其中,
u\F | f1 | f2 | f3 |
---|---|---|---|
u1 | ? | ? | ? |
u2 | ? | ? | ? |
u3 | ? | ? | ? |
… | … | … | … |
u\F | f1 | f2 | f3 |
---|---|---|---|
v1 | ? | ? | ? |
v2 | ? | ? | ? |
v3 | ? | ? | ? |
v4 | ? | ? | ? |
v5 | ? | ? | ? |
… | … | … | … |
算法的思想就是:对目标函数,先随机生成然后固定它求解,再固定求解,这样交替进行下去,直到取得最优解min(C)。因为每步迭代都会降低误差,并且误差是有下界的,所以 ALS 一定会收敛。但由于问题是非凸的,ALS 并不保证会收敛到全局最优解。但在实际应用中,ALS 对初始点不是很敏感,是否全局最优解造成的影响并不大。
我们使用用户喜好特征矩阵U(m∗k)中的第i个用户的特征向量
有了损失函数之后,下面就开始介绍优化方法。通常的优化方法分为两种:交叉最小二乘法(alternative least squares)和随机梯度下降法(stochastic gradient descent)。Spark使用的是交叉最小二乘法(ALS)来最优化损失函数。
算法执行步骤:
• 先随机生成一个。一般取全局均值。
• 固定,即认为是已知的常量,来求解:
由于上式中只有
固定j,j∈(1,2,…,n),则:等式两边关于为
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。