PCA Excel演算

                                       PCA Excel演算

1 声明

本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理。

2 PCA简介

主成分分析(Principal Components Analysis),简称PCA,是一种数据降维技术,用于数据预处理。在PCA中,数据从原来的坐标系转化到新的坐标系中。通常第一个新坐标轴选择的是原始数据方差最大的方向,第二个坐标轴是与第一个坐标轴正交且具有最大方差的方向,也即是第二个选取的方向应该和第一个方向具有很弱的相关性。

 

3 PCA计算过程

假设有如下的二维数据,分别是x、y来演示PCA的计算过程(这里y并不是因变量)。

Step 1:计算连续变量的x、y的均值

x

y

2.5

2.4

0.5

0.7

2.2

2.9

1.9

2.2

3.1

3.0

2.3

2.7

2.0

1.6

1.0

1.1

1.5

1.6

1.1

0.9

 

则可以通过excel的AVERAGE函数,如AVERAGE(A3:A12)得到x列的均值。

Step 2:计算离差(随机变量与其均值的差,去中心化)

注:1 这里以x和y的最后一个元素为例,则离差分别为A12-A13=1.1-1.81=-0.71和B12-B13=0.9-1.91=-1.01.

       2 这里的D和E列是标准化后的数据记为dataAdjust,则其为一个10*2的矩阵。

 

Step 3:计算x和y的协方差

两变量协方差的公式是

 

所以这里即转换成:

  1. x、y对应的离差相乘再求和
  2. 将1)式除以n-1

 

这里以最后一列的0.72为例 ,D12*E12=(-0.71)*(-1.01)=0.72

Step 4:构建协方差矩阵

两变量协方差矩阵的一般形式如下:

这里的cov(x,x)即是x的方差,cov(x,y)见Step3的结果,即0.615444444。。

其中方差的公式:

则得到协方差矩阵如下:

以cov(x,x) x的方差为例,VAR(A3:A12)= 0.616555556

Step 5: 计算特征值并按大小排序

  (这里设k为特征值)由上式得,

(0.616555556-k)*(0.716555556-k)-0.615444444*0.615444444 = 0

整理后得出

k*k-(0.716555556+0.616555556)*k+0.716555556*0.616555556-0.615444444*0.615444444

则按照一元二次方程的标准形式:

a=1

b=-1.333111112

c= 0.063024445584

这里令d=   则,d=1.525087455

用excel解出k的两个根。

即λ1=0.0490834,λ2= 1.284027712

按照特征值大小排序,这里因为是两个,选择大的λ2。

 

Step 6: 计算特征向量

将得到特征值分别带入特征方程中,最终得向量分量间的关系为a1=0.92*a2,再通过单位化(a1*a1+a2*a2=1)最终得到特征向量。(非严格演算)

最终的特征向量为:(-0.6778734, -0.73517866)T

 

或者用python里的scipy求解:

import numpy as np
np.set_printoptions(precision=8)
import numpy as np
from scipy import linalg
A=np.array([[0.616555556,0.615444444],[0.615444444,0.716555556]])
evalue,evector=linalg.eig(A)
print(evalue)
print(evector)

 

Step 6:得到将维的矩阵

用step2里的dataAdjust矩阵(10*2)乘以特征向量(2*1)最终得到10*1的矩阵。

 

4 总结

PCA的处理步骤如下:

  1. 对样本进行去中心化操作。
  2. 计算样本矩阵的协方差矩阵
  3. 对协方差矩阵进行特征分解,计算特征值和特征向量
  4. 特征值从大到小排序
  5. 保留最上面k个特征向量
  6. 将数据转换到k个向量构件的新空间中
  7. n维矩阵*k维特征向量=k维矩阵

猜你喜欢

转载自blog.csdn.net/shenliang1985/article/details/112688982
PCA