PCA(主成分分析)的简单理解
PCA(Principal Components Analysis),它是一种“投影(projection)技巧”,就是把高维空间上的数据映射到低维空间。比如三维空间的一个球,往坐标轴方向投影,变成了一个圆。球是3维的,圆是2维的。在球变成圆的这个投影过程中,丢失了原来物体(球)的一部分“性质”---圆不是球了,只有面积没有体积了;也保留了原来物体的一部分性质---圆 和 球 还是很像的……
而对于一个训练样本y而言,假设它有M个特征(M维),y={y1, y2,...yM},通过PCA,进行投影,降维成D维(M>D)。为什么要降维?最主要的两个原因是:
①可视化,我们只能看到一维、二维、三维空间上的物体,当某物体需要4维或以上特征表示时,只能想象了……
②特征选择(feature selection),比如说采集到的某个样本 由 20维特征 组成,其中有一些特征属于“噪音(noise)",而由于某些原因,我们不想要这些“噪音”。又比如说,存在特征冗余,描述一个球,可以用如下特征:(体积、面积、直径、半径),其实我只需要知道半径、直径、面积、体积这些都可以通过公式求出来。因此,体积、面积 、直径这些特征,相对于半径来说,是冗余的特征。
如何降维?
PCA降维的目标就是:找到一种投影方式,将原来的M维样本y 变成 D维样本x,并且使得投影之后的D维样本x,能够尽可能多地保存原来的样本y中的信息。由于将y投影成x,可以有不同的投影方向,那哪个投影方向比较好呢?即,能够尽可能多地保存原来的样本y中的信息呢?
maintains the characteristics of the original object as much as possible
可以使用方差来衡量投影方向的好坏。如下图:

上图中有“两团点”,在聚类算法中称为有两个聚簇。将这两个簇中的点 往B方向投影,B箭头指向的那条直线上的点,表示 投影之后得到的新样本点,已经看不出有两个簇了。而此时,得到的方差是σ2B=8.35.
往A方向投影,A箭头指向的那条直线上的点,还能够明显地看出有 两类,即还能够保存“两个簇“的结构,这说明投影方向A比B 要好,因为原来的样本点有两个簇,而往A方向投影后,还能看出有两个簇。此时得到的方差σ2A=17.37.
这表明:可以使用 投影后的所有样本点的 方差大小,来衡量投影方向的好坏!
假设有N个样本点,用Y表示,每个样本点是M维的。现在使用PCA降维,降成D维的,用X表示。X中还是有N个样本点,只是每个样本的维数变成D维的了。
这种投影方式,用矩阵乘法表示:XN*D=YN*M*WM*D

对于投影之后的样本x 的第d个特征xnd而言,有:
xn=w1T*yn , xn=w2T*yn ,.... xnd=wdT*yn
xn=(xn1,xn2,...xnd)T=WT*yn
也就是说,PCA降维的本质是:找到一个M*D维的矩阵W。可以对W=(w1,w2,...wd)进行一些约束:||wi||=1,且wTi*wj=0 (j != i),只要W满足:X=Y*W即可。
在数学上,PCA投影是一种线性变换。因为,根据线性变换的定义:
给定函数L: Rn-->Rm,如果:
- 对于任意的x belongs to Rn,a 属于实数R,有L(a*x)=a*L(x)
- 对于任意的x,y belongs to Rn,有L(x+y)=L(x)+L(y)
则称函数L是一个线性变换。线性变换对加法和数乘封闭。上面的条件1,表示L对数乘封闭;条件2,表示L对加法封闭。
而对于矩阵A而言, A*x=b,是满足线性变换的定义的。比如,对于向量x和y,A(x+y)=A*x + A*y;对于实数a,A(a*x)=a*A*x
将矩阵A 作用于 向量x 上,即矩阵A与向量x相乘,就相当于 函数L 作用于x上。
因此,由xn=(xn1,xn2,...xnd)T=WT*yn,可知:PCA是一个线性变换。
回到公式:XN*D=YN*M*WM*D,如何选择合适的W矩阵呢?----使用方差最大来确定W矩阵。因为 方差 可以 衡量投影方向的好坏。
而将矩阵A与向量u相乘,其实就是改变了向量u的方向和大小而已。但是,如果向量u是矩阵A的特征向量,那么 A*u 不会改变向量u的方向。如下图:

在求解 投影后的样本集X 的方差之前,先假设原始样本集Y的每一维特征的均值为0(m个0),即y¯¯=[0,0,...0]T。为了简化讨论,假设将原来的M维降成 D=1维。此时,W矩阵就退化为只有一个向量。即寻找一个向量w,对于Y中任何一个样本yn=(yn1,yn2,...ynm),有xn =(xn1,xn2,...xnd)=(xn1)= wT*yn
根据公式:xn=wT*yn 得到样本集X的均值为:

再根据方差的定义,和 X的均值为0,故X的方差为:

对于样本集Y而言,根据样本协方差矩阵的定义 和 y的均值y¯¯=0,可知:C与样本协方差矩阵密切相关。
因此,要想最大化X的方差,就是最大化wTCw,而C是一个确定的值---由Y的协方差矩阵决定了。因此,我们的目标是尽可能地使w大,而根据我们前面的约束:||w||=1。故最大化wTCw可以使用拉格朗日乘子,转化成如下的约束优化问题:

通过求偏导数,求得:使L最大化 的w的公式:Cw=λw。而这刚好是特征向量的定义,λ是矩阵C的特征值,w则是对应的特征向量。
由于 ||w||=wTw=1,σ2 = wTCw,左边乘上wTw,得到:σ2 *wTw=wTCw,也即:σ2w=Cw,因此方差σ2就是特征值λ,而最大化方差,其实就是选择矩阵C的最大化的特征值而已,相应的变换向量w,其实就是特征值对应的特征向量。
因此,更一般地,将原来的样本集Y,M维特征 降到 D维,其实就是计算矩阵C(与Y的协方差矩阵息息相关)的特征值和特征向量,由于 C 是一个M*M维的矩阵,因此一共有 m 个特征值,及其对应的 m 个特征向量。而我们只需要选择 前D个 最大的 特征值 对应的特征向量,并将之 作为线性变换矩阵 W 即可。
参考文献:《a first course in machine learning》第七章
原文:http://www.cnblogs.com/hapjin/p/6728697.html
PCA(主成分分析)的简单理解的更多相关文章
- 关于PCA主成分分析的一点理解
PCA 即主成分分析技术,旨在利用降维的思想,把多指标转化为少数几个综合指标. 假设目前我们的数据特征为3,即数据维度为三,现在我们想将数据降维为二维,一维: 我们之前的数据其实就是三维空间中的一个个 ...
- 【转】浅谈对主成分分析(PCA)算法的理解
以前对PCA算法有过一段时间的研究,但没整理成文章,最近项目又打算用到PCA算法,故趁热打铁整理下PCA算法的知识.本文观点旨在抛砖引玉,不是权威,更不能尽信,只是本人的一点体会. 主成分分析(PCA ...
- 用PCA(主成分分析法)进行信号滤波
用PCA(主成分分析法)进行信号滤波 此文章从我之前的C博客上导入,代码什么的可以参考matlab官方帮助文档 现在网上大多是通过PCA对数据进行降维,其实PCA还有一个用处就是可以进行信号滤波.网上 ...
- 机器学习之PCA主成分分析
前言 以下内容是个人学习之后的感悟,转载请注明出处~ 简介 在用统计分析方法研究多变量的课题时,变量个数太多就会增加课题的复杂性.人们自然希望变量个数较少而得到的 信息较多.在很 ...
- PCA主成分分析Python实现
作者:拾毅者 出处:http://blog.csdn.net/Dream_angel_Z/article/details/50760130 Github源代码:https://github.com/c ...
- 机器学习 - 算法 - PCA 主成分分析
PCA 主成分分析 原理概述 用途 - 降维中最常用的手段 目标 - 提取最有价值的信息( 基于方差 ) 问题 - 降维后的数据的意义 ? 所需数学基础概念 向量的表示 基变换 协方差矩阵 协方差 优 ...
- PCA主成分分析(上)
PCA主成分分析 PCA目的 最大可分性(最大投影方差) 投影 优化目标 关键点 推导 为什么要找最大特征值对应的特征向量呢? 之前看3DMM的论文的看到其用了PCA的方法,一开始以为自己对于PCA已 ...
- git的简单理解及基础操作命令
前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
随机推荐
- 【BZOJ5332】[SDOI2018]旧试题(数论,三元环计数)
[BZOJ5332][SDOI2018]旧试题(数论,三元环计数) 题面 BZOJ 洛谷 题解 如果只有一个\(\sum\),那么我们可以枚举每个答案的出现次数. 首先约数个数这个东西很不爽,就搞一搞 ...
- Keepalived+Nginx搭建主从高可用并带nginx检测
应用环境:部分时候,WEB访问量一般,或者测试使用,利用Keepalived给Nginx做高可用即可满足要求. 测试环境: 搭建步骤: 1. 安装软件 在Nginx-A和Nginx-B上: ~]# ...
- Manacher (最长回文序列)
https://www.cnblogs.com/grandyang/p/4475985.html 思路是学习的是上面博客的想法,思路很清晰 优化的方法和exkmp有异曲同工的地方 博客里的内容我在这里 ...
- 前端基础-- CSS
CSS知识 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染).Css之车更丰富的文档外 ...
- php记录
PHP反射API 反向代理使用https协议,后台Tomcat使用http,redirect时使用错误协议的解决办法 多记几个导出公式,手中有粮,心中不慌 哈哈哈 PhpExcel中文帮助手册 Php ...
- python学习笔记—Day1
1. python使用<变量名>=<表达式>的方式对变量进行赋值 a=1; python中数分为整数和浮点数 字符串的定义一定要用引号,单引号和双引号是等价的 三引号用来输入包 ...
- java web整合office web apps
1.下载安装vmware虚拟机 2.下载windows server 2012或者window server 2012 R2的iso镜像 http://www.xp85.com/html/Window ...
- Httpclient超时timeout设置
一:连接超时:connectionTimeout 1:指的是连接一个url的连接等待时间. 二:读取数据超时:soTimeout 1:指的是连接上一个url,获取response的返回等待时间. Fo ...
- 高级组件——菜单栏JMenuBar
菜单栏JMenuBar,菜单JMenu,菜单项JMenuItem 一旦A有子菜单项,则A为菜单JMenu,而不是菜单项JMenuItem import javax.swing.*; import ja ...
- keepalived+LVS实现网站负载均衡和HA
如上图所示,102和103是内网nginx服务器,100和101是边界LB,clinet是1,这个实验是为了实现在LB上虚拟出一个VIP,client通过访问该VIP,来动态负载到两台内网nginx服 ...