PCA|机器学习|连载

PCA

本文让我们来了解一下机器学习中最常用的一种降维方法PCA。

降维

在我们机器学习所训练的数据中,通常会存在着很多的特征,这也就意味着我们所要处理的数据的维度是很大的,由于维度大的数据处理起来非常困难,各种各样的降维算法也就随之产生了。

所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式。 y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的)。f可能是显式的或隐式的、线性的或非线性的。

下面我们就来了解一下PCA降维。

方差

在了解PCA之前我们先了解一下方差和协方差。

方差我们之前已经接触过了,指的是一组数据中的各个数减去这组数据的平均数的平方和的平均数。

例如我们有一组数据:{1, 2, 3, 4, 5}

可以计算出平均数为:(1+2+3+4+5)/5=3

各个数与平均数差的平方和为:10

方差为:10/5=2

很简单的计算过程我们就能得到一组数据的方差了,更近一步的我们可以说:方差用于测算数值型数据的离散程度。

协方差

我们上面了解了方差用于测算数值型数据的离散程度,这里协方差本质上是用于度量各个维度偏离其均值的程度。

协方差的计算方式如下(以二维为例):

c o v ( X , Y ) = E [ ( x − E [ x ] ) ( y − E [ y ] ) ] cov(X,Y)=E[(x-E[x])(y-E[y])] cov(X,Y)=E[(xE[x])(yE[y])]

我们也可以写成如下的形式:

c o v ( X , Y ) = E [ ( x − x ˉ ) ( y − y ˉ ) ] cov(X,Y)=E[(x-\bar{x})(y-\bar{y})] cov(X,Y)=E[(xxˉ)(yyˉ)]

这里的E表示期望, x ˉ , y ˉ \bar{x},\bar{y} xˉ,yˉ表示均值。

我们计算出了协方差的结果后,有三种解释的方式,来看一下:

当cov(X,Y)>0时,表明X和Y正相关:

在这里插入图片描述

当cov(X,Y)<0时,表明X和Y负相关:

在这里插入图片描述

当cov(X,Y)=0时,表明X和Y不相关:

在这里插入图片描述
协方差为0,两个随机变量不一定相互独立,而两个随机变量相互独立,协方差一定为0。

主成分分析(PCA)

Principal Component Analysis(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。

PCA的几个步骤如下:

一、标准化

为了让每一个维度对分析的结果造成同样的影响,我们需要对连续的初始变量的范围作标准化。

具体一点说就是因为我们后续的结果对数据的方差十分敏感,取值范围较大的维度会比相对较小的维度造成更大的影响(例如一个在1-100之间变化的维度对结果的影响,比一个0-1的更大),会导致一个偏差较大的结果,所以,将数据转化到相似的范围可以预防这个问题。

数据标准化的方法如下(其中standard deviation表示标准差):

z = v a l u e − m e a n s t a n d a r d ⋅ d e v i a t i o n z=\frac{value-mean}{standard\cdot deviation} z=standarddeviationvaluemean

二、计算协方差矩阵

这一步是为了理解数据集中的变量是如何从平均值变化过来的,同时可以查看不同的特征之间又有什么关系,此时我们要计算协方差矩阵。

协方差矩阵是一个P*P的对称矩阵(P是维度的数量)它涵盖了数据集中所有元组对初始值的协方差,例如一个拥有三个变量x,y,z和三个维度的数据集,协方差矩阵将是一个3*3的矩阵(协方差的计算方法及含义见上文):

[ 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 ) ] \begin{bmatrix} 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) \end{bmatrix} Cov(x,x)Cov(y,x)Cov(z,x)Cov(x,y)Cov(y,y)Cov(z,y)Cov(x,z)Cov(y,z)Cov(z,z)

由于变量与自身的协方差等于他的方差,在主对角线上我们已将计算出了各个变量初始值的方差。协方差矩阵的每一个元组关于主对角线对称,这意味着上三角部分和下三角部分是相等的。

三、计算主成分

  • 主成分是什么?

主成分是一个新的变量,他是初始变量的线性组合。新的变量之间是不相关的,第一个主成分中包含了初始变量的大部分信息,是初始变量的压缩和提取。

