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

PCA降维

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

PCA是什么

PCA(Principal Component Analysis)是一种常用的数据分析方法
PCA通过线性变换将原始数据变换为一组各维度线性无关表示,可用于提取数据的主要特征分量及高维数据的降维,而转换后的这组变量便是我们所说的主成分

目的和原则

目的: 在机器学习中,实际处理的数据有成千上万甚至几十万的维度,这种情况下机器学习的资源消耗是不可接受的,并且对算法的复杂度也有很大的影响,因此对数据降维是必要的
原则: 降维就意味着要舍去一些维度数据,那么数据信息自然也会丢失,但是通常实际数据常常存在一定的相关性,我们在降维的同时应尽可能的将信息损失降到最低
我们举个例子,淘宝店铺数据里的浏览量访客数一般有很强的正相关关系,下单数成交数也具有很强的正相关关系,那么我们把浏览量和访客数去掉其中一个,下单数和成交数去掉其中一个,对原来的数据信息不会丢失太多信息,这样遍将原来四维数据降到了二维,那么机器学习算法的复杂度也会降低,由此我们也可以看出降维的核心是主要将原来的数据中维度之间相关性比较强的数据重新组合成维度之间相关性很小的数据,在数学中,我们可以用协方差来表示。在PCA降维过程中,一般尽可能使最大方差的方向和新空间的轴对齐,取前面k个包含了绝大部分方差的坐标轴,事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。

PCA与数学理论

均值和零均值化
均值

在PCA降维过程中,我们所求的均值是每个维度的均值。
x ˉ = 1 m ∑ i = 0 m x i \bar{x}=\frac{1}{m}\displaystyle\sum_{i=0}^m x_i xˉ=m1i=0mxi

零均值化

然后将每个维度的数据进行零均值化,所谓零均值化就是让均值为0,即每个数据都减去均值。
x 0 ˉ = x i − x ˉ \bar{x^0}=x_i-\bar{x} x0ˉ=xixˉ
进行去均值的原因是如果不去均值的话会容易拟合。在神经网络中,如果特征值x比较大的时候,会导致W*x+b的结果也会很大,这样进行激活函数(如relu)输出时,会导致对应位置数值变化量相对来说太小,进行反向传播时因为要使用这里的梯度进行计算,所以会导致梯度消散问题,导致参数改变量很小,也就会易于拟合,效果不好。我们举个最简单的例子:
假如:y=x+10,现在有x1=90,x2=100,则两个均值为95
不做零均值化:
y 2 y 1 = 100 + 10 90 + 10 = 1.1 \frac{y2}{y1}=\frac{100+10}{90+10}=1.1 y1y2=90+10100+10=1.1
零均值化后:
y 2 y 1 = 100 − 95 + 10 90 − 95 + 10 = 3 \frac{y2}{y1}=\frac{100-95+10}{90-95+10}=3 y1y2=9095+1010095+10=3
从上述结果我们看以看出零均值化后的变化量要比不做零均值要明显的多,另外在后面做特征相关性处理时,零均值化也是有个很重要的作用

特征向量和特征值
定义

A为n阶矩阵,若数λ和n维非0列向量X满足AXX,那么数λ称为A的特征值X称为A的对应于特征值λ的特征向量
在PCA降维过程中,本质就是把原有数据投影到新的一个空间,我们也就可以看做是在原有数据基础上求解特征向量和特征值

性质

特征值和特征向量具有以下性质:
1.同一个矩阵的不同特征值对应的特征向量是线性无关的
2.对于同一个特征值对应的特征向量的非零线性组合仍是该特征值对应的特征向量
3.矩阵的特征向量总是相对于矩阵的特征值而言,一个特征值具有特征向量不唯一,一个特征向量不能对应不同特征值
从特征向量和特征值的性质我们就可以发现正好符合PCA降维过程中取方差较大和线性不相关的前k维数据作为降维后数据的目的

方差

方差是是用来表示数据的离散程度的,方差越大,离散程度越大,也就是数据波动就越大。
方差的计算:前面已经说了,需要先对每个维度的数据做零均值化,那么方差就是去均值后的平方和的均值
s 2 = 1 m ∑ i = 0 m ( x 0 ˉ ) 2 s ^2=\frac{1}{m}\displaystyle\sum_{i=0}^m(\bar{x^0})^2 s2=m1i=0m(x0ˉ)2
PCA中方差的意义:PCA的本质就是找一些投影方向,使得数据在这些投影方向上的方差最大,而且这些投影方向是相互正交的(即:相关性几乎为0)。这其实就是找新的正交基的过程,计算原始数据在这些正交基上投影的方差,方差越大,就说明在对应正交基上包含了更多的信息量,对数据特征影响更大,我们暂且把这些信息量可以记为特征值。原始数据协方差矩阵的特征值越大,对应的方差越大,在对应的特征向量上投影的信息量就越大。反之,如果特征值较小,则说明数据在这些特征向量上投影的信息量很小,可以将小特征值对应方向的数据删除,从而达到了降维的目的。

