als

"als"

Posted by zwt on July 15, 2021

原理

协同过滤核心是用来处理用户的兴趣偏好的预测。spark中实现的是基于潜在因子模型的协同过滤。核心在于将用户评分或者是行为矩阵分解为用户的偏好矩阵和物品的偏好矩阵。 目标函数为: \(\min _{x_{\star}, y_{\star}} \sum_{r_{u, i}} \sum_{\text {is known }}\left(r_{u i}-x_{u}^{T} y_{i}\right)^{2}+\lambda\left(\left\|x_{u}\right\|^{2}+\left\|y_{i}\right\|^{2}\right)\) 前面一部分是平方误差,后面是正则化,引入常数是为了控制模型的复杂度。再spark中优化函数的方式选用的是交叉最小二乘法als,优化步骤为:

1
2
3
4
1.用随机数初始化物品偏好因子矩阵y
2.固定y,找到可以最小化目标函数的用户偏好矩阵x
3.固定x,类同步骤2,找到最小化目标函数的物品偏好因子矩阵y
4.重复步骤2和3,直到满足算法收敛条件

实现

涉及到的参数

1
2
3
4
5
6
7
1.numBlocks:数据分区的数目,默认为10
2.rank:隐向量的长度,默认是10(m * n => m * k - k * n)
3.iterations:最大迭代次数,默认为10
4.regParam:正则化参数系数,默认为1.0
5.implicitPrefs:控制使用显式反馈还是隐式反馈,默认是false即显式反馈。
6.alpha:隐式反馈时的置信度参数,默认为1.0
7.nonnegative:是否对最小二乘使用非负约束,默认为false

als有隐式反馈和显式反馈两种,显式反馈是基于用户的直接反馈如评价评分等。隐式反馈是基于用户的历史行为如观看,点击,购买,喜欢,分享等。

参考

1.als 2.train 3.train2 4.train3 5.train4 6.als