例如:虽然在一个 10 维的数据集中我们算出了 10 个主成分,但大部分的信息都会被压缩在第一主成分中,剩下的大部分信息又被压缩到第二主成分中,以此类推,我们得到了下面这张图:

在这里插入图片描述

从理论方面来说,主成分代表着蕴含 最大方差的方向。对于主成分来说,变量的方差越大,空间中点就越分散,空间中的点越分散,那么它包含的信息就越多。简单的讲,主成分就是一条更好的阐述数据信息的新坐标轴,因此我们更容易从中观测到差异。

  • 怎么计算主成分

有多少个变量就有多少个主成分,对于第一主成分来说沿着对应的坐标轴变化意味着有最大的方差,例如用下列的散点图表示:
在这里插入图片描述

你能直接猜测出主成分应该是沿着哪一个方向吗,大致是图中紫色线的方向。(因为它穿过了原点,而且数据映射在这条线上后,有着最大方差(各点与原点距离的均方))

第二个主成分也是这样计算的,它与第一主成分不相关(即为互相垂直)表示了下一个最大方差的方向。

重复上面的步骤,直到我们从原始数据中计算出所有的主成分。

  • 特征值和特征向量

特征值和特征向量通常成对出现,每一个特征向量对应一个特征值,他们各自的数量相等,等于原始数据的维度,例如有三个变量就会有三个特征向量与三个特征值。

协方差矩阵的特征向量其实就是一些列的坐标轴,将数据映射到这些坐标轴之后,我们将会得到最大的方差(这意味着更多的信息),他们就是我们要求的主成分,特征值其实就是特征向量的系数,它代表了每个特征向量包含了多少信息量。
文末我们再来举例说一下如何计算特征值和特征矩阵。

四、主成分向量

主成分向量仅仅是一个矩阵,里面有我们决定保留的特征向量。这是数据降维的第一步,我们只是要在n个变量中保留p个特征向量(成分)我们把数据映射到新的坐标轴上时,最后数据将只有p个维度。

五、将数据映射到新的主成分坐标系中

我们将使用从协方差矩阵中算出来的特征向量形成主成分矩阵,并将原始数据映射到主成分矩阵对应的坐标轴上 ,这就叫做主成分分析。具体的做法便是用原数据矩阵的转置乘以主成分矩阵的转置。

PCA的流程总结如下:

1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PX即为降维到k维后的数据

特征值和特征矩阵的求解

设A是一个n阶矩阵,若数 λ \lambda λ和n维非零列向量满足 A x = λ x Ax=\lambda x Ax=λx,数 λ \lambda λ称为A的特征值,x称为A对应于特征值 λ \lambda λ的特征向量,此时 ∣ λ E − A ∣ \left | \lambda E-A \right | λEA叫做特征多项式,若特征多项式为0则称为A的特征方程(齐次线性方程组),求解特征值的过程其实就是求解特征方程。

示例如下:

给定条件:

E = [ 1 0 0 0 1 0 0 0 1 ] E=\begin{bmatrix} 1& 0 & 0\\ 0& 1 & 0 \\ 0& 0 & 1 \end{bmatrix} E=100010001(单位矩阵)

A = [ 4 2 − 5 6 4 − 9 5 3 − 7 ] A=\begin{bmatrix} 4& 2 & -5\\ 6& 4 & -9 \\ 5& 3 & -7 \end{bmatrix} A=465243597

第一步(根据条件得到特征方程):

A x = λ x ⇒ A x = λ E x ⇒ ( A − λ E ) x = 0 Ax=\lambda x\Rightarrow Ax=\lambda Ex\Rightarrow (A-\lambda E)x=0 Ax=λxAx=λEx(AλE)x=0

第二步(展开特征方程):

