机器学习笔记(6)-降维

机器学习笔记(6)-降维

这一节我们来讲降维算法,主要介绍下主成分分析(principle component analysis,PCA),介绍之前先简单复习下矩阵分解和方差、协方差等概念。

均值(mean)

描述的是样本集合的中间点,一般所谓的数据中心化就是样本值减去均值。

[ar x=frac{sum_{i=1}^{n}x_{i}}{n} ]

方差(variance)

描述的是样本集合的各个样本点到均值的距离之平均。

[S^2=frac{sum_{i=1}^{n}(x_{i}-ar x)^2}{n-1} ]

这个分母n-1是无偏估计,这个在将第(2)节极大似然估计时已经证明过了。这里值得一提的是方差一般是来描述一维数据的,正好和协方差做对应,而标准差就是方差开平方。

协方差(covariance)

协方差是一种用来度量两个随机变量关系的统计量,我们从公式中来看比较不那么抽象。

[Cov(X,Y)=E[(X-ar X)(Y-ar Y)]\ ho_{xy}=frac{Cov(X,Y)}{sigma_{x}sigma_{y}} ]

可以看到如果想要协方差(Cov(X,Y))尽可能为“最大正数”时,那么(X,Y)的大小趋势就要尽可能相同,因为((X-ar X),(Y-ar Y))为同正或同负时,积才能为正,期望才能最大。还可以发现当两个随机变量相同时,协方差等价于方差。

而相关系数就是除以随机变量各自的方差,其实就是一种去除量纲的表现,也就是说协方差和相关系数在表示相关度上的趋势是一样的。

协方差矩阵

协方差矩阵是处理多维问题的,它是一个对称的矩阵,而且对角线是各个维度上的方差,其他地方是两两维度的协方差。协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。

特征值分解

只有方阵才能进行特征值分解:首先要明确一点,特征值分解只能对应方阵,即矩阵的行和列大小相同。

假设非零向量(v)是方阵(A)的特征向量,将一定可以表示成下面形式:

[Av=lambda v ]

而特征值分解是把方阵(A)分解为如下形式:

[A=QSigma Q^{-1} ]

其中(Q)是方阵(A)的特征向量组成的矩阵,(Sigma)是一个对角阵,每一个对角线上的元素就是一个特征值。一个矩阵的一组特征向量是一组正交向量,不同特征值对应的特征向量线性无关。

可以这么理解,方阵(A)的分解,分解出了两个东西:一个是特征向量矩阵(Q),代表方阵(A)在不同维度上的方向;另一个是特征值大小对角阵(Sigma),代表特征向量矩阵(Q)的大小。

如果特征值所对应的对角阵(Sigma)的元素从大到小排列,我们取前n个最大的特征值和对应的特征向量,那么可以构成一个近似于方阵(A)的矩阵,而这就是PCA降维的基本思想。

上图有个向量(a),我们知道在以(x,y)轴为坐标(一组正交基)的情况下,有(vec{a}=vec{b}+vec{c}),也可以看作是a由b和c两个特征向量组成,图中很明显b的长度远大于c,即(left | b ight |gg left | c ight |),那么我们这时把b近似看作a,即(vec bapprox vec a)。这就是降维,原来a由两个维度b和c表示,现在我们用单个维度b来近似表示a,两维变成了一维,并且改变后方向和大小变化不大,这也就是相当于压缩。

主成分分析(PCA)

预备知识

主成分分析(principle component analysis,PCA),是一个降维的方法,它在机器学习中可以起到很多作用,比如压缩、消除过拟合问题等。它的本质思想就是把一组多维数据空间的点经过重构,然后找到线性无关最大的前n个方向,使用前n个方向变换来近似表示原始高维度(原始维度远大于n)的数据。

假设有数据集(X=(x_{1},x_{2},cdots,x_{n})^T,xin mathbb{R}^p),我们接下来需要用矩阵的形式来表示均值和协方差:

