PCA(Principal Component Analysis)主成成分分析是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。
实际情况表明,在数据挖掘中,常有特征表现出明显的相关性。当一种特征变化,另一种相应地表现出对应的变化。在这种情况下,如果删除其中一种特征,我们应该并不会丢失太多信息,并且能够有效降低数据维数与机器学习计算复杂度。
PCA原理
PCA转化的意义
向量的内积被表示为:
(a1,a2,a3,…ak)⋅(b1,b2,b3,…bk)=a1b1+a2b2+a3b3+⋯+akbk
我们也知道向量的内积等于向量的模乘以余弦夹角:
A⋅B=∣A∣∣B∣cos(a)
如果假设向量B的模为1,则有:
A⋅B=∣A∣cos(a)
内积运算将两个向量映射为一个实数,此时向量内积的物理含义为向量A在向量B方向上的投影,如图所示:

一般情况下,在数据挖掘和机器学习中,数据被表示为向量。假设有数据集X,为方便Python数据计算,数据集中样本用行向量表示,该数据集一共有n个样本,每个样本有m个特征:
X=⎝⎜⎜⎜⎛x1x2⋮xn⎠⎟⎟⎟⎞
一条具有m个特征的数据样本可以被表示为:
Xt=(x1,x2,x3,…xm)
一个向量可以对应坐标系中从原点出发的一个有向线段。向量 Xt 可以表示为:
Xt=x1(1,0,0...,0)T+x2(0,1,0...,0)T+…+xm(0,0,0...,1)T
(1,0,0…,0)等分别表示了空间坐标中的各个基,在m维的空间中,任意向量都可以用这组基来表示。要准确描述向量,即描述向量在基所在的各个直线上的投影值。但实际上任意一组线性无关的向量都可以成为一组基。
PCA方法的目的是将数据集中的特征按照方差最大化的形式进行降维,即:
T=XP
其中T是经过PCA转换后的矩阵,P(m∗n)是需要找到的能够使得T表现出最大方差的转换矩阵,P的意义即为一组新的基。
PCA的计算步骤
PCA的计算即使求得转化矩阵P的过程。
- 将数据集X进行Z-score标准化处理
- 由式C=n−11XTX求得协方差矩阵(也有除以n的)
- 求协方差矩阵的特征值λi与特征向量pi,并将特征值按从大到小排序,特征向量对应排序。
- 假设排序后的特征向量矩阵为:V=(p1,p2,p3,…pm)选取其中的前K个主元得到最终的转换矩阵P:P=(p1,p2,p3,…pk)
- 降维公式为:T=XP重构公式为:T=XPPT
PCA进行故障检测
对于一个新样本,在进行同样的标准化后,可以使用PCA方法根据以下统计量进行故障检测:
T2统计量
T2=xnewTPS−1PTxnew=∥∥∥S−1/2PTxnew∥∥∥22
控制限可以由KDE方法得到或者由下式得到:
Tα=n(n−k)k(n2−1)Fα(k,n−k)
其中,1−α是置信度,F是指F分布。
Q统计量
Q=xnewT(I−PPT)xnew
控制限可以由KDE方法得到或者由下式得到:
Qα=θ1[θ1cαh02θ2+1+θ12θ2h0(h0−1)]1/h0
其中
θr=j=k+1∑mλjr(r=1,2,3)
h0=1−3θ222θ1θ3
cα是标准正态分布的置信极限。
代码实现
https://github.com/beiluo-horizon/Machine-Learning-Model/blob/master/PCA_Method_Class.py
参考
http://blog.codinglabs.org/articles/pca-tutorial.html
https://blog.****.net/And_ZJ/article/details/90576240