∣ λ E − A ∣ = [ λ − a 11 − a 12 . . . − a 1 n − a 21 λ − a 22 . . . − a 2 n . . . . . . . . . . . . − a m 1 − a m 2 . . . λ − a m n ] = 0 |\lambda E-A|=\begin{bmatrix} \lambda-a_{11}& -a_{12} & ... & -a_{1n}\\ -a_{21}& \lambda-a_{22} & ... & -a_{2n}\\...&...&...&... \\ -a_{m1}& -a_{m2} & ... &\lambda-a_{mn} \end{bmatrix}=0 λEA=λa11a21...am1a12λa22...am2............a1na2n...λamn=0

第三步(带入数据):

∣ λ E − A ∣ = [ λ − 4 − 2 5 − 6 λ − 4 9 − 5 − 3 λ + 7 ] = 0 |\lambda E-A|=\begin{bmatrix} \lambda-4& -2 & 5\\ -6& \lambda-4 & 9\\ -5& -3 &\lambda+7 \end{bmatrix}=0 λEA=λ4652λ4359λ+7=0

第四步(矩阵展开计算行列式):

( λ − 4 ) ( λ − 4 ) ( λ + 7 ) + ( − 2 ∗ 9 ∗ − 5 ) + ( 5 ∗ − 6 ∗ − 3 ) − ( 5 ∗ ( λ − 4 ) ∗ 5 ) − ( − 2 ∗ − 6 ∗ ( λ + 7 ) ) − ( ( λ − 4 ) ∗ 9 ∗ − 3 ) = 0 (\lambda-4)(\lambda-4)(\lambda+7)+(-2*9*-5)+(5*-6*-3)-(5*(\lambda-4)*5)-(-2*-6*(\lambda+7))-((\lambda-4)*9*-3)=0 (λ4)(λ4)(λ+7)+(295)+(563)(5(λ4)5)(26(λ+7))((λ4)93)=0

第五步(行列式化简得到):

λ 2 ∗ ( λ − 1 ) = 0 \lambda^2*(\lambda-1)=0 λ2(λ1)=0

第六步(解得特征值):

{ λ 1 = 1 λ 2 = λ 3 = 0 \left\{\begin{matrix} \lambda_1=1 \\ \lambda_2=\lambda_3=0& \end{matrix}\right. {λ1=1λ2=λ3=0

第七步( λ = 1 \lambda=1 λ=1时求解):

( E − A ) x = 0 (E-A)x=0 (EA)x=0

E − A = [ − 3 − 2 5 − 6 − 3 9 − 5 − 3 8 ] → 化 简 [ 1 0 − 1 0 1 − 1 0 0 0 ] E-A=\begin{bmatrix} -3& -2 & 5\\ -6& -3 & 9 \\ -5& -3 & 8 \end{bmatrix}\overset{化简}{\rightarrow}\begin{bmatrix} 1& 0 & -1\\ 0& 1 & -1 \\ 0& 0 & 0 \end{bmatrix} EA=365233598100010110

第八步(计算特征矩阵(向量)):

( E − A ) x = [ 1 0 − 1 0 1 − 1 0 0 0 ] ⋅ [ x 1 x 2 x 3 ] = 0 (E-A)x=\begin{bmatrix} 1& 0 & -1\\ 0& 1 & -1 \\ 0& 0 & 0 \end{bmatrix}\cdot\begin{bmatrix} x_1\\ x_2\\ x_3 \end{bmatrix}=0 (EA)x=100010110x1x2x3=0

⇒ { x 1 − x 3 = 1 x 2 − x 3 = 0 \Rightarrow \left\{\begin{matrix} x_1-x_3=1 \\ x_2-x_3=0& \end{matrix}\right. {x1x3=1x2x3=0

令x1=1,解得:

X 1 = [ 1 1 1 ] X_1=\begin{bmatrix} 1\\ 1\\ 1 \end{bmatrix} X1=111

同理可以计算出 λ 2 = λ 3 = 0 \lambda_2=\lambda_3=0 λ2=λ3=0时的结果如下:

X 2 = X 3 = [ 1 3 2 ] X_2=X_3=\begin{bmatrix} 1\\ 3\\ 2 \end{bmatrix} X2=X3=132

至此我们的特征值和特征向量就成功的计算出来了,结合上面的内容就是我们PCA要做的事情了。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哥不像程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值