特征提取——主成分分析(PCA)

2018/5/23

引言:特征提取是机器学习中很常用数据处理方式,一般都出现在实际搭建模型之前,以达到特征空间维度的变化(常见是降维操作)。特征提取是通过适当变换把已有样本的D个特征转换d(<D)个新特征。这样做的主要目的有:

  • 降低特征空间的维度,使后续的分类器设计在计算上更容易实现;
  • 消除原有特征之间的相关度,减少数据信息的冗余,更有利于分类。

前面提到特征提取就是通过适当变换将特征从现有的特征空间转换到新的空间。所以特征提取的关键任务在于寻找适当变换,最常采用的变换方法是线性变换,即若xϵRDD为原始特征,变换后的d维新特征ξϵRd为:

ξ=WTx (这是一个线性变换) (1)

其中,WD×d维矩阵,称作变换阵。所谓特征提取,就是寻找一个合适的矩阵W,使得原有样本经过式(1)的变换后,能够保留尽可能多的原有信息。如果用类别可分性判据来作为衡量新特征的准则,这一原则可以用一个表达式来表示:

lW=argmaxJ(WTx){W}, 其中J(WTx)即为基于类内类间距离的可分性判据。

本次我们先介绍喜闻乐见的主成分分析法(PCA)。

主成分分析法(PCA)

PCA是非常常用的数据降维方法。它的基本思想是从一组特征中计算出一组按照重要性的大小从大到小依次排列的新特征,它们是原有特征的线性组合,并且新特征之间不相关, 我们计算出原有特征在新特征上的映射值即为新的降维后的样本。也就是说PCA的目标是用一组正交向量来对原特征进行变换得到新特征,新特征是原有特征的线性组合。

数据说明,样本集为已经经过中心化后的数据,X={x1,x2,...,xn},其中xi为p维列向量,共有n个样本,满足i=1nxi=0

用矩阵A来表示一组正交列向量,并且为了归一化,令 aiTai=1

同时有aiTaj=0,ij

若原样本有p维特征,即原向量xi={x1i,x2i,...,xpi},则经过变换后得到新的样本向量 ξi=ATxi

展开即为ξji=ajTxi=t=1pajtxti 。 (2)

一. 推导矩阵A的计算方法,即各向量ai的计算方法。

1. 计算a1

我们先考虑第一个新特征上的值ξ1i=j=1pa1jxji,这个式子表示的是将原向量xi投影到向量a1=[a11,a12,...,a1p]上得到值ξ1i,即第一个特征值为原向量在第一个变换向量a1上的投影值。

我们的目标是使得样本集X={x1,x2,...,xn}在向量a1上的投影值ξ1={ξ11,ξ12,...,ξ1n}的方差最大,也就是当将样本集X投影到向量a1上后,不同样本间的区分度最大,使得不同样本在该向量上可分。

ξ1的方差:

var(ξ1)=E(ξ12)E(ξ1)2=E(a1TxxTa1)E(a1Tx)E(xTa1)=a1Ta1

注:因为样本已经经过中心化,所以E(a1Tx)=a1TE(x)=0

其中表示样本集的协方差矩阵,=1nXXT

现在我们将问题变成了一个优化问题,即

