2021人工智能领域新星创作者,带你从入门到精通,该博客每天更新,逐渐完善机器学习各个知识体系的文章,帮助大家更高效学习。
一、概述
在实际生活中,我们获得数据维度会非常大,有时维度可能超过几千个,这是因为针对于一件事物,我们获得它的特征属性越多,我们就越能够从多个角度进行分析,全方面的对知识进行探索。
但是这是也会引出新的问题,尽管数据特征多了,供给我们分析的数据增多,但是同时我们分析数据的复杂度也是指数上升,如果我们使用了一些对特征维度较为敏感的模型,例如一般使用距离的模型都会产生计算的问题,像K近邻、聚类这些,都会因为维度的变大,降低他们的计算效率。
所以我们就希望能不能找到一种解决办法,来解决维度过高的问题,一般来说,我们需要去除掉一些无用的特征即可,即达到了降维的目的,但是有时候不能随便的删除特征,因为有些特征之间具有关联性,只有他们共存才能够发挥出一定效果,你比如说,现在有两列特征,分别是性别、爱不爱打游戏,如果你随意删除了任意一列,都会造成较大的影响,因为在实际中,一个人的性别和爱不爱打游戏的关联非常大,对于男孩子来说,打游戏的可能性更大,而女生相对来说会少一点,如果贸然删去性别,那么这个关联信息就丢掉了,剩下的游戏特征也就没什么用了。
数据降维的目标:
- 特征减少:要减少数据的特征维度
- 损失要小:我们应该在压缩率最大的情况下,数据的信息损失最小,如果我们在降维的过程中,数据的信息损失非常大,那么我们数据降维也就失去了意义
那么按照上文所说,不能够删除有关联的数据,而且显示中,数据维度很高,而且很多特征之间都是相互关联的,那么应该怎么办呢?所以我们希望数据可以转化,也就是把所有的特征转化为线性无关的,每个特征之间没有任何关系,然后再从新的特征中进行选择,这样就不会造成影响,这就引出了PCA(主成分分析法)
。
对于PCA降维,本文使用的方法是特征值分解(EVD)
,下篇文章将会讲解更为牛的大杀器奇异值分解(SVD)
。
二、需要的数学知识
1.对称矩阵特性
首先需要了解什么是对称矩阵?
如果一个矩阵前提是方阵,满足 A T = A A^T=AAT=A ,那么则将其成为对称矩阵
将一个很重要的一个表达式,接下来会经常用到 A A T AA^TAAT 也是对称矩阵,也就是说如果一个矩阵乘以自己的转置得到的结果仍然是对称矩阵,做个简单的证明:
( A A T ) T = ( A T ) T A T = A A T (AA^T)^T=(A^T)^TA^T=AA^T(AAT)T=(AT)TAT=AAT
还有一条很重要的性质就是:
R ( A ) = R ( A T ) = R ( A A T ) = R ( A T A ) R(A)=R(A^T)=R(AA^T)=R(A^TA)R(A)=R(AT)=R(AAT)=R(ATA)
它们的秩是相等的,具体证明就不说了。
2.实对称矩阵的对角化
线代中学过,一个方阵如果可以对角化,一定要满足n个特征向量线性无关,或者有重根时,对应重根的特征向量要一定线性无关,但是这里对于我们的实对称矩阵来说,它是一定可以对角化的,一定满足n个特征向量线性无关
,证明这里不讲解,有兴趣可以自行百度查询。
矩阵对角化公式:
A = P D P − 1 , 其 中 D 为 对 角 矩 阵 , 对 角 元 素 为 矩 阵 A 的 特 征 值 A=PDP^{-1},其中D为对角矩阵,对角元素为矩阵A的特征值A=PDP−1,其中D为对角矩阵,对角元素为矩阵A的特征值
或者是这样:
P − 1 A P = D P^{-1}AP=DP−1AP=D
3.标准正交的特征向量
我们上面说了实对称矩阵一定可以对角化,格式为: A = P D P − 1 , 其 中 D 为 对 角 矩 阵 , 对 角 元 素 为 矩 阵 A 的 特 征 值 A=PDP^{-1},其中D为对角矩阵,对角元素为矩阵A的特征值A=PDP−1,其中D为对角矩阵,对角元素为矩阵A的特征值 ,又因为我们的A是一个对称矩阵,所以满足 A T = A A^T=AAT=A ,即:
( P D P − 1 ) T = P D P − 1 (PDP^{-1})^T=PDP^{-1}(PDP−1)T=PDP−1
( P − 1 ) T D P T = P D P − 1 (P^{-1})^TDP^T=PDP^{-1}(P−1)TDPT=PDP−1
观察第二个式子,满足什么条件才能够让两个式子相等呢?
当 P − 1 = P T P^{-1}=P^TP−1=PT 时,显然上式成立,又因为 P P − 1 = I PP^{-1}=IPP−1=I ,此时 P − 1 = P T P^{-1}=P^TP−1=PT ,所以 P P T = I PP^T=IPPT=I ,那么我们的特征向量矩阵P就是标准正交的。
那么我们的对角化式子就可以变为:
A = P D P T A=PDP^TA=PDPT
或者:
P T D P = A P^TDP=APTDP=A
4.实对称矩阵的正定性
什么是矩阵的正定性呢?
如果我们矩阵的特征值全为正,那么就称这个矩阵是正定的,如果特征是大于等于0的,那么就是半正定的,如果都为负的,就是负定的,如果都不满足就是不定矩阵。
而对于对称矩阵来说,它有非常好的性质,对称矩阵至少是半正定的,也就是说它所有的特征值一定是大于等于0的,下面给出证明:
上面说了 A T A A^TAATA 为对称矩阵,所以它的特征方程为 A T A x = λ x A^TAx=\lambda xATAx=λx ,两边同时左乘 x T x^TxT ,就变成了:
x T A T A x = x T λ x x^TA^TAx=x^T\lambda xxTATAx=xTλx
( A x ) T A x = λ ∣ x ∣ 2 (Ax)^TAx=\lambda |x|^2(Ax)TAx=λ∣x∣2
因为特征向量x为非0,所以 ∣ x ∣ 2 |x|^2∣x∣2 应该为正,所以左侧的 ∣ A x ∣ 2 |Ax|^2∣Ax∣2 应该和 λ \lambdaλ 同号,如果A满足列线性无关,那么 ∣ A x ∣ 2 |Ax|^2∣Ax∣2 应该是大于0的,因为A列向量组线性无关,而且x不为0,能够保证 A x AxAx 不等于0, 如果线性相关则存在多解等于0,那么就是半正定的,因为 A x = 0 Ax=0Ax=0 有解。
5.期望与方差
期望就是我们数据某一特征分量下的均值,如果按照概率相同的话,期望的表达式为:
E ( x ) = ∑ i = 1 m p ( x ) x E(x)=\sum_{i=1}^mp(x)xE(x)=i=1∑mp(x)x
如果此时的P(x)各个样本都相等,那么我们的期望公式就变成了最简单的平均值,它可以描述某一个随机变量的总体的一个平均水平。
方差是什么呢?
它是用来描述随机变量x的分布情况以及波动情况,如果说某一随机变量的方差很大,那么就说明该随机变量的取值非常波动,不够稳定,我们经常用方差评估一个人的成绩稳定状况。
它的公式为:
D ( x ) = E ( x − μ ) 2 D(x)=E(x-\mu)^2D(x)=E(x−μ)2
这里有个地方需要注意,我们的样本方差和数据总体方差是不同的,样本方差为:
1 n − 1 ∑ i = 1 m E ( x i − μ ) 2 \frac{1}{n-1}\sum_{i=1}^mE(x_i-\mu)^2n−11i=1∑mE(xi−μ)2
为什么分母不是n,而是n-1,这个和参数估计有影响,这是为了得到无偏估计值。
6.协方差与协方差矩阵
为了表示多维特征之间的关系,这里我们引入了协方差和协方差矩阵的概念。
协方差可以解释为如果随机变量x和随机变量y之间的关系,正相关、负相关还是无关,协方差的公式为:
C o v [ X , Y ] = E [ ( X − μ ) ( Y − v ) ] Cov[X,Y]=E[(X-\mu)(Y-v)]Cov[X,Y]=E[(X−μ)(Y−v)]
可以观察到我们上面的方差就是协方差的一种特殊形式,当两个随机变量相同时就变成了协方差。
当我们的协方差为正时,如果此时X增大,那我们的Y值也会随之变大,如果为负则相反,如果为0,则没有任何关系,有时为了比较两个变量之前的相关程度,需要将协方差映射到一个可比较的范围[-1,1] ,这也就引出了相关系数,我们只需要将原来的协方差除以两个随机变量的标准差就会将最终的结果缩放到 [ − 1 , 1 ] [-1,1][−1,1] 之间,如果大于0为正相关,如果为负则为负相关。
两个维度之间的比较可以使用协方差进行比较,但是如果多维的话怎么弄呢?还是用协方差,但是怎么摆放呢?这就引入了协方差矩阵,它的每个位置代表对应行和列之间的协方差,对角线位置则为自己对自己的协方差也就是方差。
[ D ( X 1 ) C o v ( X 1 , X 2 ) C o v ( X 1 , X 3 ) C o v ( X 2 , X 1 ) D ( X 2 ) C o v ( X 2 , X 3 ) C o n ( X 3 , X 1 ) C o v ( X 3 , X 2 ) D ( X 3 ) ]
⎡⎣⎢D(X1)Cov(X2,X1)Con(X3,X1)Cov(X1,X2)D(X2)Cov(X3,X2)Cov(X1,X3)Cov(X2,X3)D(X3)⎤⎦⎥[D(X1)Cov(X1,X2)Cov(X1,X3)Cov(X2,X1)D(X2)Cov(X2,X3)Con(X3,X1)Cov(X3,X2)D(X3)]
⎣⎡D(X1)Cov(X2,X1)Con(X3,X1)Cov(X1,X2)D(X2)Cov(X3,X2)Cov(X1,X3)Cov(X2,X3)D(X3)⎦⎤
上面这个矩阵就是三个特征维度之间的协方差矩阵,可以看出该矩阵为一个对称矩阵,也就是说具有可对角化的性质。
三、特征值分解(EVD)
有了上面的一些讲解以及需要的数学知识,看懂特征值分解应该不难,那么接下来就说说如何使用EVD方法进行数据的降维。
1.降维思路
如果我们直接删掉某一个特征的话会丢失掉很多信息,这是应为没有考虑到不同特征之间的耦合度,所以我们应该考虑如何将我们现有的特征转为为相互无关的特征,那就需要一个矩阵P进行映射,将我们原有的数据映射到另外一个空间上,在新的空间上我们的列特征是线性无关的,求解的关键就是找到这么一个映射矩阵P。
2.联系协方差矩阵
如果我们要每个特征之间无关,那么就需要使他们的协方差为0,我们回一下协方差的公式:
C o v ( X , Y ) = 1 n − 1 ∑ i = 1 m ( x i − μ ) ( y i − v ) Cov(X,Y)=\frac{1}{n-1}\sum_{i=1}^m(x_i-\mu)(y_i-v)Cov(X,Y)=n−11i=1∑m(xi−μ)(yi−v)
这里我们看到每个样本的协方差都会减去一个均值,很不美观不方便,所以能不能想办法把他去掉呢?
如果我们在计算协方差之前将其去均值化,那么它的均值不就为0了嘛,上面的式子不就变成了 x i ∗ y i x_i*y_ixi∗yi ,什么是去均值化?
就是将我们原样本的每个特征的每个样本分量分别减去均值,那么该列特征的均值就变成了0,而且去均值后,我们的协方差也不会变,因为同时减去同一个数,并没有改变数据的分布,从式子中也可以看出,如果去均值,那么上面的 x i x_ixi 就变成了 x i − μ x_i-\muxi−μ ,而后面的 μ \muμ 就变为0,这是式子还是没有变。
那这样去均值后整个式子就变得简单了,处理之后就变成了:
C o v ( X , Y ) = 1 n − 1 ∑ i = 1 m x i y i Cov(X,Y)=\frac{1}{n-1}\sum_{i=1}^mx_iy_iCov(X,Y)=n−11i=1∑mxiyi
那此时的协方差矩阵就变成了:
C = [ D ( X ) C o v ( X , Y ) C o v ( Y , X ) D ( Y ) ] = [ 1 n − 1 ∑ i = 1 m x i 2 1 n − 1 ∑ i = 1 m x i y i 1 n − 1 ∑ i = 1 m y i x i 1 n − 1 ∑ i = 1 m y i 2 ] = 1 n − 1 [ ∑ i = 1 m x i 2 ∑ i = 1 m x i y i ∑ i = 1 m y i x i ∑ i = 1 m y i 2 ] C=
[D(X)Cov(Y,X)Cov(X,Y)D(Y)][D(X)Cov(X,Y)Cov(Y,X)D(Y)]
=
[1n−1∑mi=1x2i1n−1∑mi=1yixi1n−1∑mi=1xiyi1n−1∑mi=1y2i][1n−1∑i=1mxi21n−1∑i=1mxiyi1n−1∑i=1myixi1n−1∑i=1myi2]
=\frac{1}{n-1}
[∑mi=1x2i∑mi=1yixi∑mi=1xiyi∑mi=1y2i][∑i=1mxi2∑i=1mxiyi∑i=1myixi∑i=1myi2]
C=[D(X)Cov(Y,X)Cov(X,Y)D(Y)]=[n−11∑i=1mxi2n−11∑i=1myixin−11∑i=1mxiyin−11∑i=1myi2]=n−11[∑i=1mxi2∑i=1myixi∑i=1mxiyi∑i=1myi2]
看一下后面的式子是不是很熟悉,假设原样本数据为:
A = [ x 1 x 2 x 3 x 4 x 5 y 1 y 2 y 3 y 4 y 5 ] A=
[x1y1x2y2x3y3x4y4x5y5][x1x2x3x4x5y1y2y3y4y5]
A = [ x 1 y 1 x 2 y 2 x 3 y 3 x 4 y 4 x 5 y 5 ]这里规定每一列为一个样本,每一行是所有样本的一个特征,本数据有5个样本,2列特征。
所以上面的协方差矩阵其实就是我们的 :
A A T = [ x 1 x 2 x 3 x 4 x 5 y 1 y 2 y 3 y 4 y 5 ] [ x 1 y 1 x 2 y 2 x 3 y 3 x 4 y 4 x 5 y 5 ] AA^T=
[x1y1x2y2x3y3x4y4x5y5][x1x2x3x4x5y1y2y3y4y5]
⎡⎣⎢⎢⎢⎢⎢⎢x1x2x3x4x5y1y2y3y4y5⎤⎦⎥⎥⎥⎥⎥⎥[x1y1x2y2x3y3x4y4x5y5]
AAT=[x1y1x2y2x3y3x4y4x5y5]⎣⎢⎢⎢⎢⎡x1x2x3x4x5y1y2y3y4y5⎦⎥⎥⎥⎥⎤
3.寻找新的基P来进行映射
由于我们需要在构建新的特征为线性无关,所以需要我们的两组基必须要标准正交。
那么我们映射后的矩阵就变成了 P A PAPA ,P = [ p 1 T p 2 T ] P=
[p1Tp2T][p1Tp2T]
P=[p1Tp2T] ,如果对某个样本来说经过P变换后就变成了 [ p 1 T a p 2 T a ]
[p1Tap2Ta][p1Tap2Ta]
[ p 1 T a p 2 T a ] ,这里另 a = [ x 1 y 1 ] a=[x1y1][x1y1]
a = [ x 1 y 1 ]所以映射后的矩阵为:
[ p 1 T a 1 p 1 T a 2 p 1 T a 3 p 1 T a 4 p 1 T a 5 p 2 T a 1 p 2 T a 2 p 2 T a 3 p 2 T a 4 p 2 T a 5 ]
[p1Ta1p2Ta1p1Ta2p2Ta2p1Ta3p2Ta3p1Ta4p2Ta4p1Ta5p2Ta5][p1Ta1p1Ta2p1Ta3p1Ta4p1Ta5p2Ta1p2Ta2p2Ta3p2Ta4p2Ta5]
[p1Ta1p2Ta1p1Ta2p2Ta2p1Ta3p2Ta3p1Ta4p2Ta4p1Ta5p2Ta5]
那么我们的目标就是变换后的两行线性无关,所以需要它的协方差矩阵除了对角线其余位置都为0,也就是不同特征之间无关。
所以引入下面的公式:
D = 1 n − 1 P A ( P A ) T = 1 n − 1 P A A T P T = 1 n − 1 P C P T D=\frac{1}{n-1}PA(PA)^T=\frac{1}{n-1}PAA^TP^T=\frac{1}{n-1}PCP^TD=n−11PA(PA)T=n−11PAATPT=n−11PCPT
解释一下协方差矩阵=样本*样本的转置,所以就是第一个等号后面的 P A ( P A ) T PA(PA)^TPA(PA)T ,这里另 A A T = C AA^T=CAAT=C ,其中D为对角化矩阵,所以我们的目标就是将C对角化,求出使其对角化的特征向量矩阵P。
因为C为对称矩阵,所以可以对角化为:
D = Q C Q T D=QCQ^TD=QCQT
代入上式,可以求出 P = Q T P=Q^TP=QT ,也就是我们需要的映射矩阵P等于原样本的协方差矩阵C的特征向量Q的转置,即:
P = Q T = [ p 1 p 2 ] T = [ p 1 T p 2 T ] P=Q^T=
[p1p2][p1p2]
^T=
[p1Tp2T][p1Tp2T]
P=QT=[p1p2]T=[p1Tp2T]
其中 p 1 , p 2 p1,p2p1,p2 为协方差矩阵C的n个标准正交的特征向量。
这样我们就求出了P,只需要将原矩阵乘上P即可得到新的样本数据,即各个特征线性无关的样本,之后就可以按照要求进行取舍。
4.计算信息损失
那么当我们进行PCA后信息数据肯定是会丢失的,那么如何衡量信息的损失程度呢?
我们考虑可以使用方差,如果某一列的方差越大,则说明信息量越大,如果方差越小,说明数据集中分布,没什么区分度,此列的数据对整体数据贡献数据量较少,可以考虑删除,那么怎么计算每列的方差呢?
不需要额外计算,上面我们求出了对角化矩阵D,它的对角线即为各个特征的方差,举个例子:
D = [ 1 0 0 4 ] D=
[1004][1004]
D=[1004]
如果我们去掉了特征1,那么我们的信息损失就为 1 1 + 4 = 0.2 \frac{1}{1+4}=0.21+41=0.2 ,说明我们去除了一半的数据,最终的信息仍保留了 80 % 80\%80% ,说明降维效果还不错。
5.推广到n为数据特征
针对n维度数据其实是一样的,我们的降维流程就是:
- 获得样本数据A(n*m),注意行代表特征
- 获得样本数据A的协方差矩阵C,即 C = 1 n − 1 A A T C=\frac{1}{n-1}AA^TC=n−11AAT
- 对协方差进行对角化,获得协方差矩阵C的n个标准正交特征向量,并按照对应特征值从大到小进行排列,因为考虑方差贡献率,方差越大的特征保留,所以特征值大的对应的特征向量要保留
- 按照需求,提取前k个特征向量
- 将该k个特征向量乘以原来的数据A,来实现将原来的n维特征降到k维度
A为(n,m),P为(k,n),所以PA=(k,m),从而达到了降维的效果。