为什么要进行矩阵分解?
1、从矩阵变换的角度:
将复合变换后的矩阵分解成基本变换过程。具体请看奇异值分解之矩阵变换角度。
2、从研究动机的角度:
1、为了求解线性方程组:
这类矩阵分解有LU分解(高斯消去法),Cholesky分解,QR分解(Gram-Schmidt正交化过程)等等,本质上是为了更方便更稳定的求解矩阵A的逆。
LU分解:
QR分解:
2、为了研究双线性形式(bilinear form):
其中,和是两个向量空间,是一个数域。这类矩阵分解有Jordan分解,Schur三角分解,特征值分解,奇异值分解等等。研究双线性形式的目的之一是为了寻找标准型(canonical form)我们分别从和中找到一组标准正交基和,那么任意向量和就可以用基下的坐标来表示。
特征值分解(Eigen Value Decomposition,EVD)
首先要理解基变换(坐标变换)再理解特征值的本质。
1、如果一个矩阵的行列式为0(非满秩),其特征值为0,这个证明比较简单:
(单位矩阵有时候用表示,有时候用表示。)
如果,那么,进而
2、对于一个的矩阵,其;
3、主对角线上的元素都不为0,其他元素都为0的矩阵叫对角矩阵,对角矩阵一定是正交矩阵,即其基两两垂直。
特征值分解就是矩阵的对角化,就是可以将分解为,是由对应特征向量组成的矩阵--特征矩阵,为对角矩阵,对角线上的元素为的特征值。只有在一定条件下,一个变换可以由其特征值和特征向量完全表述,也就是说:所有的特征向量组成了空间的一组基。并不是所有方阵都可以对角化,方阵可以被对角化的条件是 :
n阶方阵有n个不同的特征值;
如果阶n方阵存在重复的特征值,每个特征值的线性无关的特征向量的个数恰好等于该特征值的重复次数。
实际上都是为了保证是可逆的,如果存在个线性无关的特征向量,则矩阵一定可逆 。
正交矩阵一定可以对角化。以三维空间为例,正交矩阵就是歪着的立方体,对角化就是把这个立方体摆正(就是让它的某一个顶点放在原点上,同时这个顶点的三条边放在三条坐标轴上)。对角矩阵就是摆正后的立方体。
机器学习中的特征值分解,往往是协方差矩阵,如PCA,所以我们要确保各个特征之间是线性无关的。
奇异值分解(Singular Value Decomposition,SVD)
如何通俗地理解奇异值?
我们知道一个向量张成的空间是一条直线,任意实数可以得到非零向量张成的空间是一条直线。那么如果一个维空间中的向量其所张成的空间——一条直线上的点,经过一个矩阵变换到另一个的空间中依然在同一条直线上,这个直线是空间中的向量所张成的空间,只是会有对应的缩放,这个缩放的程度就是奇异值。用数学形式表达为:,是空间中的向量,是的变换矩阵,是空间中的向量,就是奇异值。
可以感觉到特征值是奇异值的特例,当m=n且和重叠的时候(方向可以不同),奇异值=特征值。
奇异值分解计算例子:
https://www.cnblogs.com/marsggbo/p/10155801.html
从矩阵变换角度理解
奇异值分解的几何意义
奇异值分解的物理意义(应用)
数据/图像的压缩
图像去噪
https://www.zhihu.com/question/22237507
https://blog.csdn.net/bitcarmanlee/article/details/52662518
https://blog.csdn.net/billbliss/article/details/78559289
SVD(奇异值分解)Python实现: https://www.cnblogs.com/endlesscoding/p/10058532.html
矩阵分解为了解决传统协同过滤处理稀疏共现矩阵能力差的问题。使用矩阵分解相比传统协同过滤也提升了泛化性。
基于矩阵分解的模型又叫潜在因素模型、隐语义模型。
矩阵分解的开端是2006年的Netflix竞赛。
三角分解(LU分解)
QR分解
Jordan分解
机器学习中的矩阵分解
1、推荐系统中:
分解的是什么矩阵?共现矩阵
怎么共现矩阵分解?
1)特征值分解
要求待分解的是方阵,所以行不通
2)奇异值分解
要求待分解矩阵是稠密矩阵,而共现矩阵是稀疏矩阵,所以不行;
奇异值分解的复杂度是,复杂度很高,也不合适。
3)梯度下降法——也就是交替最小二乘法(alternating least squares,ALS),解决两个变量求解。
使用梯度下降法进行矩阵分解
(1)确定目标函数:,就是一个MSE;
(2)分别对和求偏导
(3)参数更新
(4)迭代
得到隐向量后,对某个用户进行推荐时,利用该用户的隐向量与所有物品的隐向量进行逐一内积运算,得到该用户对所有物品的得分,再进行排序,得到最终的推荐列表。
4)贝叶斯矩阵分解
https://zhuanlan.zhihu.com/p/26067454
2、PCA---奇异值分解