One PUNCH Man——交替最小二乘推荐算法

交替最小二乘推荐算法

ALS(Alternating Least Square),交替最小二乘法。在机器学习中,特指使用最小二乘法的一种协同推荐算法。
如下图所示,u表示用户,v表示商品,用户给商品打分,但是并不是每一个用户都会给每一种商品打分。比如用户u6就没有给商品v3打分,需要我们推断出来,这就是机器学习的任务。
在这里插入图片描述

注意:虽然这个表在上图看起来很小,实际上这个表是很大的,行列一般以万/十万/百万/千万计数。

由于并不是每个用户给每种商品都打了分,可以假设ALS矩阵是低秩的,即一个mn的矩阵,是由mk和k*n两个矩阵相乘得到的,其中k<<m,n
在这里插入图片描述
这种假设是合理的,因为用户和商品都包含了一些低维度的隐藏特征,比如我们只要知道某个人喜欢碳酸饮料,就可以推断出他喜欢百世可乐、可口可乐、芬达,而不需要明确指出他喜欢这三种饮料。这里的碳酸饮料就相当于一个隐藏特征。上面的公式中,Um×k表示用户对隐藏特征的偏好,Vk×n表示产品包含隐藏特征的程度。这个k就是商品Product的潜在因素,用来解释数据中的交互关系。

注意:由于k的值很小,所以这种分解算法只能是一种近似值,并不是绝对的上述说的等式

原始的矩阵是低秩的,也就是稀疏的,但UV的乘积是却稠密的,即该矩阵存在较少的非0元素。因此,该约等式只是一种近似,原始矩阵大量元素是缺失的(因为缺失,默认为0,但可能实际上不为0),而算法为原始矩阵补全了大部分缺失值。从这个角度来看,矩阵分解的算法有时候称为矩阵补全算法。

第三次强调了,UV的乘积只是尽可能的逼近A,用数学的话来讲就是无限趋近于A。怎么求解呢?ALS算法呼之欲出!
首先我们简写前面的公式为下:
A = X T Y A=X^{T}Y A=XTY

不幸的是,上述的 A = X T Y A=X^{T}Y A=XTY 通常没有解,因为 X T Y X^{T}Y XTY 通常不够大!也就是说,我们找到的分解矩阵X和Y的阶太小了无法完美的表示A。其实这不完全是坏事,因为A归根到底只是现实中的一个微小样本,它只是一次观察,而且是很稀疏的观察。就比如拼图里,很多拼板都掉了,虽然拼图最后的图样是一只猫,但是手上的拼板太少的时候,就很难看到正确的图案。

所以,另一个由上述公式推导化为:
A i Y ( Y T Y ) − 1 = X i A_{i}Y(Y^{T}Y)^{-1}=X_{i} AiY(YTY)1=Xi
这个公式如何理解呢?
首先A是已知的,要求解矩阵 X X X和矩阵 Y Y Y。那么根据上述公式,只需要知道一个另一个通过公式推导也是能够知道的。
比如知道矩阵 Y Y Y,那么,因为 X X X的第 i i i行是根据 A A A的第 i i i行和 Y Y Y的函数得到的,所以只需要根据上述公式,一行一行求出 X X X即可。
要想两边精确相等是不可能的,因此,实际的目的是最小化的 ∣ A i Y ( Y T Y ) − 1 − X i ∣ |A_{i}Y(Y^{T}Y)^{-1}-X_{i}| AiY(YTY)1Xi ,或者是最小的矩阵平方误差,这也是“最小二乘”的由来。


实际上,在编码中,虽然公式中说明了行向量的计算方法,但是实践中从来不会对矩阵求逆。我们一般会借助QR分解之类的方法,更快更直接的计算。
QR分解是将矩阵分解为一个正交矩阵与上三角矩阵的乘积。用一张图可以形象地表示QR分解:
在这里插入图片描述
这其中, 为正交矩阵,,R为上三角矩阵。

详见 https://www.cnblogs.com/AndyJee/p/3846455.html



回归正题:
只要知道一个 Y Y Y,那么我们就能逐行求出 X X X。求出的这个 X X X又可以通过这个公式求出新的 Y Y Y,新的 Y Y Y又可以求出新的 X X X…子子孙孙无穷匮也。这时候,智叟说了一句,愚公你有老婆么?愚公老婆都没有,怎么会有子孙呢?
那么愚公的老婆哪里来呢?即这个 Y Y Y怎么来呢?有小朋友说,我们可以给它new个对象。
嗯,没错,这个 Y Y Y就是人为“瞎编”出来的,并且是随机的。而 X X X是最优化计算出来的,这个 Y Y Y是假的无所谓,我们又可以用计算出来的 X X X计算出新的 Y Y Y这个过程一直继续, X X X Y Y Y都会收敛到一个合适的结果,也就是“交替”一词的来历

ALS算法页可以利用输入数据是稀疏的这一点,可以用简单的线性代数运算最优解,以及数据本身可并行化,这三点解释了Mlib为什么要使用ALS算法, 并且也只有ALS算法作为唯一的一种推荐算法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值