今天给大家说说主成分分析这个玩意~那么,首先来说说它是干嘛用的吧,它是就来做特征选择(Feature Selection),或者说降维(Dimension Reduction)的。其实特征选择和降维是有联系的,因为特征选择的结果是把那些有用的特征给选出来,冗余的没用的特征给去掉,那么这样之后特征维数自然而然就降低了。那为什么要做特征选择呢?举个具体例子,假设有一大堆网页,然后想对这些网页做聚类(Clustering),所用特征是网页中文本分词后的各词项的TD-IDF值,那么这个特征有多少维?维数等于分词后能分出的不同的词项的个数,那么这个个数能有多大呢?在我实际的研究工作中所碰到的词项数大约是500W的级别,那么就是说,如果采用这些词项做为特征中的词项,那么特征空间就是500W维的,这是个巨大的数字,会给计算带来灾难,这就是所谓的维灾(Dimension Curse),因此有必要通过特征选择来降维。除此之外,还有别的原因需要做特征选择,比如说现在有一堆用户的数据,想对用户进行聚类,但是现在用户特征很多,其中有很多特征意义不大,如果聚类的时候把这些特征也考虑进去,会干扰聚类的效果,但是特征太多,我们人眼又很难看出什么特征有用,什么特征没用。

那么PCA是怎么选择特征的呢?它是怎么定义所谓的“有用的特征”?它的思想是这样的:它把高维特征通过线性变换,变换到低维空间中,使得在这个低维空间中,特征的方差尽可能地大。这时低维空间中的特征就是被选择出来的特征,就是所谓的主成分,而其它次要的成分就被剔除了。为什么希望方差大呢?因为方差大,就表示这个维上的数据所包含的信息比较丰富。举个例子,比如现在有10个人的数据,每条数据有两个维:出生地,性别,10个人的出生地各不相同,5男5女。从感觉上看,哪一维所包含的信息量大一些?是不是出生地呢?如果我一说出生地,是不是马上就可以找到那个人了呢?因此出生地各不相同嘛,而性别呢?因此性别只有2种,因此会有大量重复的值,也就是很多人的值都是一样的,这个属性对于人的刻画效果不好,比如你找一个性别是男的人,可以找到5个,这5个人从性别这一维上看,是完全一样的,无法区分。从PCA的角度来看,出生地这个维的方差就要比性别这个维的方差要大,而方差大就说明包含的信息比较丰富,不单一,这样的特征是我们希望留下的,因此就这个例子来看,PCA更倾向于保留出生地这个特征。

那么是不是简单的就把需要保留的特征留下来,不需要保留的特征去掉就行了呢?比如说刚才那个人的数据的例子,是不是直接把性别这个特征去掉就完了?远远不止那么简单,PCA是把原特征映射到一个低维空间上,使得特征在这个低维空间中的方差最大,如果是直接去掉特征维的话,那么剩下的特征不一定是低维空间中方差最大的。这里要注意一个问题,继续刚才那个人的数据的例子,有2维,性别和出生地,如果用PCA把它降成1维,那么这一维是什么?这是没有定义的,也就是说,这一维既不是性别,也不是出生地,它已经没有定义了,我们只知道它是1维选择出来的特征而已,但这并不影响我们对特征的使用。

再回想一下刚才说的PCA的思想:它的思想是这样的:它把高维特征通过线性变换,变换到低维空间中,使得在这个低维空间中,特征的方差尽可能地大。下面我们就来看看如何达到这个效果。

假设有一堆m维的特征:

我们想把它降到k维,其中k<m,为了方便讲解,先假设降到1维,怎么降呢?取一个m维的向量α,那么把上面的那些m维向量降到1维就是:

这时每个特征就变成了一个值,也就是1维了。注意,现在的α还是未知的,是我们要求的,求出α后,我们就知道降维后的特征是什么样了。

那么降维后的特征的方差就是:

其中S刚好就是协方差矩阵。

好了,现在我们的目标就是最大化,也就是求当是什么的时候,最大,怎么求呢?我们首先来看看,假如S中的元素都是正的,那我把中的元素取成尽量大,是不是就越大?那这样就应该是正无穷,这就没法求了,那怎么办?我们要对进行某种限制,在这里,限制满足这样一来,求解的最大值就变成了在有限制条件的情况下求,高等数学还记得么?应该怎么求呢?拉格朗日乘子法还有印象么?构造拉格朗日函数:

然后对求导并令导数为0得: 

再变换一下得:

呵呵呵呵呵呵,还记得学过的线性代数么?上面这个形式不就是矩阵S的特征值和特征向量的式子么?其中是矩阵S的特征值,α是特征值对应的特征向量,而我们要求的就是α,矩阵S的特征向量很容易求,所以我们要求的就可以顺利地求出来了。

这里注意一个问题,可能会有人问,那如果矩阵S有多个特征值,那该选哪个,大家仔细回前面看矩阵S的定义,可以发现,如果你要降到k维,那么矩阵S就是k乘k的,于是S就最多有k个特征值,所以就没得选,刚好够,不多也不少。

刚才说的是降到一维的情况,那降到k维该怎么办?刚才说到,如果是降到k维,S刚好有k个特征值,于是对应有k个特征向量,假设求出来分别是:

记矩阵,此时A是m乘k的,那么将原始特征向量降到k维就是:

    至此,我们就完成了将m维特征向量降到k维,在处理大数据时,经常会碰到高维数据,降维是很有用的,有些时间甚至是必须的,因为有时候维数实在太高,算法对高维向量进行运算所需的时间、空间开销是非常巨大的,降维能有效的减小这些开销。但是降维是会常来信息的丢失的,毕竟维数少了,信息量也少了,因此,降维算法实际上就是想在降维的时候,尽量保留有用的信息,去除冗余的信息,可以说降维是用损失一些信息来换取对高维特征向量进行运算所产生的时空开销的削减。

PCA(Principal Component Analysis)主成分分析相关推荐

  1. pca主成分分析结果解释_SKLEARN中的PCA(Principal Component Analysis)主成分分析法

    PCA(Principal Component Analysis)主成分分析法是机器学习中非常重要的方法,主要作用有降维和可视化.PCA的过程除了背后深刻的数学意义外,也有深刻的思路和方法. 1. 准 ...

  2. 【碎片知识(9)】PCA (Principal Component Analysis) [主成分分析]

    离开很久啦,从Ph.D.套磁开始到全部settle down花费了太久的时间,在上周也终于把研究方向定下来了,终于手头的事告一段落了.未来是跨度三到四年的research生涯,无数师兄师姐告诫我,读博 ...

  3. Principal Component Analysis 主成分分析 【学习笔记】

    Principal Component Analysis 主成分分析笔记 文章目录 Principal Component Analysis 主成分分析笔记 PCA是什么? 数据的线性变换 拉伸操作: ...

  4. 主成分分析PCA(principal component analysis)原理

    PCA在很多方面均有应用,但是之前没有仔细探究过,最近看了一些博客和论文,做一下总结. 主成分分析(Principal Component Analysis,PCA), 是一种统计方法.通过正交变换将 ...

  5. JAVA实现PCA主成分分析_主成分分析PCA(principal component analysis)原理

    PCA在很多方面均有应用,但是之前没有仔细探究过,最近看了一些博客和论文,做一下总结. 主成分分析(Principal Component Analysis,PCA), 是一种统计方法.通过正交变换将 ...

  6. 【机器学习sklearn】主成分分析PCA(Principal Component Analysis)

    主成分分析方法PCA 前言 一.PCA是什么? 二.代码实践 使用MNIST数据集实现sklearn库里的主成分分析方法 不同主成分个数对应的可解释方差分析(Explained Variance) 总 ...

  7. 机器学习降维算法一:PCA (Principal Component Analysis)

    引言: 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达 ...

  8. 主成分分析碎石图_R: 主成分分析 ~ PCA(Principal Component Analysis)

    本文摘自:http://www.cnblogs.com/longzhongren/p/4300593.html 以表感谢.感谢 综述: 主成分分析 因子分析 典型相关分析,三种方法的共同点主要是用来对 ...

  9. PCA(Principal Component Analysis 主成分分析)原理及MATLAB实现

    关于PCA的原理参见: PCA原理 PCA:一种通过特征的线性组合来实现降维的方法,目的就是在尽可能好的代表原始数据的前提下,通过线性变换将样本数据投影到地位空间中. 如图示意,二维样本分别投影到e1 ...

  10. 如何利用PCA(Principal component analysis)来简化数据

    本博文的的内容为以下: 降维技术 主成分分析(PCA) 对半导体数据进行降维处理 降维(dimensionality reduction)的目标就是对输入的数目进行消减,由此剔除数据中的噪声并提高机器 ...

最新文章

  1. 网络分布式软件bonic清除
  2. Linux设置环境变量小结
  3. Unity3D 2D游戏中寻径算法的一些解决思路
  4. .net你不行——是你的父亲把你封装的太死,还是你的子孙们太懒,未把你发扬光大。...
  5. QT_CONFIG宏用法及支持的参数
  6. Java并发(八)——Fork/Join
  7. 【收藏干货】axios配置大全
  8. ICPC程序设计题解书籍系列之一:刘汝佳:《算法竞赛入门经典》(第2版)
  9. 1. SOAP 简介
  10. 【转】java对音频文件的频谱分析
  11. Proteus ISIS仿真软件中英文元件名称对照
  12. Android 键盘映射
  13. 小学生听力测试软件,亲测十款小学英语APP,为了孩子请收藏
  14. 关于stylebook样式调整的部分说明
  15. html 公式编辑器,基于web的在线复杂公式编辑器的实现
  16. 有感:一名大学毕业生的反思:轰动中国万言帖 最露骨大学生活
  17. 三次bezier曲线 MATLAB,Matlab-画二次及三次Bezier曲线-8控制点的B样条曲线
  18. NTKO OFFICE文档控件
  19. 很多人遇到问题:win10锁屏唤醒后程序全部关闭
  20. 多看阅读设置自动翻页教程

热门文章

  1. 【直播】陈安东:Bert与机器阅读理解的故事
  2. “华为”和“荣耀”哪个好?细看二者有何不同
  3. Pytorch深度学习实战教程(一):语义分割基础与环境搭建
  4. 深度剖析:Knative
  5. ubuntu下面安装scikits.audiolab出错问题解决
  6. 前端面试题HTTP总结(随缘更新)
  7. 高数-导数-反函数的导数
  8. 我的主页改不了了怎么办啊?
  9. 刚踩一个大坑,求个高人指点(已解决)
  10. 不用下载软件,教你轻松在线修改照片大小