【转载】主成分分析法(PCA)
https://www.jisilu.cn/question/252942
进行维数约减(Dimensionality Reduction),目前最常用的算法是主成分分析法 (Principal Componet Analysis, PCA)。
使用主成分分析法进行数据的降维处理,具体的原理和过程是怎么样的呢?
下面让我一一道来。
1 信息损失最少
例如这样一些二维数据:
我们想要将数据降到一维,到底是图中的红线好呢还是绿线好呢?
降维就意味着信息的丢失,我们需要做的,就是尽可能将这样的信息损失降低。
我们可以很直观地看到,数据点和直线的距离就在降维的过程中丢失掉了。
显然,绿线丢失的数据要比红线多。
所以,我们可以判断,使用红线相比绿线会更好。
我们也注意到,投影到红线上的蓝点,离散的程度大于投影到绿线上的蓝点,这也从另一个角度说明投影到红线丢失的信息相对更少。
这个离散的程度,我们使用蓝点之间的方差进行衡量:
其中:
为了方便计算,我们将所有的特征都减去该特征的均值,并依然用 a<sub>i</sub> 来表示,所以蓝点之间的方差可以记为:
2 特征不相关
上面是二维降为一维的情况,只需要找到使得方差最大化的一个向量就可以了:
但是对于更高的维度,应该如何处理呢?例如三维降为二维。
当然我们可以首先找到一个使得投影方差最大方向,然后在这个基础上,找到和这个方向不相关的另外一个使得投影方差最大的方向。
所谓的不相关,就是指第二个方向向量和第一个方向向量正交,体现在二维平面上就是垂直的关系:
我们先找到了使得投影方差最大方向,其方向向量为 u<sup>(1)</sup> ,然后找到了和它垂直的投影方差最大的方向,其方向向量为 u<sup>(2)</sup> 。
这里两个方向的相关程度,我们使用协方差进行衡量:
这里的 a, b 均已减去特征的均值。
当协方差 Cov(a,b) = 0 的时候,两个特征向量正交,也就是两个特征不相关。
3 PCA的推导过程
假设我们的训练数据有 m 行数据,有 n 个特征维度,那么矩阵 X 是一个 m × n 的矩阵,可以表达为:
X 的协方差矩阵 C 可以通过以下公式得到:
那么 C 为一个 n × n 的矩阵:
可以直观地看到,协方差矩阵 C 是一个对称矩阵,C<sub>ij</sub> = C<sub>ji</sub> ,对角线是各个特征的方差。
因为矩阵 C 是一个实对称矩阵,所以 C 也具备一些实对称矩阵的特征:
C 的不同特征值对应的特征向量是正交的;
C 的特征值都是实数,特征向量都是实向量;
C 可对角化,且相似对角阵上的元素即为矩阵本身特征值。
根据这些性质,我们可以得到 n 个线性无关的非零特征向量 e<sub>1</sub>, e<sub>2</sub>, … , e<sub>n</sub> ,这些特征向量构成的特征矩阵 E = ( e<sub>1</sub> e<sub>2</sub> … e<sub>n</sub> ) 满足:
Λ 是一个对角矩阵,除了对角线有值,其他位置(空白处)都是 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 也是一个正交矩阵,所以有 UU<sup>T</sup> = E , E 为单位矩阵。
经过如下推导,我们可以反压缩得到矩阵 X:
因为保留的特征数 k 小于 m,所以这个反压缩得到的结果是不等于 X 的。
例如一维还原到二维,最终反压缩得到的结果是:
而不是:
这是因为特征转换的过程中,丢失了一部分的信息。
所以使用 X<sub>approx</sub> 进行标记更加合适:
有了 X<sub>approx</sub> ,其实我们就能计算信息丢失率:
如果损失小于 1%,那么我们可以说保留了 99% 的差异性。
当然,差异性的百分比还有另外一个获得,那就是前 k 个特征值之和除以所有的特征值之和。
因为我们已经对特征值进行了降序排序,所以前面 k 个特征应该能够比较好的代表全部的特征。
注意,这个特征值是指对角矩阵对角线上的数值:
如果对于每个特征值,我们使用 S<sub>ii</sub> 进行标记,那么公式就是:
大于 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来避免过度拟合。
因为通过这样的方式皮避免度拟合,不仅效果很差,并且会丢失部分数据。
【转载】主成分分析法(PCA)的更多相关文章
- 【笔记】主成分分析法PCA的原理及计算
主成分分析法PCA的原理及计算 主成分分析法 主成分分析法(Principal Component Analysis),简称PCA,其是一种统计方法,是数据降维,简化数据集的一种常用的方法 它本身是一 ...
- 【机器学习】主成分分析法 PCA (II)
主成分分析法(PAC)的优化——选择主成分的数量 根据上一讲,我们知道协方差为① 而训练集的方差为②. 我们希望在方差尽可能小的情况下选择尽可能小的K值. 也就是说我们需要找到k值使得①/②的值尽可能 ...
- 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA)
主要内容: 一.降维与PCA 二.PCA算法过程 三.PCA之恢复 四.如何选取维数K 五.PCA的作用与适用场合 一.降维与PCA 1.所谓降维,就是将数据由原来的n个特征(feature)缩减为k ...
- 主成分分析法PCA原理
PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...
- 【机器学习】主成分分析法 PCA (I)
主成分分析算法是最常见的降维算法,在PCA中,我们要做的是找到一个方向向量,然后我们把所有的数都投影到该向量上,使得投影的误差尽可能的小.投影误差就是特征向量到投影向量之间所需要移动的距离. PCA的 ...
- 特征脸是怎么提取的之主成分分析法PCA
机器学习笔记 多项式回归这一篇中,我们讲到了如何构造新的特征,相当于对样本数据进行升维. 那么相应的,我们肯定有数据的降维.那么现在思考两个问题 为什么需要降维 为什么可以降维 第一个问题很好理解,假 ...
- 主成分分析法(PCA)答疑
问:为什么要去均值? 1.我认为归一化的表述并不太准确,按统计的一般说法,叫标准化.数据的标准化过程是减去均值并除以标准差.而归一化仅包含除以标准差的意思或者类似做法.2.做标准化的原因是:减去均值等 ...
- 降维之主成分分析法(PCA)
一.主成分分析法的思想 我们在研究某些问题时,需要处理带有很多变量的数据,比如研究房价的影响因素,需要考虑的变量有物价水平.土地价格.利率.就业率.城市化率等.变量和数据很多,但是可能存在噪音和冗余, ...
- 用PCA(主成分分析法)进行信号滤波
用PCA(主成分分析法)进行信号滤波 此文章从我之前的C博客上导入,代码什么的可以参考matlab官方帮助文档 现在网上大多是通过PCA对数据进行降维,其实PCA还有一个用处就是可以进行信号滤波.网上 ...
随机推荐
- Yii2 Working with Relational Data at ActiveDataProvider
Yii2 Working with Relational Data at ActiveDataProvider namespace common\models; use Yii; use yii\ba ...
- Windows下用cmd命令安装及卸载服务[转]
第一种方法: 1. 开始 ->运行 ->cmd2. cd到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727(Framework版本号按IIS配置) ...
- 未能加载文件或程序集“System.Web.Http, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)解决办法
1.查看引用处是否确实引用, 2.查看<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1& ...
- 【洛谷】CYJian的水题大赛 解题报告
点此进入比赛 \(T1\):八百标兵奔北坡 这应该是一道较水的送分题吧. 理论上来说,正解应该是DP.但是,.前缀和优化暴力就能过. 放上我比赛时打的暴力代码吧(\(hl666\)大佬说这种做法的均摊 ...
- theano支持的数组、向量、矩阵表达式
1)theano主要支持符号矩阵表达式 (2)theano与numpy中都有broadcasting:numpy中是动态的,而theano需要在这之前就知道是哪维需要被广播.针对不同类型的数据给出如下 ...
- Oracle 配置文件目录
Oracle 配置文件目录 ① 在oracle安装目录下,找D:\oracle\product\10.2.0\client_1\NETWORK\ADMIN中的tnsnames.ora文件,找到之后,配 ...
- 问题009:java当中的关键字有哪些?在Editplus文本编辑软件中是什么颜色的?java当中的标识符有什么要求?Java中注释分为几类?
(1) public 公共的,表示访问的权限 (2) private 私有的,表示一种访问权限 (3) class 类关键字,表示定义一个类 java中的关键字都是大写的还是小写的?小写的,在Edit ...
- django+xadmin在线教育平台(五)
3-3 django orm介绍与model设计 上节教程完成后代码(来学习本节前置条件): 对应commit: 留言板前端页面展示.本次内容截止教程3-2结束. 可能现在你还在通过手写sql语句来操 ...
- php获取随机字符串
获取随机字符串 /** * 获取随机字符串 * @param int $randLength 长度 * @param int $addtime 是否加入当前时间戳 * @param int $incl ...
- 【PHP】PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
php编程中有时候会需要用上排序,在这里简单地整理一下集中sort的区别,方便查询 sort() 函数用于对数组单元从低到高进行排序. rsort() 函数用于对数组单元从高到低进行排序. asort ...