{maxa1Ta1s.t.a1Ta11=0

这是一个带约束的极值问题,将其转换为拉格朗日对偶问题:

f(a1)=a1Ta1v1(a1Ta11)

上式对a1求偏导,得到:

f(a1)a1=(+T)a12v1a1=0

a1=v1a1

所以,a1是协方差矩阵的特征向量,v1为对应的特征值。

v1ar(ξ1)=a1Tv1a1=v1

显然为使var(ξ1)最大,我们只需要选择v1为协方差矩阵的最大特征值:

即对协方差矩阵的p个特征值排序,λ1λ2...λp

v1=λ1,向量a1为对应的特征向量。

现在a1已知,则根据式(2)就可以得到各个原样本xa1上的投影值,即对应的ξ1

2. 计算a2

一般来讲,我们在进行降维时不会只保留一维特征,为了得到计算变换向量ai的一般规律,我们计算a2,根据a2就可知道原向量在该向量上的投影,从而得到原向量在第二个主成分特征上的值ξ2

同理,为了使得样本集中所有原向量在第二个主成分上的值ξ2={ξ21,ξ22,...,ξn2}方差最大,即可分性最大。

ξ2的方差:

var(ξ2)=a2Ta2

转换为优化问题:

{maxa1Ta1s.t.a1Ta11=0a2Ta1=0

转换为拉格朗日对偶问题:

f(a2)=a2Ta2v2(a2Ta21)βa2Ta1

f(a2)a2求偏导:

f(a2)a2=(+T)a22v2a2βa1=0

上式左乘a1T2a1T a22a1Tv2a2βa1Ta1=0(=T)

取转置 a1Ta2=0,a1Ta2=0

βa1Ta1=0,a1Ta1=1

β=0

所以,

f(a2)a2=0

a2=v2a2

v2为协方差矩阵 的特征值,而a2为相应的特征向量。

且,

var(ξ2)=a2Tv2a2=v2

所以,为使var(ξ2)最大,即使v2最大即可。前面已提到,v2为协方差矩阵的特征值,

对协方差矩阵的p个特征值排序,λ1λ2...λp,已有 v1=λ1,所以选择v2=λ2即为最优解。

到这里,我们似乎已经摸索出了某种规律。可以从理论上证明,第k个主成分方向就是协方差矩阵的第k大的特征值λk对应的特征向量。

结论:协方差矩阵为p×p维的二维矩阵,特征值不多于p个,所以通过PCA方法,可以将原有的p维向量通过矩阵A映射到k(kp)维空间。矩阵A=[a1,a2,...,ak],ai(i=1,2,...,k)为p维列向量,且若将协方差矩阵的p个特征值排序,λ1λ2...λp, aiλi对应的特征向量。

二. PCA算法的实现流程

(假设数据未进行中心化):

输入数据X={x1,x2,...,xn}p×n,np维的列向量。

1.数据中心化:μ=1ni=1nxi,xi=xiμ,i=1,2,...,n

2.计算协方差矩阵=1nXXT,(X为中心化后的数据),p×p维对称矩阵

3.对协方差矩阵进行特征值分解,得到特征值λ1λ2...λp,选择前k个特征值所对应的特征向量,构成投影矩阵A=[a1,a2,...,ak],aip维列向量

4.将原样本投影到新的特征空间,得到新的降维样本,X=WTX,Xp×n维矩阵。

三. 几点说明

1.如何选择k

​ 使用降维算法我们都是希望能够将数据尽可能降到低维的空间,这样便于后续的分类等算法的实现。但是为了保证数据的主要内容不会丢失,又不可降到太低的维度。如果取前k个主成分(一个特征向量ai即为一个主成分),这k个主成分所代表的数据全部方差的比例为:

i=1kλii=1pλi

​ 在实际通过程序选择k时,可以先设定好新特征所能代表的数据总方差的比例,比如80%或者90%,然后再选择满足条件的k值。一般来讲,数据中的大部分信息主要集中前几个较少的主成分上。

​ 下图为一次主成分分析所得到特征值的分布,可以看到前面几个特征值较大但衰减速度很快,而到后面的特征值基本都很小,衰减也很慢。有的方法推荐选择拐点来作为k值,比如下图中选择k=3。

特征提取——主成分分析(PCA)

2.从新的特征空间回到原空间

从向量ξ回到原空间样本(中心化),

x=A1ξ (3)

若回到最初为中心化的原样本,

x^=A1ξ+μ (4)

只要k<p, 则x^就一定与原来的真实值存在误差,但一般来讲误差很小。

3.主成分分析理解

最常见的主成分分析都是用来对数据降维,选择较少的主成分来表示数据,可以有效减少后续的工作量,节省计算资源。另外主成分分析也可以用来进行数据的降噪。再特征值中排列较靠后的主成分(或称次成分)往往是数据中的随机噪声。如果把ξ中对应特征值很小的成分置0,再用式(3)或式(4)反变换回原空间,就实现了对原始数据的降噪处理。

写在最后:至此,主成分分析方法就已介绍完毕。从上面的介绍内容中,我们可以发现,整个过程没有用到样本的类别信息。所以主成分分析是一种非监督算法,而对于分类问题,仅以方差大为目标似乎并不一定总是利于后续的分类,所以就产生了另一种常用的降维算法——K-L变换,它与PCA算法很类似,但是可以针对分类的目标进行特征提取,之后我会专门来介绍这种算法。

相关文章: