1 主成分分析简介
主成分分析(Principal Component Analysis,PCA), 将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法。主成分分析是由卡尔·皮尔逊(Karl Pearson)于1901年发明的。通过维度约减的方式将高维度空间的数据映射到低维度空间的数据。
2 主成分分析基本原理
2.1 线性变换
主成分分析的核心思想是通过将原数据的维度进行线性变换得到一组新的数据维度(主成分)。这组新的数据维度称为主成分。主成分之间线性无关,主成分实际构建了数据新的特征维度,在该特征维度下,数据的维度可能进行了压降,数据的运算会变得更加容易。
有n个p维的样本,构成样本矩阵
假设有一组向量(数据)可以通过线性表达
当选择合适的系数,会构建满足条件的新的特征维度,记
。
记上述变换为,
其中。
在构建主成分时,要求之间线性无关,且在
时,
在主成分
上投影的方差大于在主成分
上的投影的方差。如此,数据
在主成分上进行了“分解”,且依据数据信息量的程度将主成分进行了区分和排序。当
时,实现了对数据的降维操作。
这里的变换矩阵即为所求的变换矩阵。
2.2 协方差与相关系数
假设样本,
则样本的均值为
,方差为
样本的协方差为
样本的相关系数为
若将样本标准化,即
,为便于表达再将其分别记为
。
则标准化后的的均值为0,方差为1,则其协方差矩阵与相关系数均为
。
在主成分中,由于线性无关,故
的协方差和相关系数均为0。
2.3 特征值与特征向量
现在假设的分量
均已按前述操作进行了标准化,则
的协方差矩阵
,为
的实对称阵。
存在主成分分析对应的矩阵,使得
。则
的协方差矩阵
由于线性无关,
的协方差为0,上述矩阵
为对角阵。
如此,可以看出主成分分析的问题转化之一的要求是寻找一矩阵,使得将实对称阵
转化为对角阵
。
根据实对称阵的相关代数知识,实对称阵一定存在一组非负特征值
和特征向量(单位正交向量)
,使得
,其中
为
维向量。
记,则
。
由于为正交矩阵,
,从而将上式左边同时乘以
得到
。
令,即可找出矩阵
。
其对上述特征值,若将其按从大到小排列,即,则对应的矩阵
为主成分分析所求的线性变换矩阵。
如此,问题得解。
当存在特征值为0时,则,起到降维的效果。
2.4 主成分的贡献
主成分的贡献率衡量的是主成分的影响。
主成分的贡献率为
。
主成分的累计贡献率为。
3 主成分分析算法步骤
3.1 数据标准化
将样本的每一个数据按照以下方式进行标准化:
,其中
的定义见前文。不妨将标准化后的数据仍记为
。
3.2 计算协方差矩阵
3.3 求解特征值和特征向量
记特征值为,特征向量为
,有
,得到方程
...... (1)式。
该方程有非零解的充要条件为行列式。这是一个关于
的齐次线性方程组,求解该方程组,得到
,并将其按从大到小排序。再将
代入(1)式,可求解出特征向量
,并将特征向量单位化。
3.4 构造主成分
若对主成分的累计贡献率有要求,如选择累计贡献率95%的特征值,记为
,对应的单位特征向量为
。
记,令
,利用线性变换
,得到主成分
。
4 主成分分析实例
这里用sklearn中自带的PCA模型及数据进行演示。
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
X = np.array([[-1, -2], [-2, -1], [-3, -2], [2, 1], [2, 1], [3, 2]])
X_std = StandardScaler().fit_transform(X) #数据标准化
pca = PCA(n_components=2)
pca.fit(X_std)
#查看特征值
print(pca.singular_values_)
[3.41436763 0.58488774]
#查看特征向量
print(pca.components_)
[[ 0.70710678 0.70710678] [ 0.70710678 -0.70710678]]
5 主成分分析总结
(1)主成分分析的计算步骤简单,主要是求解特征值和特征向量;
(2)主成分分析的各主成分之间正交,数据运算会变得容易;
(3)当主成分的维度小于原数据维度时,可以起到降维的作用;
(4)主成分维度可能不如原数据维度直观,解释性较差;
(5)主成分分析有一些演变的方法,如核主成分分析,解决非线性问题的主成分分析问题。