主成分分析(PCA)

1 主成分分析简介

主成分分析(Principal Component Analysis,PCA), 将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法。主成分分析是由卡尔·皮尔逊(Karl Pearson)于1901年发明的。通过维度约减的方式将高维度空间的数据映射到低维度空间的数据。

2 主成分分析基本原理

2.1 线性变换

主成分分析的核心思想是通过将原数据的维度进行线性变换得到一组新的数据维度(主成分)。这组新的数据维度称为主成分。主成分之间线性无关,主成分实际构建了数据新的特征维度,在该特征维度下,数据的维度可能进行了压降,数据的运算会变得更加容易。

有n个p维的样本,构成样本矩阵

X=\begin{bmatrix} x_{11} &x_{12} &... & x_{1n}\\ x_{21} &x_{22} &... & x_{2n} \\ .& .&... & . \\ x_{p1} &x_{p2} &... & x_{pn} \end{bmatrix}=\begin{bmatrix} x_{1}\\ x_{2} \\ ... \\ x_{p} \end{bmatrix}

假设有一组向量(数据)可以通过x_{1},x_{2},...,x_{p}线性表达

\left\{\begin{matrix} y_{1}=a_{11}x_{1}+a_{12}x_{2}+...+a_{1p}x_{p}\\ y_{2}=a_{21}x_{1}+a_{22}x_{2}+...+a_{2p}x_{p} \\ ... \\ y_{m}=a_{m1}x_{1}+a_{m2}x_{2}+...+a_{mp}x_{p} \end{matrix}\right.

当选择合适的系数,会构建满足条件的新的特征维度y_{1},y_{2},...,y_{m},记Y=\begin{bmatrix} y_{1}\\ y_{2} \\ ... \\ y_{m} \end{bmatrix}

记上述变换为Y=AX

其中A=\begin{bmatrix} a_{11} & a_{12} &... &a_{1p} \\ a_{21}&_{22} & ...&a_{2p} \\ .& .& .& .\\ a_{m1}& a_{m2}& ...&a_{mp} \end{bmatrix}

在构建主成分时,要求y_{i},y_{j}(i\neq j)之间线性无关,且在i<j时,X在主成分y_{i}上投影的方差大于在主成分y_{j}上的投影的方差。如此,数据X在主成分上进行了“分解”,且依据数据信息量的程度将主成分进行了区分和排序。当m<p时,实现了对数据的降维操作。

这里的变换矩阵A即为所求的变换矩阵。

2.2 协方差与相关系数

假设样本x_{1}=(x_{11},x_{12},...,x_{1n}),x_{2}=(x_{21},x_{22},...,x_{2n})

则样本x_{1}的均值为\overline{x_{1}}=\frac{1}{n}\sum_{i=1}^{n}x_{1i},方差为s_{1}=\frac{1}{n-1}\sum_{i=1}^{n}(x_{1i}-\overline{x_{1}})^{2}

样本x_{1},x_{2}的协方差为cov(x_{1},x_{2})=E(x_{1}-\overline{x_{1}})(x_{2}-\overline{x_{2}})=\frac{1}{n-1}\sum_{i=1}^{n}(x_{1i}-\overline{x_{1}})(x_{2i}-\overline{x_{2}})

样本x_{1},x_{2}的相关系数为

r_{12}=\frac{cov(x_{1},x_{2})}{\sqrt{s_{1}s_{2}}}=\frac{\frac{1}{n-1}\sum_{i=1}^{n}(x_{1i}-\overline{x_{1}})(x_{2i}-\overline{x_{2}})}{\sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(x_{1i}-\overline{x_{1}})^{2}*\frac{1}{n-1}\sum_{i=1}^{n}(x_{2i}-\overline{x_{2}})^{2}}}=\frac{\sum_{i=1}^{n}(x_{1i}-\overline{x_{1}})(x_{2i}-\overline{x_{2}})}{\sqrt{\sum_{i=1}^{n}(x_{1i}-\overline{x_{1}})^{2}*\sum_{i=1}^{n}(x_{2i}-\overline{x_{2}})^{2}}}

若将样本x_{1},x_{2}标准化,即\frac{x_{1i}-\overline{x_{1}}}{\sqrt{\frac{1}{n-1}s_{1}}},\frac{x_{2i}-\overline{x_{2}}}{\sqrt{\frac{1}{n-1}s_{2}}},i=1,2,...,n,为便于表达再将其分别记为x_{1},x_{2}

则标准化后的x_{1},x_{2}的均值为0,方差为1,则其协方差矩阵与相关系数均为

r_{12}=\frac{cov(x_{1},x_{2})}{\sqrt{s_{1}s_{2}}}=\frac{1}{n-1}\sum_{i=1}^{n}x_{1i}x_{2i}

在主成分中,由于y_{i},y_{j}(i\neq j)线性无关,故y_{i},y_{j}(i\neq j)的协方差和相关系数均为0。

