ALS矩阵分解
一个 的打分矩阵 A 可以用两个小矩阵和的乘积来近似,描述一个人的喜好经常是在一个抽象的低维空间上进行的,并不需要把其喜欢的事物一一列出。再抽象一些,把人们的喜好和电影的特征都投到这个低维空间,一个人的喜好映射到了一个低维向量,一个电影的特征变成了纬度相同的向量,那么这个人和这个电影的相似度就可以表述成这两个向量之间的内积。
我们把打分理解成相似度,那么“打分矩阵A(m*n)”就可以由“用户喜好特征矩阵U(m*k)”和“产品特征矩阵V(n*k)”的乘积。
矩阵分解过程中所用的优化方法分为两种:交叉最小二乘法(alternative least squares)和随机梯度下降法(stochastic gradient descent)。
损失函数包括正则化项(setRegParam)。
参数选取
分块数:分块是为了并行计算,默认为10。 正则化参数:默认为1。 秩:模型中隐藏因子的个数显示偏好信息-false,隐式偏好信息-true,默认false(显示) alpha:只用于隐式的偏好数据,偏好值可信度底线。 非负限定 numBlocks is the number of blocks the users and items will be
partitioned into in order to parallelize computation (defaults to
10). rank is the number of latent factors in the model (defaults to 10). maxIter is the maximum number of iterations to run (defaults to 10). regParam specifies the regularization parameter in ALS (defaults to 1.0). implicitPrefs specifies whether to use the explicit feedback ALS variant or one adapted for implicit feedback data (defaults to false
which means using explicit feedback). alpha is a parameter applicable to the implicit feedback variant of ALS that governs the baseline confidence in preference
observations (defaults to 1.0). nonnegative specifies whether or not to use nonnegative constraints for least squares (defaults to false).
ALS als = newALS()
.setMaxIter(10)//最大迭代次数,设置太大发生java.lang.StackOverflowError
.setRegParam(0.16)//正则化参数
.setAlpha(1.0)
.setImplicitPrefs(false)
.setNonnegative(false)
<