PCA全称是Principal Component Analysis,即主成分分析。它主要是以“提取出特征的主要成分”这一方式来实现降维的。

介绍PCA的大体思想,先抛开一些原理公式,如上图所示,原来是三维的数据,通过分析找出两个主成分PC1和PC2,那么直接在这两个主成分的方向上就可以形成一个平面,这样就可以把我们三位的样本点投射到这一个平面上(如右图)。那么此时的PC1和PC2都不单单是我们的其中某一维特征,而是各个特征通过某种线性变化的组合结果。这就是PCA降维宏观上的效果。

那PCA降维是如何实现的呢?在讲其具体实现原理前,先要清楚方差和协方差的概念:方差大概就是一些点在一个维度的偏差,越分散的话方差越大。而协方差是衡量一个维度是否会对另一个维度有所影响,从而查看这两个维度之间是否有关系。

PCA通过线性变换将元数据映射到新的坐标系中,使映射后的第一个坐标上的方差最大,第一个坐标也就是第一个主成分PC1,以此类推。在sklearn的PCA包中,有一个explained_variance_ratio_,它代表降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。

那么,怎么样才能实现“找到那样一个坐标,使得数据在这个坐标上的映射方差最大”呢?按照下面的计算过程就可以实现这个效果。

PCA计算过程:

PCA总体计算步骤大概有:

首先对于数据集,有m个样本,设每个样本有n个维度。表示如下:

在上图中,其实只要看中间那幅图就行。左图和右图则是我分别用来突出样本的和特征的关系,比如第一列,就是第一个样本的所有值;而第一行,就是第一个特征的所有值。

对于每一个维度我们就可以得到均值,如下图所示:

每一个维度减去这个均值,得到一个矩阵(相当于将坐标进行了平移)。

到这里,我们的数据“去中心化”就完成了,这样去中心化的目的就是:让每个特征下的均值都为0,后续计算特征之间协方差的时候就可以简化计算。注意,PCA的降维就是围绕每个特征(即每个坐标轴)进行展开,而不是围绕样本。因为就想开头图上描述的一样,样本点数量是不变化的,但是特征的维度会有改变,导致样本点的形状分布上发生变化。

最终,我们得到的去中心化结果如下:

现在,我们需要对处理后的数据在特征维度(也就是各个坐标轴之间)进行协方差矩阵的运算。

在图中我们一共有n个特征,若特征两两组合,我们会得到一个n^2的协方差矩阵。如下图所示:(其中每个f就是原数据中一行一行的特征)

而协方差的定义为:

因为我们的去中心化操作,所有特征的均值(对应公式中的x和y的均值)已经变成0了,所以此时协方差可以表示成:

因此,协方差矩阵可以写成:

其中,m是样本点的个数,在上面已经提到过了。

