其实之前写过PCA相关的博文,但是由于之前掌握的理论知识有限,所以理解也比较浅。这篇博文,我们以另外一种角度来理解PCA看,这里我假设大家对PCA都有一个初步的了解。首先,我们举一个二维空间中的例子,如下图:

                               

    左图表示二维空间中的五个点,我们试图找一个投影方向使得这5个点投影在这个方向上的方差最大。这里举了两个例子中图和右图,很明显中图的方差是所有投影方向中方差最大的投影方向。ps:这里解释一下方差的意义,纯属个人理解。设想一下,如果我们有一个投影方向A 和 B, 原始特征经过A 投影后数据几乎集中在一点,也就是说方差几乎为零。这个时候我们可以认为,投影后的样本在这一维上的特征几乎是一样一样的。这样一来我们得到新的空间里特征反映的信息就非常少,我们有理由认为这个投影方向非常差。相反呢,如果经过B 投影后,样本在新的特征空间方差非常大(如中图),我们认为新的样本这一维上的信息非常明确,也就是说这个投影方向是一个“主投影方向”。PCA的目的就是要找到最好的k个“主投影方向”,怎么来判断这个投影方向好不好,我们已经讲了,用方差:投影后方差越大就越好。

    接下来我们用数学公式来证明一下:假设我们有m个样本,u是要求解的投影方向,为样本点,这里的已经去均值化了,那么最大化方差可以形式化最大下面式子:

                                          

   ps:这里解释一样, 这是方差的计算公式,样本在投影后对应的新的样本是,由于原始空间去均值化这里新得到的样本也去均值化了,所以新的样本的方差就可以表示为 ,后面的式子就不解释了,并且这里

    于是乎,我们就把最大化方差这个问题转化为求解这个式子 的特征向量的问题了。至于为什么是这样呢,数学上有证明,如下:(这里使用的市拉格朗日方程来求解最大化问题)

                                  

    对u求导可得:

                                   

    令导数为零就可以知道u就是 的特征向量了,并且这些特征向量都是正交的,于是我们选取最大k个特征值对应的特征向量就可以构成方差最大的子空间了,样本投影在这个子空间每一维上的方差最大。

    总结:博文虽短,但是对于一些对PCA有一定了解却不知所以然的人,相信还是值得一看的。

   

 

 

再谈PCA的更多相关文章

  1. [转载]再谈百度:KPI、无人机,以及一个必须给父母看的案例

    [转载]再谈百度:KPI.无人机,以及一个必须给父母看的案例 发表于 2016-03-15   |   0 Comments   |   阅读次数 33 原文: 再谈百度:KPI.无人机,以及一个必须 ...

  2. Support Vector Machine (3) : 再谈泛化误差(Generalization Error)

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  3. Unity教程之再谈Unity中的优化技术

    这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体   这一步主要是为了针对性能瓶颈中的”顶点 ...

  4. 浅谈HTTP中Get与Post的区别/HTTP协议与HTML表单(再谈GET与POST的区别)

    HTTP协议与HTML表单(再谈GET与POST的区别) GET方式在request-line中传送数据:POST方式在request-line及request-body中均可以传送数据. http: ...

  5. Another Look at Events(再谈Events)

    转载:http://www.qtcn.org/bbs/simple/?t31383.html Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不 ...

  6. C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)

    STL实践与分析 --再谈string类型(下) 四.string类型的查找操作 string类型提供了6种查找函数,每种函数以不同形式的find命名.这些操作所有返回string::size_typ ...

  7. 再谈JSON -json定义及数据类型

    再谈json 近期在项目中使用到了highcharts ,highstock做了一些统计分析.使用jQuery ajax那就不得不使用json, 可是在使用过程中也出现了非常多的疑惑,比方说,什么情况 ...

  8. C++ Primer 学习笔记_44_STL实践与分析(18)--再谈迭代器【下】

    STL实践与分析 --再谈迭代器[下] 三.反向迭代器[续:习题] //P355 习题11.19 int main() { vector<int> iVec; for (vector< ...

  9. C++ Primer 学习笔记_43_STL实践与分析(17)--再谈迭代器【中】

    STL实践与分析 --再谈迭代器[中] 二.iostream迭代[续] 3.ostream_iterator对象和ostream_iterator对象的使用 能够使用ostream_iterator对 ...

随机推荐

  1. js 倒计时 倒计时60秒

    <input type="button" id="btn" value="免费获取验证码" onclick="settime ...

  2. 怎样按字母顺序(ABCDEF)动态添加控件

    考试系统中题库设计时,我想动态添加选项,顺序按ABCDEF这样,点击一下按钮添加A(radiobutton),再点击添加B,如此依次添加.本人比较菜,求达人写一个方法. private void bu ...

  3. 使用 rem 实现 适配各种屏幕布局

    年数已久!!!技术更新太快,谨慎观看,不过作为了解一下思路还是可以的 在此呢,我只大略的谈一下在研究了px,em,rem,和手淘的做法之后,我所采用的做法及硬性规则: 我就不再过多的将上面三种单位的区 ...

  4. getMeasuredHeight() 与 getHeight() 的区别

    http://www.cnblogs.com/x-dev/p/3767538.html?utm_source=tuicool&utm_medium=referral public final ...

  5. centOS 一键php环境安装-php博弈

    我是方少,闲着没事,感觉每次编译安装,再修改php,mysql,redis,nginx配置文件觉得把大好的青春时间都浪费掉了.如是想着,怎样一键安装 php环境和相关配置.于是拜读了一下lnmp的一键 ...

  6. 让ImageView可以使用gif的方法

    在自己的包中添加MyGifView.java(直接复制,粘贴),读取gif资源在MyGifView中第20行读取: MyGifView.java: package com.zzw.testgifuse ...

  7. sql中的系统表sysobjects以及如何查看sql语句的执行时间

    使用sysobjects可以快速查看数据库中表.视图.存储过程.触发器.约束等的信息. 大牛文章:http://www.cnblogs.com/atree/p/SQL-Server-sysobject ...

  8. 打包python脚本为exe可执行文件-pyinstaller和cx_freeze示例

    本文介绍使用cx_freeze和pyinstaller打包python脚本为exe文件 cx_freeze的使用实例 需要使用到的文件wxapp.py, read_file.py, setup.py ...

  9. 一个简单WPF登陆界面,包含记住密码,自动登录等功能,简洁美观

    简介:这是一个自己以前用WPF设计的登陆界面,属于一个实验性的界面窗体,如果用于产品还很有不足.但也是有一点学习价值.后台代码略有复杂,但基本上都有注释 分类,略有代码经验的一般都能看懂. 登陆界面外 ...

  10. 命令行参数的处理函数getopt

    命令参数 在linux下, shell命令的参数分两种情况: a.参数需要附加信息, 如"wget http://www.abc.com/1.zip -o 1.zip" b.参数不 ...