2.3 特征值与特征向量

现在假设X的分量x_{1},x_{2},...,x_{p}均已按前述操作进行了标准化,则X的协方差矩阵C=\frac{1}{n-1}XX^{T},为p*p的实对称阵。

存在主成分分析对应的矩阵A,使得Y=AX。则Y的协方差矩阵D=\frac{1}{n-1}YY^{T}=\frac{1}{n-1}\begin{bmatrix} y_{1}\\ y_{2} \\ ... \\ y_{m} \end{bmatrix}*\left ( y_{1},y_{2},...,y_{m} \right )

由于y_{i},y_{j}(i\neq j)线性无关,y_{i},y_{j}(i\neq j)的协方差为0,上述矩阵D为对角阵。

D=\frac{1}{n-1}YY^{T}=\frac{1}{n-1}(AX)(AX)^{T}=\frac{1}{n-1}AXX^{T}A^{T}=A(\frac{1}{n-1}XX^{T})A^{T}=ACA^{T}

如此,可以看出主成分分析的问题转化之一的要求是寻找一矩阵A,使得将实对称阵C转化为对角阵D

根据实对称阵的相关代数知识,实对称阵C一定存在一组非负特征值\lambda _{1},\lambda _{2},...,\lambda _{p}和特征向量(单位正交向量)\beta _{1},\beta _{2},...,\beta _{p},使得C\beta _{i}=\lambda _{i}\beta _{i},i=1,2,...,p,其中\beta _{i}p维向量。

B=\left (\beta _{1},\beta _{2},...,\beta _{p} \right ),则CB=B\begin{bmatrix} \lambda _{1} & & & \\ & \lambda _{2} & & \\ & & ... & \\ & & & \lambda _{p} \end{bmatrix}

由于B为正交矩阵,B^{-1}=B^{T},从而将上式左边同时乘以B^{T}得到

B^{T}CB=\begin{bmatrix} \lambda _{1} & & & \\ & \lambda _{2} & & \\ & & ... & \\ & & & \lambda _{p} \end{bmatrix}

A=B^{T},即可找出矩阵A

其对上述特征值,若将其按从大到小排列,即\lambda _{1}\geqslant \lambda _{2}\geqslant ...\geqslant \lambda _{p},则对应的矩阵A为主成分分析所求的线性变换矩阵。

如此,问题得解。

当存在特征值为0时,则m<p,起到降维的效果。

2.4 主成分的贡献

主成分的贡献率衡量的是主成分的影响。

主成分y_{i}的贡献率为\frac{\lambda_{i}}{\sum_{j=1}^{p}\lambda _{j}}

主成分的累计贡献率为\frac{\sum_{j=1}^{i}\lambda_{j}}{\sum_{j=1}^{p}\lambda _{j}}

3 主成分分析算法步骤

3.1 数据标准化

将样本X的每一个数据按照以下方式进行标准化:\frac{x_{ki}-\overline{x_{k}}}{\sqrt{\frac{1}{n-1}s_{k}}},其中\overline{x_{k}},s_{k}的定义见前文。不妨将标准化后的数据仍记为x_{ki},x_{k},X,k=1,2,...,p,i=1,2,...,n

3.2 计算协方差矩阵

C=\frac{1}{n-1}XX^{T}=\frac{1}{n-1}\begin{bmatrix} x_{1}\\ x_{2} \\ ... \\ x_{p} \end{bmatrix}*\left ( x_{1},x_{2},...,x_{p} \right )=\frac{1}{n-1}\begin{bmatrix} r_{11} & r_{12} &... &r_{1p} \\ r_{21}& r_{22}& ...& r_{2p}\\ .&. & ...& .\\ r_{p1}&r_{p2} &... &r_{pp} \end{bmatrix}

3.3 求解特征值和特征向量

记特征值为\lambda(\lambda \geqslant 0),特征向量为\beta,有

C\beta =\lambda \beta,得到方程(\lambda E-C)\beta =0   ......  (1)式。
该方程有非零解的充要条件为行列式\left | \lambda E-C \right |=0。这是一个关于\lambda的齐次线性方程组,求解该方程组,得到\lambda,并将其按从大到小排序。再将\lambda代入(1)式,可求解出特征向量\beta,并将特征向量单位化。

3.4 构造主成分

若对主成分的累计贡献率有要求,如选择累计贡献率\geqslant95%的特征值,记为\lambda _{1},\lambda _{2},...,\lambda _{m},对应的单位特征向量为\beta _{1},\beta _{2},...,\beta _{m}

B=\left (\beta _{1},\beta _{2},...,\beta _{m} \right ),令A=B^{T},利用线性变换Y=AX,得到主成分Y

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)主成分分析有一些演变的方法,如核主成分分析,解决非线性问题的主成分分析问题。

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值