很多时候看到PCA,只知PCA是用来特征降维的,却不知道其具体的实现过程及原理。看过几篇大牛的讲解后,将我的理解写下来。
1.降维的意义:
之所以使用降维后的数据表示是因为在原始的高维空间中,包含有冗余信息以及噪音信息,在实际应用例如图像识别中造成了误差,降低了准确率;而通过降维,我们希望减少冗余信息所造成的误差,提高识别(或其他应用)的精度。又或者希望通过降维算法来寻找数据内部的本质结构特征。
在很多算法中,降维算法成为了数据预处理的一部分,如PCA。事实上,有一些算法如果没有降维预处理,其实是很难得到很好的效果的。
先通过网上的例子说明PCA的计算流程:
2. PCA计算过程
begin:十个样本,每个样本包含2尾特征。。。一般来说要对初始矩阵进行归一化,以消除量纲的影响
假设数据如下:
可以认为有10辆汽车,x是千米/小时的速度,y是英里/小时的速度,等等。
第一步分别求x和y的平均值,然后对于所有的样例,都减去对应的均值。这里x的均值是1.81,y的均值是1.91,那么一个样例减去均值后即为(0.69,0.49),得到
第二步,求特征协方差矩阵,协方差矩阵是和特征数量相关的方阵,假如每个样本有n维特征,那么其协方差大小为n*n,其反映的是两两特征之间的相关性。如果数据是3维,那么协方差矩阵是:
这里只有x和y,求解得
对角线上分别是x和y的方差,非对角线上是协方差。协方差大于0表示x和y若有一个增,另一个也增;小于0表示一个增,一个减;协方差为0时,两者独立。协方差绝对值越大,两者对彼此的影响越大,反之越小。
第三步,求协方差的特征值和特征向量,得到
上面是两个特征值,下面是对应的特征向量,特征值0.0490833989对应特征向量为,这里的特征向量都归一化为单位向量。
第四步,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。
这里特征值只有两个,我们选择其中最大的那个,这里是1.28402771,对应的特征向量是。
第五步,将样本点投影到选取的特征向量上。假设样例数为m,特征数为n,减去均值后的样本矩阵为DataAdjust(m*n),协方差矩阵是n*n,选取的k个特征向量组成的矩阵为EigenVectors(n*k)。那么投影后的数据FinalData为:
这里是
FinalData(10*1) = DataAdjust(10*2矩阵)×特征向量
得到结果是
这样,就将原始样例的n维特征变成了k维,这k维就是原始特征在k维上的投影。
3.我们对整PAC计算过程的涉及到的矩阵和向量的维度作个概述:
1)初始矩阵:m*n, m为样本数量,假设为50个人,m=50; n为样本所包含的原始特征(未降维之前)的个数,可能是人的身高,体重,饭量,爸爸的体重,妈妈的体重,财富等一些可以量化的东西,假设有20个,n=20;
2)协方差矩阵:n*n ,每个特征为一个随机变量,协方差矩阵由两两特征之间的协方差构成。可以由原始矩阵m*n求出;
3)每个特征向量的维度:n*1,特征值从大到小排列后前k个所对应的特征向量组:n*k;
4)原始样本降维后的矩阵:(m*n)*(n*k)=m*k,即将原始n维特征降到K维,直接可以用降维后的数据去训练分类器
5)求一个测试样本降维后的特征:(1*n)*(n*k)=1*k,将n维特征将到了k维
总结:从上面可以看到,其实PCA就是在通过若干样本来计算得到一个变换矩阵:即特征值从大到小排列后前k个所对应的特征向量组n*k,然后通过其来实现降维
1)某个特征值a所对应特征向量构造的新的特征F1其房差就是a;
2) 新特征相互无关,即协方差为零,对应的向量彼此正交;
3)
4.我的理解
特征降维的目的就是找到较少维度的特征可以尽可能地表示原始数据,其实,按大牛的话,特征降维是在特征空间中寻找若干向量(上面提到的由协方差矩阵得到的特征向量),然后再将特征投影到这些向量上(上面的第4和5步),这些向量其实就是新的特征类型,投影上去的值就是相应特征的特征值。这些向量满足的性质:投影到上面的特征值方差最大,所有原始特征值到该向量的距离和最小。
这里的向量就是协方差矩阵的特征向量,打算降到K维,就选取其前k个大小的特征值所对应的特征向量。
我们知道,矩阵的特征向量其实是空间中那些矩阵可以对其只做拉伸缩放变换的向量,特征值的大小代表缩放程度的大小。
二维向量,二维空间;三维向量,三维空间;4维向量,4维空间;
大于3维,无法构想。