比较 SVD 和 PCA
打开本页,如果没有显示公式,请刷新页面。
在参考资料【1】的第3章3.5.3节对奇异值分解(SVD)做了详细讲解,参考资料【2】中对主成分分析(PCA)做了完整推导。
此处将 SVD 和 PCA 进行比较。
假设样本数量为 的数据集 ,其中 是维数为 的向量,即此数据集的维数是 。
以下是实现 PCA 的过程:
计算每个数据点相对样本平均 的偏差,并以 的矩阵表示,称为偏差矩阵(deviation matrix):
矩阵 的每一行表示一个数据点,每一列代表一个维度(特征、属性、变量)。
并假设不存在常数列。
将 标准化,每一列除以该列的样本标准差。
- 第 列特征值的样本平均:
- 第 列的样本方差 :
- 第 列的样本标准差:
- ,其中
定义 样本协方差矩阵 : ,其中 即为前述表示数据的矩阵。
也可以定义样本相关系数矩阵:
(在下述讨论中,使用样本协方差矩阵 ,如果需要使用样本相关系数矩阵,则将 替换为 即可)
是实对称矩阵,可正交对角化: ,
其中
- 是特征向量(单位正交)构成的 正交矩阵,满足:
- 是特征值矩阵,
主成分系数矩阵:
特征值 是第 个主成分系数(即 的第 列)的样本方差,代表主成分 的权重。
但是,在上述计算样本协方差矩阵 时,在真实的数值计算中,可能会遇到计算中的舍入误差,从造成破坏性影响。比如:
其中 是很小的数,在计算中会得到 ,于是有:
此时, 。
所以,通常将 仅用于理论推导,不用于实际的数值计算。
但是,在 SVD 中,则可以绕过上述问题。
对于偏差矩阵 ,有:
其中:
- 级矩阵 的列向量是单位正交左奇异向量 , ,但 不一定等于
- , 是奇异值
- 矩阵 的列向量是单位正交右奇异向量 ,
注意: 和 的奇异值分解结果不同。
从而有:
代入到 中计算协方差矩阵:
将这个对角化的结果与前述对角化结果 比较,可知:
- 特征值矩阵: ,奇异值 决定特征值:
- 主成分矩阵:
- 主成分系数矩阵: ,矩阵 和奇异值 共同决定主成分系数
不妨假设 的列向量线性无关,即 ,则 , 可逆,其中 。
对 等式两侧右乘 ,得:
第 个主成分系数的样本方差等于 ,
即 经过标准差标准化的结果,称为因子分数矩阵(factor score),它的第 列 表示数据集在第 个主成分的权重。平均值为 0 ,方差为 1 。
下面再引入一个概念:因子负荷(factor loading),用以衡量主成分系数与原特征之间的相关性。用符号 表示第 个特征与第 个主成分系数的相关系数,即因子负荷(特别注意区别特征之间的相关系数,请参阅参考资料【1】第5章5.5.2节内容)。
令 为因子负荷矩阵,前述已经计算得到的 和 都是经过标准差标准化后的数据,则:
因为: , , , 。代入上式,得到:
前面曾经计算过相关系数矩阵 ,如果用 替代 ,则解得因子负荷矩阵:
注意,此处的 和 是由 求得,如果使用 SVD 计算,与前述值有所不同。
参考资料
- 齐伟. 机器学习数学基础. 电子工业出版社
- 主成分分析
作者: 老齐
链接: http://math.itdiffer.com/svdvspca.html
来源: 机器学习
本文原创发布于「机器学习」,转载请注明出处,谢谢合作!