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容器 传递给一个标 ...
随机推荐
- IntelliJ IDEA快捷键总结
原文: IntelliJ IDEA快捷键 下面只列出Windows系统下的快捷键,Mac下的快捷键参考上面的链接. Remember these Shortcuts 功能 快捷键 Smart code ...
- ACM-ICPC 2015 ChangChun
比赛链接 :点击这里 大概会写 F G J L 吧 F 给你一个序列 最多删除一个数使他构成 最长不上升或者不下降子序列 这题不会不会on的算法只能 t*n*logn 了 还是压常过 求两次 LIS ...
- A1127. ZigZagging on a Tree
Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can ...
- [luogu1486][郁闷的出纳员]
题目链接 思路 这个题其实就是对于treap中的删除操作进行一些修改.自己yy了一种做法.就是在删除的时候,如果要删除的数比这棵子树的根大,那么就把根变成根的右孩子,这样就相当于删除了整棵左子树和根节 ...
- 第二十节,使用RNN网络拟合回声信号序列
这一节使用TensorFlow中的函数搭建一个简单的RNN网络,使用一串随机的模拟数据作为原始信号,让RNN网络来拟合其对应的回声信号. 样本数据为一串随机的由0,1组成的数字,将其当成发射出去的一串 ...
- post请求中data参数的应用
一.data为参数,json是自动的把参数转换成了json格式,一般建议用json ,url是请求地址. 二,以一个网站来做解释,看登陆的请求 抓包看一下: 用在代码里面看一下: 如果不转的话,那么用 ...
- STL学习笔记:空间配置器allocator
allocator必要接口: allocator::value_type allocator::pointer allocator::const_pointer allocator::referenc ...
- CSS 条件判断、等宽字体以及ch单位
<!DOCTYPE> <html lang="en"> <head> <meta charset="utf-8"> ...
- JS学习笔记Day3
一.什么是循环结构 满足一定条件,(((重复)))执行一段相同的代码 二.循环思想是什么(循环三要素) 开始 结束 步长(步进) 三.可以实现循环语句的有哪些 while do while for 四 ...
- mysqldump常用备份参数
#!/bin/sh DUMP=/usr/bin/mysqldump OUT_DIR=/var/ftp/iips/mysqlbak LINUX_USER=root DB_NAME=yfdmbd DB_U ...