[ar x=frac{1}{n}sum_{i=1}^{n}x_{i} ]

我们知道(x_{i})的维度是((p,1)),把累加的形式去掉用矩阵乘法来表示,就得到了:

[ar x=frac{1}{n}X_{p*n}^T1_{n*1} ]

同理:

[egin{aligned} S^2&=frac{1}{n}sum_{i=1}^{n}(x_{i}-ar x)^2\ &=frac{1}{n}sum_{i=1}^{n}(x_{i}-ar x)(x_{i}-ar x)^T\ &=frac{1}{n}(X^T-ar xcdot 1^T_{n})(X^T-ar xcdot 1^T_{n})^T end{aligned} ]

我们把(ar x)代进去得到:

[egin{aligned} S^2&=frac{1}{n}(X^T-ar xcdot 1^T_{n})(X^T-ar xcdot 1^T_{n})^T\ &=frac{1}{n}(X^T-frac{1}{n}X^T1_{n}1^T_{n})(X^T-frac{1}{n}X^T1_{n}1^T_{n})^T\ &=frac{1}{n}X^T(I_{n}-frac{1}{n}1_{n}1^T_{n})(I_{n}-frac{1}{n}1_{n}1^T_{n})^TX\ end{aligned} ]

上式中我们把(X^T)提出来,下面令(H=I_{n}-frac{1}{n}1_{n}1^T_{n}),其中(1_{n})(n*1)的矩阵,所以(H)是一个对称矩阵。再探究下(H)的性值:

[egin{aligned} H^2&=HH^T\ &=(I_{n}-frac{1}{n}1_{n}1^T_{n})(I_{n}-frac{1}{n}1_{n}1^T_{n})^T\ &=(I_{n})^2-frac{2}{n}1_{n}1^T_{n}+frac{1}{n^2}(1_{n}1^T_{n})^2\ &=I_{n}-frac{2}{n}1_{n}1^T_{n}+frac{1}{n^2}cdot ncdot 1_{n}1^T_{n}\ &=I_{n}-frac{1}{n}1_{n}1^T_{n}\ &=H end{aligned} ]

其实(H)是一个中心矩阵,我们得出这样两条性值:

[H=H^T\ H=H^2 ]

代入协方差(S^2)得到:

[egin{aligned} S^2&=frac{1}{n}X^T(I_{n}-frac{1}{n}1_{n}1^T_{n})(I_{n}-frac{1}{n}1_{n}1^T_{n})^TX\ &=frac{1}{n}X^THH^TX\ &=frac{1}{n}X^THX end{aligned} ]

PCA模型原理

PCA的模型原理总结起来就是一点:对原始的特征空间进行重构,将数据集的特征从线性相关转化为线性无关。这个理解起来非常抽象,举个例子就是有两个维度的特征,这两个维度的特征在不同的样本上线性相关,一起增大,一起减小,比如说同样材质的铁,一个维度是体积,另一个维度是质量,因为铁的密度是确定的,所以体积和质量是线性相关的,这时候采用其中一个作为特征维度就可以了。

从模型角度上,我们需要构建一种方法来实现上述原理,PCA一般有两种方式:

  1. 最大投影方差
  2. 最小重构距离

上面这两种方式就是我们来达成PCA原理的手段方法,我们只需要把它转化成数学模型就可以了。这是两种不同的角度来解释PCA的原理,就像解决问题的两种手段,其实本质思想非常相似,下面我们分别说明和推导。

最大投影方差

什么是投影方差呢?就是把在空间中的样本点,投影在某个空间平面上,投影完的点之间的离散程度,而我们要让这个离散程度最大。如果是三维空间上的点,我们找个二维平面来让点投影在上面,那么投影在上面的点,我们不就可以用二维坐标来表示这些投影点吗,那么我们的三维空间点就用这些二维空间点来表示不就行了。最大投影方差就是来帮助我们找到一个最好的平面。