协方差

协方差可以计算不同变量之间的相关性:
c o v ( x , y ) = ( x − x ˉ ) ( y − y ˉ ) cov(x,y)=(x-\bar{x})(y-\bar{y}) cov(x,y)=(xxˉ)(yyˉ)
如果cov(x,y)=-1,变量之间完全负相关
如果cov(x,y)=1,变量之间完全正相关
如果cov(x,y)=0,变量之间完全不相关
而当x和y相等时,协方差的值就等于方差,所以也可以看作方差是协方差的一种特殊情况
在PCA的过程中我们是对原始数据做过零均值化处理的,故,协方差可以变为:
c o v ( x , y ) = x 0 ˉ ∗ y 0 ˉ cov(x,y)=\bar{x^0} *\bar{y^0} cov(x,y)=x0ˉy0ˉ
那么每个维度之间的相关性计算方式为:
c o v ( x , y ) = 1 m − 1 ∑ i = 0 m x 0 ˉ ∗ y 0 ˉ cov(x,y)=\frac{1}{m-1}\displaystyle\sum_{i=0}^m\bar{x^0} *\bar{y^0} cov(x,y)=m11i=0mx0ˉy0ˉ
补充一句这里为什么是m-1而不是m,是为了能用样本的协方差期望更好去逼近总体的协方差,也就是我们常说的”无偏估计“

协方差矩阵

协方差只能表示两个维度变量之间的相互关系,如果有多个维度随机变量,就需要使用协方差矩阵,我们假设现在又三个维度随机变量x,y,z,那么对应的协方差矩阵则为:
C = [ c o v ( x , x )     c o v ( x , y )     c o v ( x , z ) c o v ( y , x )     c o v ( y , y )     c o v ( y , z ) c o v ( z , x )     c o v ( z , y )     c o v ( z , z ) ] C=\begin{bmatrix} cov(x,x) \space\space\space cov(x,y) \space\space\space cov(x,z)\\ cov(y,x) \space\space\space cov(y,y) \space\space\space cov(y,z) \\ cov(z,x) \space\space\space cov(z,y) \space\space\space cov(z,z)\end{bmatrix} C=cov(x,x)   cov(x,y)   cov(x,z)cov(y,x)   cov(y,y)   cov(y,z)cov(z,x)   cov(z,y)   cov(z,z)
我们注意到在协方差矩阵中对角线元素就是各维度数据的方差
而协方差矩阵是一个实对称矩阵,那么他就一定有特征向量和特征值,且不同特征值对应的特征向量必然正交,而对角线元素又是方差,所以这时候问题就转变为只考虑方差(特征值)大小了,但是我们依旧需要得到特征向量用来构造降维后的数据

协方差矩阵对角化

矩阵对角化定义
对角矩阵(diagonal matrix)是一个主对角线之外的元素皆为0的矩阵。对角线上的元素可以为0或其他值
如果存在一个可逆矩阵 P 使得 P-1AP 是对角矩阵,则矩阵A就被称为可对角化矩阵
如果一个矩阵与一个对角矩阵相似,我们就称这个矩阵可经相似变换对角化,简称可对角化;与之对应的线性变换就称为可对角化的线性变换
协方差矩阵对角化
上文我们已经说明了协方差矩阵是一个实对称矩阵,由实对称矩阵和相似矩阵性质我们可以得出协方差矩阵C具有的性质:
和C相似的对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复)即:C的特征值就是相似对角矩阵的对角元素
我们假设C的相似对角矩阵为A,那么如果存在一个矩阵P使得P-1CP=A,根据对角矩阵的特点,我们就可以发现矩阵P的每一行就是我们所要找的协方差矩阵的特征向量,而特征值就是对角矩阵的对角元素,现在我们离整个PCA过程还有一步,先把每一个特征向量变成单位向量,然后再按照特征值的大小进行排序,取前K行特征值对应的单位向量组成的矩阵和标准化后数据相乘,就得到了我们需要的降维后的数据矩阵。
至此,已经完成了整个PCA降维过程涉及到的数学理论

PCA过程总结

通过上面的数学理论阐述,总结一下PCA的过程:
1)将原始数据做转置运算,每一行代表一个维度
2)每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)得到原始数据的协方差矩阵
4)求出协方差矩阵的特征值及对应的特征向量的单位向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)用上面得到矩阵P和标准化后的数据相乘,即可得到降维到k维后的数据

这里再补充说明一下,如果想看一下自己降维后的数据情况,可以将上述步骤逆行操作一遍重构数据,看看和原始数据有什么区别。理论上降维后数据肯定有少量的信息损失,所以重构后数据和原始数据会有微小区别。具体的实践可以参考我这篇文章:python鸢尾花数据集PCA降维

你可能感兴趣的:(机器学习)