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维矩阵

PCA 主成分分析 用Excel一步步演算过程详解相关推荐

  1. python接入excel_使用python将excel数据导入数据库过程详解

    因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接丢代码,使用python3,注释比较清楚. ...

  2. U-Boot 之三 U-Boot 源码文件解析及移植过程详解

      在之前的博文 Linux 之八 完整嵌入式 Linux 环境介绍及搭建说明 中我们说了要一步步搭建整个嵌入式 Linux 运行环境.我所使用的硬件平台及整个要搭建的嵌入式 Linux 环境见博文 ...

  3. U-Boot 之一 零基础编译 U-Boot 过程详解 及 编译后的使用说明

      在之前的博文 Linux 之八 完整嵌入式 Linux 环境介绍及搭建过程详解 中我们说了要一步步搭建整个嵌入式 Linux 运行环境,今天就开始编译 U-Boot.我所使用的硬件平台及整个要搭建 ...

  4. navicat存储过程返回值为空_Excel VBA解读(128):Function过程详解——枯燥的语法...

    学习Excel技术,关注微信公众号: excelperfect 在<Excel VBA解读(27):看看VBA的Sub过程和Function过程>中,我们讲解了Function过程的基本形 ...

  5. python安装robotframework报错_Python3+RIDE+RobotFramework自动化测试框架搭建过程详解

    Python2.7已于2020年1月1日开始停用,之前RF做自动化都是基于Python2的版本. 没办法,跟随时代的脚步,我们也不得不升级以应用新的控件与功能. 升级麻烦,直接全新安装. 一.Pyth ...

  6. 如何利用一维数组实现二维数组的多列自由升降序排序过程详解

    如何利用一维数组实现二维数组的多列自由升降序排序过程详解 本例只说明多列排序的实现方式,一维数组的排序已经有过讲解不在赘述.所以本文是在已经完成了一维数组排序的函数封装的基础上完善多列排序的过程的详解 ...

  7. 八大典型APT攻击过程详解

    八大典型APT攻击过程详解 2013-08-27 17:55 启明星辰 yepeng 51CTO.com 字号:T | T APT攻击是近几年来出现的一种高级攻击,具有难检测.持续时间长和攻击目标明确 ...

  8. 应用请求web服务器的过程详解

    我们在做渗透测试时,需要知道互联网中是如何处理客户端与服务器端之间的请求的.本文转载一篇文章详解介绍了一次web请求过程的处理. 我们要了解一下Internet中一台计算机访问Web服务器的全部过程, ...

  9. hadoop作业初始化过程详解(源码分析第三篇)

    (一)概述 我们在上一篇blog已经详细的分析了一个作业从用户输入提交命令到到达JobTracker之前的各个过程.在作业到达JobTracker之后初始化之前,JobTracker会通过submit ...

最新文章

  1. 怎么进u8系统服务器网址,服务器地址变更后如何进入u8
  2. 家庭局域网开启AP隔离利用无线路由器互连
  3. Vs code如何快速生成Verilog例化模板
  4. iOS开发UI篇—iOS开发中三种简单的动画设置
  5. 原创跑酷小游戏《Cube Duck Run》 - - 方块鸭快跑
  6. java打包python到exe文件
  7. maxN - 返回数组中N个最大元素 minN - 返回数组中N个最小元素
  8. VS2012一打开就停止工作的解决方法
  9. ant接口用什么天线_天线接口 一个叫SMA 另一个叫TNC
  10. 关于flash player的问题
  11. 计算机快捷方式app卸载,一打开电脑就自动出现的快捷方式软件删不掉怎么办
  12. Springboot RabbitMQ
  13. 【ES6】三种暴露方法和引入方式
  14. 大数据可视化技术:可视化技术概述与Echarts入门
  15. 色彩搭配的原理与避讳
  16. AIO-3588MQ 车规级AI主板
  17. 手把手教你用Python轻松玩转SQL注入
  18. java向kafka推送数据_Java kafka消息的发送与接收
  19. 数据库系统:第二章关系数据库
  20. C/C++语言二维数组的传参方法总结

热门文章

  1. JavaScript实现递归楼梯问题(迭代解决方案)算法(附完整源码)
  2. wxWidgets:实现框架构造器
  3. wxWidgets:wxWeakRef< T >类模板的用法
  4. boost::units::quantity相关的测试程序
  5. boost::stl_interfaces::iterator_interface相关的测试程序
  6. boost::mpl::greater相关的测试程序
  7. boost::gil::view_is_mutable用法的测试程序
  8. boost::fibers::future用法的测试程序
  9. GDCM:gdcm::DirectionCosines的测试程序
  10. Boost:基于Boost的一个微小的actor框架