奇异值分解(Singular Value decomposition SVD), 更小的数据集来表示原始数据。去除噪音和冗余数据。
大致原理记录:
如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式:
或
这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的
形式:
其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值
线性变换(矩阵近似),略。再看分解得到的Σ矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的特征
向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)。利用这前N个变化方向,就可以近似这个矩阵(变换)
特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么,可以将
每一个特征向量理解为一个线性的子空间。
特征值使用与方阵,那么矩阵可以分解成:
假设A是一个M *N的矩阵,那么得到的U是一个M *M的方阵(里面的向量是正交的,U里面的向量称为左奇异向量),
Σ是一个M *N的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值),V’(V的转置)是一个N *N的矩阵,里面的
向量也是正交的,V里面的向量称为右奇异向量)。推理略。
这些奇异值(Σ对角元素)对应了原始数据集矩阵A的奇异值。对于PCA,得到的是矩阵的是矩阵的特征值,
并告诉它们是数据集中的重要特征。Σ的奇异值也是如此,奇异值和特征值是有关系的,这里的奇异值就是矩阵A*At特征值的平方根。
矩阵Σ只有从大到小排列的对角矩阵。在科学和工程中,实际上:在某个奇异值的数目(r个)之后,其他奇异值都置为0。
这就意味着数据集中仅有r个重要特征,而其余特征则都是噪声或冗余特征。
如下图,矩阵A奇异值分解:
假设Σ中阴影部分的奇异值远远大于剩余的值,那么A可以用阴影部分的乘积来近似
那么如何保留前r个奇异值呢?确定保留的奇异值的数目有很多启发式的策略。其中一个典型的做法就是保留矩阵90%的能量信息。
为了计算总能量信息,将所有奇异值求平方和, 并把平方和累加到总值得90%为止。
理解原理后,实现比较简单,python 实现了SVD分解函数(linalg库下svd)。