进行维数约减(Dimensionality Reduction),目前最常用的算法是主成分分析法 (Principal Componet Analysis, PCA)。

使用主成分分析法进行数据的降维处理,具体的原理和过程是怎么样的呢?

下面让我一一道来。

1 信息损失最少

例如这样一些二维数据:

我们想要将数据降到一维,到底是图中的红线好呢还是绿线好呢?


我们可以很直观地看到,数据点和直线的距离就在降维的过程中丢失掉了。

显然,绿线丢失的数据要比红线多。

所以,我们可以判断,使用红线相比绿线会更好。

我们也注意到,投影到红线上的蓝点,离散的程度大于投影到绿线上的蓝点,这也从另一个角度说明投影到红线丢失的信息相对更少。

这个离散的程度,我们使用蓝点之间的方差进行衡量:

其中:

为了方便计算,我们将所有的特征都减去该特征的均值,并依然用 ai 来表示,所以蓝点之间的方差可以记为:

2 特征不相关

上面是二维降为一维的情况,只需要找到使得方差最大化的一个向量就可以了:

但是对于更高的维度,应该如何处理呢?例如三维降为二维。

当然我们可以首先找到一个使得投影方差最大方向,然后在这个基础上,找到和这个方向不相关的另外一个使得投影方差最大的方向。

所谓的不相关,就是指第二个方向向量和第一个方向向量正交,体现在二维平面上就是垂直的关系:

我们先找到了使得投影方差最大方向,其方向向量为 u(1) ,然后找到了和它垂直的投影方差最大的方向,其方向向量为 u(2)

这里两个方向的相关程度,我们使用协方差进行衡量:

这里的 a, b 均已减去特征的均值。

当协方差 Cov(a,b) = 0 的时候,两个特征向量正交,也就是两个特征不相关。

3 PCA的推导过程

假设我们的训练数据有 m 行数据,有 n 个特征维度,那么矩阵 X 是一个 m × n 的矩阵,可以表达为:

X 的协方差矩阵 C 可以通过以下公式得到:

那么 C 为一个 n × n 的矩阵:

可以直观地看到,协方差矩阵 C 是一个对称矩阵,Cij = Cji ,对角线是各个特征的方差。

因为矩阵 C 是一个实对称矩阵,所以 C 也具备一些实对称矩阵的特征:

  • C 的不同特征值对应的特征向量是正交的;
  • C 的特征值都是实数,特征向量都是实向量;
  • C 可对角化,且相似对角阵上的元素即为矩阵本身特征值。

根据这些性质,我们可以得到 n 个线性无关的非零特征向量 e1, e2, … , en ,这些特征向量构成的特征矩阵 E = ( e1 e2 … en ) 满足:

Λ 是一个对角矩阵,除了对角线有值,其他位置(空白处)都是 0 。

对于特征矩阵 X ,因为可能存在大量的冗余数据,我们将它转换到另外一个特征空间,得到新的特征矩阵 Z:

我们希望这个特征空间中各个特征的彼此是线性无关的,也就是说希望各个特征向量是正交关系。

那么在新的特征空间中,其协方差矩阵应该是一个对角矩阵:

对角线是方差,其他位置(空白处)是协方差。协方差为 0 ,代表着两个向量正交。

假设特征空间转换的过程可以表达为 Z = XU ,矩阵 D 代入该表达式可以得到:

也就是说 U = E ,U 就是矩阵 C 特征向量所组成的矩阵。矩阵 D 对角线上每个值就是矩阵 C 的特征值。

如果我们把 D 中的特征值按照从大到小,将特征向量从左到右进行排序,然后取其中前 k 个,经过压缩转换(Z = XU),就得到了我们降维之后的数据矩阵 Z :

X 是 m × n 的矩阵, U 是 n × k 的矩阵,Z 是 m × k 的矩阵。

4 PCA的计算过程
第一步:首先对特征进行归一化处理。

第二步:计算协方差矩阵。

第三步:计算协方差矩阵的特征向量并按照特征大从大到小排序。

第四步:提取特征向量矩阵的前 k 列。

第五步:通过矩阵乘法计算得到新的特征 Z 。其中计算的公式为:

至此我们算是完成了降维。

5 特征数 k 的选择

不过有时候,降维的效果可能并不好。要么可能维度压缩不多,内存占用和计算速度依然没有改善,要么可能维度压缩太过,信息丢失太大。

这其实取决于特征数 k 的选择。

因为矩阵 U 中每个特征向量是相互正交的,矩阵 U 也是一个正交矩阵,所以有 UUT = E , E 为单位矩阵。

经过如下推导,我们可以反压缩得到矩阵 X:

因为保留的特征数 k 小于 m,所以这个反压缩得到的结果是不等于 X 的。

例如一维还原到二维,最终反压缩得到的结果是:

而不是:

这是因为特征转换的过程中,丢失了一部分的信息。

所以使用 Xapprox 进行标记更加合适:

有了 Xapprox ,其实我们就能计算信息丢失率:

有了 Xapprox ,其实我们就能计算信息丢失率:

如果损失小于 1%,那么我们可以说保留了 99% 的差异性。

当然,差异性的百分比还有另外一个获得,那就是前 k 个特征值之和除以所有的特征值之和。

因为我们已经对特征值进行了降序排序,所以前面 k 个特征应该能够比较好的代表全部的特征。

注意,这个特征值是指对角矩阵对角线上的数值:

如果对于每个特征值,我们使用 Sii 进行标记,那么公式就是:

大于 k 小于 m 部分的特征值,就是丢失的数据,所以信息丢失率也可以通过下面的公式计算:

我们需要做的,是设置一个差异性保留的百分比,然后从小到大对 k 进行遍历,差异性满足条件,k 就是我们要的结果。

例如计算得到的数据差异性百分比和 k 的关系如下:

k = 1 :60%
k = 2 :77%
k = 3 :88%
k = 4 :93%
k = 5 :97%
k = 6 :99%

如果我们要保留 90% 的数据,那么 k 的取值应该是 4 。
如果我们要保留 99% 的数据,那么 k 的取值应该是 6 。

6 关于PCA的注意事项

注意一:如果使用了PCA对训练集的数据进行了处理,那么对于验证集和测试集也需要进行相对应的处理。

我们在处理训练集的过程中得到了特征的均值 μ 和方差 σ ,以及特征向量 U ,我们需要使用这些参数先对数据进行归一化处理,然后转换到新的特征空间。

注意二:在使用PCA进行压缩之前,先使用原数据进行训练,这样我们才能对比压缩前后的效果。

如果不是占用内存空间太大,或者算法运行速度过慢,其实没有必要进行压缩。

注意三:不要使用PCA来避免过度拟合。

因为通过这样的方式皮避免度拟合,不仅效果很差,并且会丢失部分数据。


文章提前发布在公众号:止一之路


机器学习笔记033 | 主成分分析法(PCA)相关推荐

  1. sklearn 主成分分析法 PCA和IPCA

    主成分分析法 (PCA) 是一种常用的数据分析手段.对于一组不同维度 之间可能存在线性相关关系的数据,PCA 能够把这组数据通过正交变换变 成各个维度之间线性无关的数据.经过 PCA 处理的数据中的各 ...

  2. 机器学习:基于主成分分析(PCA)对数据降维

    机器学习:基于主成分分析(PCA)对数据降维 作者:AOAIYI 作者简介:Python领域新星作者.多项比赛获奖者:AOAIYI首页

  3. 数据降维之主成分分析法PCA

    主成分分析法PCA 参考链接:https://www.bilibili.com/video/BV1E5411E71z 主成分分析(Principal Component Analysis,PCA), ...

  4. 机器学习 - 主成分分析法 (PCA)

    文章目录 1. 主成分分析问题 2. 主成分分析算法 3. 重建的压缩表示 4. 选择主成分的数量 1. 主成分分析问题 主成分分析(PCA)是最常见的降维算法. 在PCA中,要做的是找到一个方向向量 ...

  5. pca 矩阵 迹_主成分分析法(PCA)推导

    主成分分析法(principal component analysis, PCA)是最常用的无监督高维数据降维方法之一,它旨在降维的过程中保留原数据中最重要的几个分量,从而达到最大化原数据方差的作用. ...

  6. 主成分分析法PCA(一):算法原理

    一:算法概述: 主成分分析法,principle component analysis,PCA.也称主分量分析,是一种大样本,多变量数据间内在关系的一种方法.这种方法利用降维的思想,通过向量变换的方法 ...

  7. 主成分分析法(PCA)及其python实现

    主成分分析法(Principal Component Analysis,PCA)是一种用于把高维数据降成低维,使分析变得更加简便的分析方法.比如我们的一个样本可以由nnn维随机变量(X1,X2,... ...

  8. 【学习笔记】主成分分析法介绍

    一:简介 主成分分析是用降维的方法将多指标转化为几个综合指标的多元统计分析方法,使用较少的变量去解释原来资料中的大部分信息. 二:基本原理和步骤 1.基本原理:略. 需要注意的是: (1)主成分分析法 ...

  9. Python 主成分分析法 PCA

    主成分分析法是一种利用相关系数对数据进行降维的方法,可用于处理维数过多.指标意义不明确的数据.求相关系数的方法有很多种,下面只以协方差法为例 相关系数 输入是 shape 为 [sample, fea ...

最新文章

  1. Bzoj4016: [FJOI2014]最短路径树问题
  2. 如何从值获取C#枚举描述? [重复]
  3. 挖洞经验 | 看我如何发现“小火车托马斯”智能玩具APP聊天应用漏洞
  4. 嵌入式操作系统内核原理和开发(内存分配算法)
  5. 机器学习-决策树(Decision Tree)
  6. 如何在Windows 10中将您喜欢的设置固定到开始菜单
  7. layui数据表格循环数据给特殊行变颜色遇到的bug
  8. “新基建”提速,工业互联网大数据发展迎新机遇
  9. 深入解读ESB与SOA的关系
  10. myeclipse服务器未能创建视图:抛出意外异常。
  11. mybatis与hibernate不同
  12. mysql常用客户端工具
  13. [人物]USTC十大IT精英
  14. 二元线性方程组与二阶行列式
  15. Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage We noticed that your app requires
  16. markdown在线编辑器
  17. ANSYS Workbench仿真(ADD):应力奇异点VS应力集中
  18. html5 canvas背景特效,HTML5 Canvas炫酷背景动画特效
  19. [解决问题]Android Studio报错:some kotlin libraries attached to this project were compiled with a newer kot
  20. 浏览器屏蔽百度推广广告

热门文章

  1. 从Hexo迁移到Hugo附送漂亮的Hugo Theme主题
  2. Nginx访问403异常问题处理
  3. mariadb 创建用户及授权
  4. Lucene 和 ElasticSearch 的前世今生
  5. GNS3模拟器中关于创建vtp时,内存空间不足问题的解决
  6. docker之阿里云centos 7.x 启动容器报错处理办法
  7. 递归 遍历目录下的所有文件
  8. C#LeetCode刷题之#849-到最近的人的最大距离(Maximize Distance to Closest Person)
  9. linux文件权限之suid,sgid,粘贴位
  10. 135_Power Query M语言快捷输入之输入法设置自定义短语