机器学习笔记(一)PCA原理


PCA(Principal Component Analysis)主成成分分析是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。
实际情况表明,在数据挖掘中,常有特征表现出明显的相关性。当一种特征变化,另一种相应地表现出对应的变化。在这种情况下,如果删除其中一种特征,我们应该并不会丢失太多信息,并且能够有效降低数据维数与机器学习计算复杂度。

PCA原理

PCA转化的意义

向量的内积被表示为:
(a1,a2,a3,ak)(b1,b2,b3,bk)=a1b1+a2b2+a3b3++akbk \left(a_{1}, a_{2}, a_{3}, \ldots a_{k}\right) \cdot\left(b_{1}, b_{2}, b_{3}, \ldots b_{k}\right)=a_{1} b_{1}+a_{2} b_{2}+a_{3} b_{3}+\cdots+a_{k} b_{k} \quad
我们也知道向量的内积等于向量的模乘以余弦夹角:
AB=ABcos(a) A \cdot B=|A||B| \cos (a)
如果假设向量B的模为1,则有:
AB=Acos(a) A \cdot B=|A| \cos (a)
内积运算将两个向量映射为一个实数,此时向量内积的物理含义为向量A在向量B方向上的投影,如图所示:
机器学习笔记(一)PCA原理
一般情况下,在数据挖掘和机器学习中,数据被表示为向量。假设有数据集XX,为方便Python数据计算,数据集中样本用行向量表示,该数据集一共有n个样本,每个样本有m个特征:
X=(x1x2xn) X=\left(\begin{array}{c} x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{array}\right)
一条具有m个特征的数据样本可以被表示为:
Xt=(x1,x2,x3,xm) X_{t}=\left(x_{1}, x_{2}, x_{3}, \ldots x_{m}\right)
一个向量可以对应坐标系中从原点出发的一个有向线段。向量 XtX_{t} 可以表示为:
Xt=x1(1,0,0...,0)T+x2(0,1,0...,0)T++xm(0,0,0...,1)T X_{t}= x_{1}(1,0,0...,0)^{\mathrm{T}}+x_{2}(0,1,0...,0)^{\mathrm{T}}+ \ldots+x_{m}(0,0,0...,1)^{\mathrm{T}}
(1,0,0…,0)等分别表示了空间坐标中的各个基,在m维的空间中,任意向量都可以用这组基来表示。要准确描述向量,即描述向量在基所在的各个直线上的投影值。但实际上任意一组线性无关的向量都可以成为一组基。
PCA方法的目的是将数据集中的特征按照方差最大化的形式进行降维,即:
T=XPT=X P
其中TT是经过PCA转换后的矩阵,P(mn)P(m*n)是需要找到的能够使得TT表现出最大方差的转换矩阵,P的意义即为一组新的基。

PCA的计算步骤

PCA的计算即使求得转化矩阵PP的过程。

  1. 将数据集XX进行Z-score标准化处理
  2. 由式C=1n1XTXC=\frac{1}{n-1} X^{T} X求得协方差矩阵(也有除以n的)
  3. 求协方差矩阵的特征值λiλ _{i}与特征向量pip_{i},并将特征值按从大到小排序,特征向量对应排序。
  4. 假设排序后的特征向量矩阵为:V=(p1,p2,p3,pm)V=\left(p_{1}, p_{2}, p_{3}, \ldots p_{m}\right)选取其中的前KK个主元得到最终的转换矩阵PPP=(p1,p2,p3,pk)P=\left(p_{1}, p_{2}, p_{3}, \ldots p_{k}\right)
  5. 降维公式为:T=XPT=X P重构公式为:T=XPPTT=X PP^{\mathrm{T}}

PCA进行故障检测

对于一个新样本,在进行同样的标准化后,可以使用PCA方法根据以下统计量进行故障检测:

T2T^{\mathrm{2}}统计量

T2=xnewTPS1PTxnew=S1/2PTxnew22 \mathrm{T} 2=x_{n e w}^{T} \mathrm{PS}^{-1} \mathrm{P}^{T} x_{n e w}=\left\|\mathrm{S}^{-1 / 2} \mathrm{P}^{T} x_{n e w}\right\|_{2}^{2}
控制限可以由KDE方法得到或者由下式得到:
Tα=k(n21)n(nk)Fα(k,nk) \mathrm{T}_{\alpha}=\frac{\mathrm{k}\left(\mathrm{n}^{2}-1\right)}{\mathrm{n}(\mathrm{n}-\mathrm{k})} F_{\alpha}(\mathrm{k}, \mathrm{n}-\mathrm{k})
其中,1α1−α是置信度,F是指F分布。

QQ统计量

Q=xnewT(IPPT)xnew \mathrm{Q}=x_{\mathrm{new}}^{\mathrm{T}}\left(\mathrm{I}-\mathrm{PP}^{\mathrm{T}}\right) x_{\mathrm{new}}
控制限可以由KDE方法得到或者由下式得到:
Qα=θ1[cαh02θ2θ1+1+θ2h0(h01)θ12]1/h0\mathrm{Q}_{\alpha}=\theta_{1}\left[\frac{c_{\alpha} h_{0} \sqrt{2 \theta_{2}}}{\theta_{1}}+1+\frac{\theta_{2} h_{0}\left(h_{0}-1\right)}{\theta_{1}^{2}}\right]^{1 / h 0}
其中
θr=j=k+1mλjr(r=1,2,3)\theta_{\mathrm{r}}=\sum_{j=k+1}^{\mathrm{m}} \lambda_{j}^{r}(r=1,2,3)
h0=12θ1θ33θ22h_{0}=1-\frac{2 \theta_{1} \theta_{3}}{3 \theta_{2}^{2}}
cαc_{\alpha}是标准正态分布的置信极限。

代码实现

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