pytorch学习之矩阵分解
系列文章目录
文章目录
- 系列文章目录
- 一、矩阵分解理论知识
- 1 EVD 分解与 PCA
- SVA 分解与LDA
一、矩阵分解理论知识
深度学习的矩阵分解常用的如下分解方式:
- LU 分解:将矩阵分成上三角矩阵 L 和下三角矩阵 U,然后乘积。
- QR分解:将原始矩阵分解成一个正交矩阵 Q 和一个上三角矩阵 R,然后乘积。
- EVD 分解:特征值分解
- SVD 分解:奇异值分解
LU分解更多的使用在计算行列式和方程组的解的问题,他的本质和高斯消元法差不多。QR分解在论文中可能会见到,EVD 分解对应 PCA 降维,SVD 对应 LDA 算法。这里主要介绍一下 EVD 特征值分解和 SVD 奇异值分解。
1 EVD 分解与 PCA
矩阵必须是方阵并且满秩(非奇异值矩阵),特征值分解,把矩阵分解成特征值和特征向量之积 A ξ ⃗ = λ ξ ⃗ A\vec{\xi} = \lambda\vec{\xi} Aξ=λξ,一半而言,我们采用的是正交分解: A = Q B Q − 1 A = QBQ^{-1} A=QBQ−1,其中Q是特征值对应的特征向量,B就是特征值构成的矩阵。这里,我们不得不说 PCA 算法了:
- 将 n 维特征值映射到 k 维上,而这 k 维向量就是我们的正交向量其中的一部分,俗称主成分。
- PCA 算法的优化目标:
– 降维后,同一纬度的方差最大。
– 不同纬度之间的相关性为零。这两点就可以采用协方差矩阵来衡量。
这样做的理由用线性代数来解释,我们通过正交矩阵来分解,得到的特征向量可以作为空间坐标的基,以此来重构向量,任何一个向量都可以用这组基来表示。为什么会降维,根据特征值,有些小的特征值或许是噪点,我们应该抛弃对应的特征向量,所以 n 个特征向量可能降维到 k 个特征向量。
SVA 分解与LDA
&emsp奇异值分解的形式如下: A = P B V − 1 A = PBV^{-1} A=PBV−1,A的规模是 m x m,B的规模是 m x n,B由特征值构成,V 的规模是 n x n. LDA算法在判别或者鉴别中常用,如岭回归。 y = w T b y = w^Tb y=wTb ,把所有的样本映射到这条直线上面,类的中心点要求:
- 同一类的样本距离尽可能小
- 不同类别的样本距离尽可能大
J ( w ) = w T S B w w T S W w (1) J(w) = \frac{w^TS_Bw}{w^TS_Ww\tag{1}} J(w)=wTSWwwTSBw(1)
这个就是优化函数, S B S_B SB 是类间的协方差, S W S_W SW类内协方差。协方差有两个作用:
- 表示两个变量之间的线性相关性,协方差越大,相关性越强。
- 表示样本之间的离散程度,协方差越小说明样本聚合程度越高。
很显然我们在这里使用第二种作用。J 就是优化函数,求最大值。
S W − 1 S B W = λ W (2) S_{W}^{-1}S_BW = \lambda W \tag{2} SW−1SBW=λW(2)
S W − 1 S B S_{W}^{-1}S_B SW−1SB 这个可以看作 A,而 W 矩阵可以看作特征向量,λ 可以看作特征值,此时 W 也可以认为是主要成分。注意:矩阵分解并不是特征降维,我们特征降维,根据矩阵分解,删除一些特征值和对应的特征向量从而到达降维的目的。
torch.svd() 这个就是 python 代码