机器学习:维数约减算法PCA(主成分分析法)原理、实现与应用
文章目录
- 算法目标
- 预处理
- 算法过程
- 逆过程
- 主成分数kkk的选取
- 应用
算法目标
PCA的目标就是实现维数约减,即在尽可能保留信息的同时减少数据的维度。通过维数约减,我们可以实现数据压缩节省存储空间,还能加快一些算法的运算速度。
具体来讲,PCA算法要在高维空间中找到一个低维度的面(子空间),使高维空间中的点到自身投影到低维子空间的对应点之间的距离之和(也称投影误差)最小。下面是一些简单的例子,它们可以被可视化,分别是从二维平面投影到一条直线和从三维空间投影到一张平面。
预处理
首先在运行PCA算法之前对数据进行特征缩放与均值归一化,使所有数据均值为0且取值范围相近,这将有利于我们找到投影子空间。实施过程也很简单,对于每一维特征值,先求出均值,然后减去均值,再除以方差或二分之一极差。
算法过程
假设我们想把nnn维的数据降低到kkk维。
首先,求出协方差矩阵Σ\SigmaΣ
Σ=1m∑i=1m(x(i))(x(i))T\Sigma=\frac{1}{m}\sum_{i=1}^m(x^{(i)})(x^{(i)})^T Σ=m1i=1∑m(x(i))(x(i))T
若定义样本矩阵为
X=[−(x(1))T−−(x(2))T−⋮−(x(m))T−]X=\left[\begin{matrix} -(x^{(1)})^T-\\ -(x^{(2)})^T-\\ \vdots\\ -(x^{(m)})^T-\\ \end{matrix}\right] X=⎣⎢⎢⎢⎡−(x(1))T−−(x(2))T−⋮−(x(m))T−⎦⎥⎥⎥⎤
则上面的求和式可直接写为
Σ=1mXTX\Sigma=\frac{1}{m}X^TX Σ=m1XTX
接下来,求解该矩阵的特征向量,在matlab中,可以使用svd
函数,进行奇异值分解,对于协方差矩阵该函数的结果就是它的特征向量。具体的使用方式为
[U,S,V]=svd(Sigma);
取出n×nn\times nn×n矩阵U
中的前kkk列,就得到了我们的kkk个向量,它们张开的kkk维子空间就是我们要投影的空间,我们把这前kkk列提取出来后构成的矩阵称为UrU_rUr
要求样本向量在这个子空间的投影,则将UrU_rUr转置(k×nk\times nk×n),乘以样本的特征列向量x⃗\vec{x}x(n×1n\times 1n×1),得到降维后的特征向量z⃗=UrTx⃗\vec{z}=U_r^T\vec{x}z=UrTx(k×1k\times 1k×1)。对于上面定义的样本矩阵,则是
Z=XUrZ=XU_r Z=XUr
证明吴恩达说难,不给我讲,我也不急着学。
逆过程
逆过程不是完全还原,还原后的数据跟使用PCA之前的数据是有略微不同的,在nnn维空间中看,还原后的数据点都落在UrU_rUr中的向量张开的kkk维子空间里(比如2D压缩到1D再还原,还原后的点都在同一直线上,而不会是压缩前那样在直线左右略有误差的情况)。公式为
x⃗approx=Urz⃗\vec{x}_{\text{approx}}=U_r\vec{z} xapprox=Urz
推广到mmm行(即每行一个样本)的矩阵上则是
Xapprox=ZUrTX_\text{approx}=ZU_r^T Xapprox=ZUrT
主成分数kkk的选取
定义平均平方投影误差(Average Squared Projection Error)
1m∑i=1m∣∣x(i)−xapprox(i)∣∣2\frac{1}{m}\sum_{i=1}^m||x^{(i)}-x_\text{approx}^{(i)}||^2 m1i=1∑m∣∣x(i)−xapprox(i)∣∣2即PCA算法希望最小化的代价函数。
再定义总变差(Total Variation)
1m∑i=1m∣∣x(i)∣∣2\frac{1}{m}\sum_{i=1}^m||x^{(i)}||^2 m1i=1∑m∣∣x(i)∣∣2衡量样本长度的平均值。
一般而言,我们希望选择的kkk使得
1m∑i=1m∣∣x(i)−xapprox(i)∣∣21m∑i=1m∣∣x(i)∣∣2≤0.01\frac{\frac{1}{m}\sum_{i=1}^m||x^{(i)}-x_\text{approx}^{(i)}||^2}{\frac{1}{m}\sum_{i=1}^m||x^{(i)}||^2}\le0.01 m1∑i=1m∣∣x(i)∣∣2m1∑i=1m∣∣x(i)−xapprox(i)∣∣2≤0.01即保存99%99\%99%的差异性(英文是variance,意义不好理解但明白99%99\%99%对应0.010.010.01即可)。
上面这个式子计算比较复杂,我们需要把还原后的数据也计算出来。一种更简单的计算方法是利用svd
返回的第二个矩阵S
,这是一个对角阵,可以证明
1m∑i=1m∣∣x(i)−xapprox(i)∣∣21m∑i=1m∣∣x(i)∣∣2=1−∑i=1kSii∑i=1nSii\frac{\frac{1}{m}\sum_{i=1}^m||x^{(i)}-x_\text{approx}^{(i)}||^2}{\frac{1}{m}\sum_{i=1}^m||x^{(i)}||^2}= 1-\frac{\sum_{i=1}^kS_{ii}}{\sum_{i=1}^nS_{ii}} m1∑i=1m∣∣x(i)∣∣2m1∑i=1m∣∣x(i)−xapprox(i)∣∣2=1−∑i=1nSii∑i=1kSii所以一个等价的判断是
∑i=1kSii∑i=1nSii≥0.99\frac{\sum_{i=1}^kS_{ii}}{\sum_{i=1}^nS_{ii}}\ge0.99 ∑i=1nSii∑i=1kSii≥0.99
这样,要找到一个合适的kkk,只需要调用一次svd
函数,然后在S
矩阵的对角线上遍历求和,直到满足上面的等式为止。
相应地,即使事先已经选定了kkk值,你也可以通过上面的式子来衡量PCA的性能。
应用
第一个就是节省存储空间了,这个很显然。
第二个则是对其他机器学习算法中的特征值向量(如数字识别中图片的像素点灰度)进行维数约减,降低特征值维数提升算法运行速度。注意应该对训练集数据使用PCA得到UrU_rUr,不能包含验证集和测试集。
三则是可视化,对于一些维数较高的数据,我们无法将其可视化。但是将它们降维到2D或者3D之后,我们就可以在一张纸上将数据形象地展示出来了。
不建议的应用:将PCA用于防止过拟合。看起来PCA能减少数据的维数(即特征值数目),在机器学习的改进方法中讲到过,似乎是个防止过拟合的好方法。因为PCA在运算时并不会考虑与原数据的拟合程度(因为我们只传入的特征值x(i)x^{(i)}x(i),没有使用y(i)y^{(i)}y(i)),使得PCA更容易丢失原数据中的信息。虽然PCA可能会得到一个好的结果,但相较而言正则化是更加稳妥而有效的解决方案。
通常,不建议一上来就将PCA加入到你的机器学习算法中,当算法运行速度太慢或者占用空间太大的时候,我们再考虑PCA。
机器学习:维数约减算法PCA(主成分分析法)原理、实现与应用相关推荐
- python解析原理_主成分分析法原理及其python实现
主成分分析法原理及其python实现 前言: 这片文章主要参考了Andrew Ng的Machine Learning课程讲义,我进行了翻译,并配上了一个python演示demo加深理解. 本文主要介绍 ...
- python的pca计算累计贡献率_Python机器学习实战:维数约简之主成分分析(PCA)详解...
机器学习实战:这里没有艰深晦涩的数学理论,我们将用简单的案例和大量的示例代码,向大家介绍机器学习的核心概念.我们的目标是教会大家用Python构建机器学习模型,解决现实世界的难题. 本文来自<数 ...
- 其他算法-PCA主成分分析
目录 主成分分析原理 线性变换 方差,协方差,协方差矩阵 主成分分析 PCA计算过程与性质 PCA与SVD PCA白化和ZCA白化 PCA(Principal Component Analysis) ...
- 《菜菜的机器学习sklearn课堂》降维算法PCA和SVD
降维算法PCA和SVD 什么是维度? sklearn中的降维算法 PCA 与 SVD 降维究竟是怎样实现的? PCA重要参数 n_components 迷你案例:高维数据的可视化 附录 PCA参数列表 ...
- 机器学习:(PCA)主成分分析法及应用(spss)
目录 1.1.主成分分析法简介 1.2.主成分分析法的意义 1.3.主成分分析法的思想 1.4.主成分分析法的步骤 2.1.导入数据 2.2.生成图表 3.1.PCA算法梯度求解 3.1.1. 梯度上 ...
- 机器学习----维数灾难
一.定义 ~~~~~~~~随着维度的增加,分类器性能逐步上升,到达某点之后,其性能便逐渐下降 ~~~~~~~~也许分类器准确率依然无法达到要求,加入更多的特征,比如颜色.纹理的统计信息 ...
- 机器学习(4):PCA主成分分析法实例
一.简介 1.Principal Component Analysis 2.用途:降维中最常用的一种手段,可用于数据压缩.提取重要信息等领域. 3.目标:基于方差提取最有价值的信息 二.PCA求解原理 ...
- PCA主成分分析法详解
第二次作业:PCA主成分分析(2021.03.18) 主成分分析(Principal Component Analysis,PCA)是一种常见的线性降维方法,广泛应用于图像处理.人脸识别.数据压缩.信 ...
- 数学建模算法之主成分分析法
主成分分析的主要目的是希望用较少的变量去解释原来资料中的大部分变异,将我们手中许多相关性很高的变量转化成彼此相互独立或不相关的变量.通常是选出比原始变量个数少,能解释大部分资料中的变异的几个新变量,即 ...
最新文章
- SAP HUM 如何把HU号码与Outbound Delivery 解除Assignment?
- orcad快捷键_在orcad同一页面的连接关系应该怎么处理呢?
- Windows10家庭版安装Hyper-V虚拟机
- JavaScript MVC框架和语言总结[infoq]
- 刚安装了Fedora32,尝尝鲜~,哈哈~~~
- 自定义Java注解(一)
- 人在囧途!12306买到相同高铁票 回应:可能是机器故障
- 【DBA之路】关于连接不上数据库
- MIS系统权限控制的一个简便方法
- Linux下查看端口状态的小工具lsof
- Android 百度地图搜索框实现,仿百度地图街景实现
- 国寿鸿寿年金保险(分红型)
- ANSYS 15 直接优化分析
- Flutter String 常用方法
- Vue 动态组件component
- 易语言dchp服务器,易语言模拟DHCP报文源码
- python 三角形雷达图,python 画雷达图
- 板凳——————————————————c++(104)
- Computer Science Theory for the Information Age-2: 高维空间中的正方体和Chernoff Bounds
- 汉诺塔(hanio)