最近在研究推荐系统矩阵分解算法。下面就来对比这两者。主要通过两者者公式区别、如何求解以及优缺点进行总结。都是个人总结。有问题的麻烦直接提出来哈!
本文围绕一下问题进行:
1、ALS和FM的公式原理
2、ALS与FM的求解过程(如何迭代)
3、ALS和FM的优缺点
一、ALS(Alternating Least Squares,交替最小二乘法 )
ALS模型
ALS在推荐系统中就是将用户(user)对商品(item)的评分矩阵分解成2个矩阵:user对item 潜在因素的偏好矩阵(latent factor vector),item潜在因素的偏好矩阵。这两个矩阵相乘最后会约等于原矩阵。:
如何求解?
那么问题来了 X和Y都是未知的。只要我们知道其中一个,就可以求解另一个了。
ALS的核心有个假设:打分矩阵是近似低秩的。换句话说,就是一个的打分矩阵可以由分解的两个小矩阵和的乘积来近似。这就是ALS的矩阵分解方法。
为了让X和Y相乘能逼近R,因此我们需要最小化损失函数(loss function),因此需要最小化损失函数,在此定义为平方误差和(Mean square error, MSE)。
,其中代表某个user对某个item的评分。
一般损失函数都会需要加入正则化项(Regularization item)来避免过拟合的问题,通常是用L2,所以目标函数会被修改为:
上面介绍了“最小二乘(最小平方误差)”,但是还没有讲清楚“交替”是怎么回事。因为X和Y都是未知的参数矩阵,因此我们需要用“交替固定参数”来对另一个参数求解。
先固定Y, 将loss function对X求偏导,使其导数等于0:
再固定X, 将loss function对Y求偏导,使其导数等于0:
既然是交替,就会有迭代的模式存在:
迭代方法:先写出损失函数(最小二乘——最小平方误差),然后分别对和求偏导并令偏导结果等于0可以求出和,然后初始化Y,可以求出,把带入到中,可以求出,把两者代入到RMSE中,计算出结果。然后从求偏导开始迭代,知道迭代次数结束或者是达到预期RMSE结果。
优缺点?
优点:相比SVD可以解决稀疏矩阵分解的问题
缺点:对于隐变量个数选择比较敏感,k越大越精确,但是计算时间越长
参考:
推荐算法之矩阵分解——https://flashgene.com/archives/52522.html
协同过滤算法之ALS——https://www.biaodianfu.com/collaborative-filtering-als.html
推荐系统中—矩阵分解——https://www.jianshu.com/p/0bb8c470326b
ALS交替最小二乘法总结——https://www.cnblogs.com/arachis/p/ALS.html
FM(Factorization Machines,因子分解机)
因子分解机是从二阶多项式模型“进化”过来的。二阶多项式模型公式如下:
其中表示两个互异特征组合的二阶特征,表示二阶特征的交叉项系数。
上述二阶多项式模型却有一个致命的缺陷的训练是很困难的:数据稀疏性普遍存在的实际应用场景中,二阶特征系数是很困难的。
原因是:
(1)的学习需要大量特征分量X都非零的样本。
(2)样本本身是稀疏的,同时满足的 样本非常少。
由于以上原因,大佬们就将表示为另一种形式。即引入辅助隐向量。公式如下:,于是就可以改写为FM模型:,
(表示FM模型的偏置)
(表示FM模型对一阶特征的建模)
(表示FM模型对二阶特征的建模)
参数的个数为:
模型复杂度
化简方程
首先化简二阶项系数项。
对上述化简过程做一些解释:
第1个等号:对称方阵的所有元素之和减去主对角线元素之和
第2个等号:向量内积展开成累加形式
第3个等号:提出公共部分
第4个等号:表示为“和平方”减去“平方和”
带入化简后的表达式,FM模型方程为:
损失函数
对于回归问题,损失函数可以取最小平方误差函数:
对于分类问题,损失函数可以取logit逻辑函数:
最优化目标函数:
如何求解?
首先对目标函数求偏导,目标函数对模型参数的偏导数通式为:
对模型估计函数的偏导数为:
对于FM模型而言,优化的参数为:,则FM模型方程对各个参数的偏导数为:
于是对于FM模型的优化问题,我们可以采用SGD优化目标函数.
FM模型的算法步骤:
优缺点?
优点:
(1)FM模型对特征的一阶组合和二阶组合都进行了建模
(2)FM模型通过MF思想,基于K维的Latent Factor Vector,处理因为数据稀疏带来的学习不足问题
(3)FM模型的训练和预测的时间复杂度是线性的
(4)FM模型可以用于DNN的embedding
(5) FM是一个通用模型,它可以用于任何特征为实值的情况
缺点:
每个特征只引入了一个隐向量,不同类型特征之间交叉没有区分性
参考:
FM模型的算法思想——https://www.jianshu.com/p/8d792422e582
FM、FFM——https://www.jianshu.com/p/1db7404689c5
总结
其实ALS和FM都是比较好理解的,ALS则是直接对于评分矩阵做矩阵分解,则FM则是在二阶多项式模型公式基础上把二阶系数改成了隐向量的形式。
算法上共同点:
1、两者都进行了隐语义分解
3、都可以解决评分矩阵稀疏的问题
FM运行的速度是比ALS快的。接下来还会继续挖掘FM!!!
参考:
关于矩阵分解:特征值分解 svd分解 mf分解 lmf分解 pca 以及个性化推荐 fm ffm als——https://blog.csdn.net/weixin_37589896/article/details/78423493