为了简单起见,我们找个二维的例子:

图上蓝色的样本点,我们找到(u_{1},u_{2})两个投影方向,黑色的点是样本点分别落在不同投影上的点,显然(u_{1})上的投影点要疏松,点与点之间的距离较大,肉眼可见比在(u_{2})上的投影点方差要大。而我们就是要找前n(n小于数据样本的维度)个投影方向,来达到降维的目的。

现在我们用数学形式来表达,先说明下投影的数学形式:

假设有向量(vec a,vec b),它们的夹角是( heta),那么向量b在a上的投影为:

[proj=left |b ight |cos heta ]

我们知道向量a和b的内积为(vec acdotvec b=|a||b|cdot cos heta),如果我们令(|a|=0),那么就得到:

[proj=vec acdotvec b=left |b ight |cos heta ]

内积的形式我们可以用矩阵来表示:

[egin{aligned} left{egin{matrix} vec acdotvec b=a^Tb\ s.t.|a|=1 end{matrix} ight. end{aligned} ]

现在我们来表示投影方差:

[egin{aligned} J&=frac{1}{n}sum_{i=1}^{n}[(x_{i}-ar x)^TU]^2\ &=frac{1}{n}sum_{i=1}^{n}[U^T(x_{i}-ar x)(x_{i}-ar x)^TU]\ &=U^T[frac{1}{n}sum_{i=1}^{n}(x_{i}-ar x)(x_{i}-ar x)]U\ &=U^TS^2U end{aligned} ]

这里(S^2)就是方差,(U)(x_{i})无关。接下来我们只要求最大就行了:

[egin{aligned} left{egin{matrix} &hat U=underset{U}{argmax}U^TS^2U\ &s.t.;U^TU=1 end{matrix} ight. end{aligned} ]

这就是一个带约束的求最大值问题,我们可以使用拉格朗日乘子法来解:

[mathcal{L} (U,lambda)=U^TS^2U+lambda(1-U^TU) ]

[egin{aligned} frac{partial mathcal{L}}{partial U}&=2S^2U-2lambda U=0\ &S^2U=lambda U end{aligned} ]

这就是随机变量(X)的协方差矩阵,我们可以对其作特征值分解,(U)就是特征向量矩阵,(lambda)就是特征值对角阵。

这就是PCA的数学推导,我们只需要对样本点(X)的协方差矩阵作特征值分解,就可以找到特征值(lambda),进而得到主成分和对应的特征向量矩阵。

最小重构代价

接下来我们换一种手段来处理PCA,采用最小重构代价来解。首先讲一下重构的过程:

如上图,先考虑二维的情况下,有(x_{1},x_{2},u_{1},u_{2})四个坐标向量,其中(x_{1},x_{2})两两正交,(u_{1},u_{2})两两正交,(vec a,vec b,vec c,vec d)分别在(x_{1},x_{2},u_{1},u_{2})上,有个向量(vec x_{i}),令:

[vec x_{i}=vec a+vec b\ vec x_{i}=vec c+vec d ]

很容易理解,向量(vec x_{i})在两个不同的坐标轴上的表示。结合之前投影的推论,投影距离就是点积&投影向量的约束模为1,而向量的表示就是大小乘以方向,所以得到:

[vec a=(x^T_{i}x_{1})x_{1} ]

举个例子:假设(x_{i})的坐标为(2,1),那么就是:

[x^T_{i}=(2,1)\ x_{1}=(1,0)^T ]

[egin{aligned} vec a&=(x^T_{i}x_{1})x_{1}\ &=egin{pmatrix} 2 & 1 end{pmatrix}inom{1}{0}inom{1}{0}\ &=inom{2}{0} end{aligned} ]

可以看到确实是正确的,a的横坐标就是2。接下来我们要求(x_{i})(u_{1},u_{2})上的表示:

[x_{i}=(x^T_{i}u_{1})u_{1}+(x^T_{i}u_{2})u_{2} ]

这里是二维,如果推广到(p)维空间,就是:

[x_{i}=sum_{k=1}^{p}(x^T_{i}u_{k})u_{k} ]

这就是把(x_{i})点重构到(u_{p})空间的表示,我们知道(x_{i})这个样本点是(p)维的,PCA就是取前q维最主要的方向,所有令:

[hat x_{i}=sum_{k=1}^{q}(x^T_{i}u_{k})u_{k} ]

其中(q<p,hat x_{i})就是我们取前q个主要方向后重构出的点,最小重构距离就是要重构前和重构后的样本点两者的平方差最小,类似于最小二乘估计。于是我们得到:

[J=frac{1}{n}sum_{i=1}^{n}left | x_{i}-hat x_{i} ight |^2 ]

加上约束条件和中心化后,完整形式如下:

[egin{aligned} left{egin{matrix} J=frac{1}{n}sum_{i=1}^{n}left | x_{i}-sum_{k=1}^{q}((x^T_{i}-ar x_{i})u_{k})u_{k} ight |^2\ \ s.t.;u^T_{k}u_{k}=1 end{matrix} ight. end{aligned} ]

简化后得到:

[egin{aligned} left{egin{matrix} hat U=underset{U}{argmin}sum_{k=q+1}^{p}U^T_{k}S^2U_{k}\ \ s.t.;u^T_{k}u_{k}=1 end{matrix} ight. end{aligned} ]

最后我们同样利用拉格朗日乘子法来求解。

我们发现:最大投影方差是找出最大的特征矩阵,而最小重构代价正好相反,要找出最小的特征矩阵,所以说两者手段不同,但是最后目的完全一致。

奇异值分解

奇异值分解(Singular Value Decomposition,SVD),则是换个角度来解决PCA,前面根据我们的推论知道我们要得到前q个最主要的特征向量,要对样本点的协方差矩阵作特征值分解,而奇异值分解正好绕过了求协方差矩阵这个环节,可以直接对样本空间(X)进行奇异值分解

首先我们知道奇异值分解可以对任何矩阵分解,如下:

[A=USigma V^T ]

其中(U,V)分别是左奇异矩阵和右奇异矩阵,并且(Ucdot U^T=I,Vcdot V^T=I)

我们对样本点(X)中心化得到(X-ar X),就有:

[egin{aligned} X-ar X&=X-1_{n}cdot ar x^T\ &=X-1_{n}cdot (frac{1}{n}X^T1_{n})^T\ &=X-frac{1}{n}1_{n}cdot 1^T_{n}X\ &=(I-frac{1}{n}1_{n}cdot 1^T_{n})X\ &=HX end{aligned} ]

其中(x_{i}=frac{1}{n}X^T1_{n})我们在预备知识那一节证明过了,由此我们还发现了任何矩阵乘以中心矩阵(H)就得到了它的均值(ar X)。根据SVD奇异值分解得到:

[HX=USigma V^T ]

同样根据预备知识我们得到:(S^2=frac{1}{n}X^THX),于是:

[egin{aligned} S^2&=frac{1}{n}X^THX\ &=frac{1}{n}X^TH^THX\ &=frac{1}{n}(HX)^THX\ &=frac{1}{n}(USigma V^T)^TUSigma V^T\ &=frac{1}{n}VSigma U^TUSigma V^T\ &=frac{1}{n}VSigma^2 V^T end{aligned} ]

由此我们可以看到奇异值分解和协方差矩阵特征值分解之间的关系,numpy中的奇异值和特征值分解,这里是取无偏估计n-1,有兴趣的可以根据公式计算一下,它们的特征值矩阵是完全相等的。

这一节主要是探究一下样本数据(X)的协方差矩阵特征值分解和对数据本身中心化后的奇异值分解之间的关系。

原文地址:https://www.cnblogs.com/Epir/p/13160873.html