矩阵分解(EVD-SVD-Funk SVD-LFM-NCF-GMF)

特征值/特征向量的计算


首先如公式所示
A υ = λ υ A\upsilon =\lambda \upsilon Aυ=λυ
如果向量 υ \upsilon υ λ \lambda λ满足以上公式,那么他们可以分别叫做矩阵A的特征向量和特征值,至于特征向量和特征值的物理含义是什么,可以参考b站 3blue1brown的视频(天花板级讲解)

特征值分解(EVD)

同样摆出特征值分解的公式:
A = Q ∑ Q − 1 A=Q\sum Q^{-1} A=QQ1

特征值分解表示:如果A的方阵,那么可以分解为如上的右面所示的表达,其计算过程如下

  1. 求出所有特征值和对应特征向量;
  2. 所有特征向量构成的矩阵就是Q矩阵;
  3. ∑ \sum 就是所有特征值构成的对角矩阵。

问题1:那如果A是不是方阵的时候该怎么解决呢?这就引来了奇异值分解了

奇异值分解(SVD)

奇异值分解的公式如下
A = U ∑ V − T A=U\sum V^{-T} A=UVT
这时的A就可以是任何 m × n m\times n m×n的矩阵了,其中分解后的U矩阵是 m × m m\times m m×m的方阵,而V矩阵是 n × n n\times n n×n的方阵, ∑ \sum 择是 m × n m\times n m×n的对角矩阵。

具体计算步骤如下:

  1. A A − T AA^{-T} AAT 的特征值和特征向量,所有特征向量单位化后构成了U矩阵
  2. A − T A A^{-T} A ATA 的特征值和特征向量,所有特征向量单位化后构成了V矩阵
  3. A A − T AA^{-T} AAT A − T A A^{-T} A ATA 的特征值的平方根,构成的斜对角矩阵为 ∑ \sum

PCA(主成分分析)

PCA是做数据降维的一种方法,其原理就是寻找一组能够最大限度表征原始信息的向量作为基。其具体计算过程如下:
对于要进行降维数据集A

  1. 去平均值(即去中心化),即每一位特征减去各自的平均值。
  2. 计算协方差矩阵 1 n A A − T \frac{1}{n} AA^{-T} n1AAT
  3. 计算协方差矩阵的特征值和特征向量
  4. 对特征值从大到小排序,选择其中最大的k个。然后将其对应的k个特征向量分别作为行向量组成特征向量矩阵P
  5. 所以降维后的数据X的表达为 Y = P X Y = PX Y=PX

  :可以看得出来,PCA只是奇异值分解SVD中的一个子问题,因为其只好比只是求解了左半边的奇异矩阵U。就完成了对列的降维压缩。而在奇异值分解SVD中,还多了一步右奇异矩阵分解得到V,完成对行的压缩,可以看出SVD的数据降维是通过行和列上同时进行的,压缩得更狠。

问题2:在以上的奇异值分解中,要完成特征值特征向量的求解,首要前提是这个矩阵本身要稠密,但是现实的用户的打分(不一定打分)矩阵一定是稀疏的,就好比下图所示
在这里插入图片描述
那这个问题该如何解决呢,这就引出了一个伪SVD,也称为Funk SVD

Funk SVD

Funk SVD本质上就是把直接求解矩阵问题转换为最优化问题,具体的loss公式如下
l o s s = ( y − U ∑ V ) 2 loss = \left ( y-U\sum V \right )^2 loss=(yUV)2
其中y为用户对物品的实际打分, U V UV UV ∑ \sum 就是三个矩阵,具体含义可不用纠结,到后面再纠结。在求解的时候,先初始化三个矩阵,然后对有打分的位置求loss,没有打分的地方可以忽略,最终依旧可以求得三个矩阵,依旧可以计算出所有打分。

LFM

在Funk SVD中,需要求解三个矩阵,但是在实际的工程中,如果是基于一个用户打分矩阵进行分解的话,显然是分解为两个矩阵更好解释一些,一个为用户矩阵,一个为物品矩阵,对应行列相乘就是对应的打分情况,所以考虑将 ∑ \sum 融入到 U V UV UV中,具体如下:
l o s s = ∑ ( y − U V ) 2 loss = \sum \left ( y-UV \right )^2 loss=(yUV)2
这就是LFM隐语义模型,其他的计算原理和Funk SVD是一样的。

ALS

在LFM求解过程中,肯定是用梯度下降法进行参数更新,但是这里有俩矩阵,那每次更新是更新 U U U矩阵还是 V V V矩阵,还是两个都一起更新吗?这时候就引出了ALS,ALS全称叫交替最小二乘,他的操作是交替着更新矩阵,这一步固定 V V V矩阵更新 U U U矩阵,下一步固定 U U U矩阵,更新 V V V矩阵,就这么交替更新。

:在隐语义模型中,这个隐语义可以理解为就是那个矩阵维度k,这个k如何选择是很巧妙的,诸如在用户的行为打分矩阵的分解中,这个k就好比是用户的爱好,你觉得用户有多少爱好,就可以设置多大的k。

Neural CF(NCF)

到了深度学习发展的阶段,NCF在LFM的基础上进行了扩展,在矩阵的求解过程中,不再是通过点乘来进行学习,而是直接将用户矩阵和物品矩阵送入到MLP中,进行充分的卷积来代替点乘,它的好处在于代替点乘的同时,可以对多个特征进行深度交叉。
在这里插入图片描述

但是这有一个隐患在里面,这种充分的特征交叉之后,可能会损失原来的信息,所以为此,又出来了个GMF

GMF

它的本质是重新加入两个用户矩阵和物品矩阵的点乘,不对其进行卷积,保留原来的信息。
在这里插入图片描述
以上就是为了保留原有特征而简单的进行的点乘,最终将如上的改进网络放入到整体的NCF中,最终版本的GMF如下所示。
在这里插入图片描述
上面的GMF Layer其实就是点乘。
这就是矩阵分解的一个发展历程,具体实现有空再写吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值