再谈PCA
其实之前写过PCA相关的博文,但是由于之前掌握的理论知识有限,所以理解也比较浅。这篇博文,我们以另外一种角度来理解PCA看,这里我假设大家对PCA都有一个初步的了解。首先,我们举一个二维空间中的例子,如下图:
左图表示二维空间中的五个点,我们试图找一个投影方向使得这5个点投影在这个方向上的方差最大。这里举了两个例子中图和右图,很明显中图的方差是所有投影方向中方差最大的投影方向。ps:这里解释一下方差的意义,纯属个人理解。设想一下,如果我们有一个投影方向A 和 B, 原始特征经过A 投影后数据几乎集中在一点,也就是说方差几乎为零。这个时候我们可以认为,投影后的样本在这一维上的特征几乎是一样一样的。这样一来我们得到新的空间里特征反映的信息就非常少,我们有理由认为这个投影方向非常差。相反呢,如果经过B 投影后,样本在新的特征空间方差非常大(如中图),我们认为新的样本这一维上的信息非常明确,也就是说这个投影方向是一个“主投影方向”。PCA的目的就是要找到最好的k个“主投影方向”,怎么来判断这个投影方向好不好,我们已经讲了,用方差:投影后方差越大就越好。
接下来我们用数学公式来证明一下:假设我们有m个样本,u是要求解的投影方向,
为样本点,这里的
已经去均值化了,那么最大化方差可以形式化最大下面式子:

ps:这里解释一样,
这是方差的计算公式,样本
在投影后对应的新的样本是
,由于原始空间去均值化这里新得到的样本也去均值化了,所以新的样本的方差就可以表示为
,后面的式子就不解释了,并且这里
。
于是乎,我们就把最大化方差这个问题转化为求解这个式子
的特征向量的问题了。至于为什么是这样呢,数学上有证明,如下:(这里使用的市拉格朗日方程来求解最大化问题)

对u求导可得:

令导数为零就可以知道u就是
的特征向量了,并且这些特征向量都是正交的,于是我们选取最大k个特征值对应的特征向量就可以构成方差最大的子空间了,样本投影在这个子空间每一维上的方差最大。
总结:博文虽短,但是对于一些对PCA有一定了解却不知所以然的人,相信还是值得一看的。
再谈PCA的更多相关文章
- [转载]再谈百度:KPI、无人机,以及一个必须给父母看的案例
[转载]再谈百度:KPI.无人机,以及一个必须给父母看的案例 发表于 2016-03-15 | 0 Comments | 阅读次数 33 原文: 再谈百度:KPI.无人机,以及一个必须 ...
- Support Vector Machine (3) : 再谈泛化误差(Generalization Error)
目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...
- Unity教程之再谈Unity中的优化技术
这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体 这一步主要是为了针对性能瓶颈中的”顶点 ...
- 浅谈HTTP中Get与Post的区别/HTTP协议与HTML表单(再谈GET与POST的区别)
HTTP协议与HTML表单(再谈GET与POST的区别) GET方式在request-line中传送数据:POST方式在request-line及request-body中均可以传送数据. http: ...
- Another Look at Events(再谈Events)
转载:http://www.qtcn.org/bbs/simple/?t31383.html Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不 ...
- C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)
STL实践与分析 --再谈string类型(下) 四.string类型的查找操作 string类型提供了6种查找函数,每种函数以不同形式的find命名.这些操作所有返回string::size_typ ...
- 再谈JSON -json定义及数据类型
再谈json 近期在项目中使用到了highcharts ,highstock做了一些统计分析.使用jQuery ajax那就不得不使用json, 可是在使用过程中也出现了非常多的疑惑,比方说,什么情况 ...
- C++ Primer 学习笔记_44_STL实践与分析(18)--再谈迭代器【下】
STL实践与分析 --再谈迭代器[下] 三.反向迭代器[续:习题] //P355 习题11.19 int main() { vector<int> iVec; for (vector< ...
- C++ Primer 学习笔记_43_STL实践与分析(17)--再谈迭代器【中】
STL实践与分析 --再谈迭代器[中] 二.iostream迭代[续] 3.ostream_iterator对象和ostream_iterator对象的使用 能够使用ostream_iterator对 ...
随机推荐
- 【个人】IIS Express 配置
<!-- 查看URL访问控制列表: netsh http show urlacl 添加URL访问控制: netsh http add urlacl url=http://myhostname:8 ...
- jQuery ui datepicker 日历转中文
做个笔记,以后详解 jQuery(function($){ $.datepicker.regional['zh-CN'] = { closeText: '关闭', prevText: '<上月' ...
- Messages.pas里的消息
一.Windows 消息大全 这张表拷贝自万一兄的帖子:http://www.cnblogs.com/del/archive/2008/02/25/1079970.html 但是我希望自己能把这些消息 ...
- 自己实现的库函数1(strlen,strcpy,strcmp,strcat)
为了便于理解和使用库函数,先把自己实现的几个函数以及测试函数呈现如下. //求字符串长度的函数int my_strlen(const char* pStr){ assert(pStr != NULL) ...
- Python默认模块 os和shutil 实用函数
os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是 ' ...
- 安装Golang 1.6及开发环境
安装Golang 1.6及开发环境=====================================> 下载软件 * go1.4.2.linux-amd64.tar.gz ...
- c++类中的静态成员
静态成员和非静态成员的区别: 类静态成员用static修饰,类的静态成员属于类本身,而不属于类的某个具体对象,静态成员被类的所有对象共享,因此某个对象对静态成员(数据成员)的修改对其对象是可见的.而类 ...
- iTween基础之Rotate(旋转角度)
一.基础介绍:二.基础属性 原文地址 :http://blog.csdn.net/dingkun520wy/article/details/50696489 一.基础介绍 RotateTo:旋转游戏物 ...
- LoadRunner 学习笔记(1)性能测试常见术语
并发用户数据:与服务器进行交互的在线用户数量 请求响应时间:从Client端发出请求到得到响应的整个时间 一般包括网络响应时间 + server的响应时间 事务请求响应时间:完成这个事务所用的时间 这 ...
- sharepoint 列表的column验证----------SharePoint 2010 List Validation Formula
首先,依次打开-站点->列表名称->列表设置->验证设置: 我们设置一个时间的列不能小于当前时间,并且在编辑的时候不需要验证. =OR([,Created<TODAY())