(补充一点:其实可以发现,要得到这样的协方差矩阵,只需要原数据乘以自身的转置就能得到,如下图所示:

接下来,就是对协方差矩阵求特征值和特征向量,并根据特征值从大到小排序,每个特征值对应着一个特征向量。对于求特征值和特征向量的方法,其实就是用特征值分解,或者是svd矩阵分解,在这篇文章里有提到过,原理都类似。

有了特征值和特征向量,我们讲一下它们对应的意义和接下来的操作步骤:

先说结论:(我们知道得到的特征值和特征向量是一一对应的)

对协方差矩阵求出来的特征向量,就是新坐标轴方向、数据的旋转方向或者说是新的主成分方向。

对协方差矩阵求出来的特征值,就是数据在对应新坐标轴上投影的方差大小,或者说是其对应特征向量上包含的信息量。而某一特征值除以全部特征值和的商就为:其对应特征向量的(方差)贡献率

我们希望数据在新坐标轴上投影的方差尽可能大,因此往往选取前k个最大特征值所对应的特征向量。将得到的特征值从大到小排序,对应的特征向量就是第一个主成分、第二个主成分……以此类推。将这些特征向量组成矩阵P,那么我们降维后的数据就是:

(这个降维方式也可以从矩阵乘法的顺序稍微的理解一下:特征向量的每一行(每一个特征向量)逐一去乘以原数据中的每条数据,逐一地去旋转和映射……)

至此,PCA降维的操作步骤就做完了。

但为什么根据协方差矩阵得出的特征值以及特征向量,就可以拿来对原数据进行降维呢?这里面就涉及数学比如拉格朗日之类的以及线性代数上面的推导和证明。比如从另一个角度来看,每一个新的坐标轴是由原来的坐标维度线性相加的结果。

仔细探究了一下,发现要画的图和说的意思实在太多了,就不钻了。总之,得出的特征向量构成的矩阵是一个完美的用于原数据“旋转”或者原坐标轴“线性相加”的矩阵,使得操作之后的数据在新坐标轴上有着最大的方差,以及最重要的——较少的坐标轴数。

关于n_components

关于主成分个数的确定,在scikit-learn中调用pca = PCA(n_components=n)时,有两种定义方式:

1.一种是把n设置成整数,比如n=3,表示要保留三个主成分,即新坐标轴有三个维度。

2.一种是把n设置成小数,假设所有特征向量加起来的贡献率是1,假定要0.95的主成分贡献率,就令n=0.95,那么就会按特征值从大到小一直加到累计贡献率大于等于0.95的特征向量个数,最终就会降到那个维。

第一种是偏向于指定维度的数量,第二种则偏向于指定主成分的保留程度。

PCA降维的优缺点

优点:

1.通过PCA降维之后的各个主成分之间是正交的,可以消除原始数据之间相互影响的因素。

2.PCA降维的计算过程并不复杂,因为主要就是对一个协方差矩阵做特征值分解,因此实现起来较简单容易。

3.在保留大部分主要信息的前提下,起到了降维效果。

缺点:

1.主成分特征维度的含义具有模糊性,解释性差。(我们最多可以理解成主成分只是由原来的坐标维度线性相加的结果,但加出来之后它到底是啥就不好说了)

2.PCA降维的标准是选取令原数据在新坐标轴上方差最大的主成分。但方差小的特征就不一定不重要,这样的唯一标准有可能会损失一些重要信息。

3.PCA毕竟是只保留特定百分比的主成分,属于“有损压缩”,难免会损失一些信息。

PCA降维原理 操作步骤与优缺点相关推荐

  1. PCA降维原理(主成分分析)小结

    PCA降维 PCA是什么 目的和原则 PCA与数学理论 均值和零均值化 均值 零均值化 特征向量和特征值 定义 性质 方差 协方差 协方差矩阵 协方差矩阵对角化 PCA过程总结 PCA是什么 PCA( ...

  2. PCA降维原理及其代码实现(附加 sklearn PCA用法参数详解)

    学习笔记 本篇博文绝大多数来源于书籍<机器学习实战> 记录自己的学习笔记而已. 降维作用 (1)使得数据集更容易使用 (2)降低很多算法的计算开销 (3)去除噪声 (4)多维数据不容易画图 ...

  3. 非监督学习: K 均值聚类(原理、步骤、优缺点、调优)

    支持向量机.逻辑回归.决策树等经典的机器学习算法主要用于分类问题,即根据一些己给定类别的样本, 训练某种分类器,使得它能够对类别未知的样本进行分类.与分类问题不同,聚类是在事先并不知道任何样本类别标签 ...

  4. 特征工程之PCA降维(主成分分析)总结

    目录 1.PCA是什么 2. 算法思路 详细推算 特征值分解 优缺点 参考链接: 1.PCA是什么 PCA是什么? PCA(Principal Component Analysis)是一种常用的数据分 ...

  5. 12- 降维算法 (PCA降维/LDA分类/NMF) (数据处理)

    数据降维就是一种对高维度特征数据预处理方法.降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的. PCA算法有两种实现方法: 基于特征值分解协方差矩阵实 ...

  6. 机器学习入门系列之PCA降维

    目录 前言 PCA降维原理 PCA如何降维 Sklearn实现 总结 前言 今天来说说机器学习中一个比较重要的概念--主成分分析(Principal Component Analysis),简称PCA ...

  7. 10 降维算法(PCA降维/LDA分类/NMF非负矩阵)

    数据降维简介 降维就是一种对高维度特征数据预处理方法.降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的. 降维具有如下一些优点: 减少所需的存储空间. ...

  8. PCA降维的来龙去脉及Python实现

    目录 1 PCA降维 2 在讲PCA降维的原理前需要知道的一些东西 2.1 方差 2.2 协方差及协方差矩阵 2.3 向量在不同基下的坐标 2.4 矩阵乘法 2.5 矩阵的特征值和特征向量 2.6 实 ...

  9. 非监督学习-Apriori(关联),PCA(降维), k-means(聚类)

    Apriori算法原理总结 - 刘建平Pinard - 博客园Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,找出这些集合的模式有助于我们做一些决策.比如 ...

最新文章

  1. java 中的finally你知多少_Java 处理异常 9 个最佳实践,你知道几个?
  2. grails 转为java_创建一个grails项目,然后转成maven项目
  3. c++缓冲区buffer
  4. GPU Raycasting的两种实现方法
  5. jQuery插件之:对话框
  6. Could not find com.android.tools.build:gradle:2.2.3
  7. MFC控件之cimagelist,加载不上位图
  8. matlab三维绘图函数plot3【matlab图行绘制四】
  9. 美元MogaFX指数介绍(二)
  10. 修改织梦cms模板方法总结,织梦建站必看
  11. Kali Linux安装dvwa本地shentou测试环境
  12. ides样式及字体设置
  13. Java小白入门200例56之鸡兔同笼问题
  14. 规范哈夫曼编码和Deflate算法
  15. java计算机毕业设计springboot+vue学生宿舍管理系统
  16. OpenCV+Mediapipe手势动作捕捉与Unity引擎的结合
  17. mysql-connector-java.jar包的下载教程
  18. 汇编语言—常见汇编指令汇总
  19. oracle建测试库,简单oracle10g测试库的建立
  20. 基于ssm开发的易付宝理财系统

热门文章

  1. 找一个你仰慕的人,并且向他学习!
  2. Linux进程实时IO监控iotop命令详解
  3. 脑洞大开-数据结构另类攻略
  4. java编写日期_java实现输入日期
  5. 将时间戳转换成标准时间格式
  6. 3年测试经验,用例设计竟然不知道状态迁移法?
  7. 第49章 AutoMapper深入理解
  8. M1 Macbook Pro 16G 512G SSD 写入情况记录
  9. 中国互联网为啥成了动物园
  10. 未接来电暗藏话费陷阱 回拨1次可能扣百元