所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射
之所以使用降维后的数据表示是因为在原始的高维空间中,包含有冗余信息以及噪音信息,在实际应用中造成了误差,降低了准确率;而通过降维,我们希望减少冗余信息所造成的误差,提高准确率。又或者希望通过降维算法来寻找数据内部的本质结构特征。
在很多算法中降维算法成为了数据预处理的一部分,事实上,有一些算法如果没有降维预处理,其实是很难得到很好的效果的。
PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。
我们如何得到这些包含最大差异性的主成分方向呢?通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值特征向量,选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。
协方差:
C o v ( x 1 , x 2 ) = E [ ( x 1 − E ( x 1 ) ) ( x 2 − E ( x 2 ) ) ] = 1 n − 1 ∑ i = 1 n ( x 1 i − x ˉ 1 ) ( x 2 i − x ˉ 2 ) Cov(x_1,x_2)=E[(x_1-E(x_1))(x_2-E(x_2))]=\frac{1}{n-1}\sum_{i=1}^n(x_{1i}-\bar x_1)(x_{2i}-\bar x_2) Cov(x1,x2)=E[(x1−E(x1))(x2−E(x2))]=n−11∑i=1n(x1i−xˉ1)(x2i−xˉ2)
同时,散度矩阵就是协方差矩阵乘以n-1,因此它们的特征值和特征向量是一样的。这里值得注意的是,散度矩阵是SVD奇异值分解的一步,因此PCA和SVD是有很大联系。
看完了线性代数的本质后重新思考PCA,最终目的是寻找一组基向量,使在新基下能将现在的坐标变换成新的坐标,并且要满足所有新的坐标维数尽可能少、坐标之间计算出的方差要尽可能的大,因为可以合理地假设,呈现高方差的特征更有可能在类别之间进行良好的区分。
还有一个想法是:在降维后要尽可能多的保留原本的信息,而方差大的数据较为分散,能占据更大的张成空间,所保留信息也就更多
那么一组数据(假设包含 k k k个样本) { x 1 , x 2 , ⋯ , x k } \{x_1,x_2,\cdots,x_k\} {x1,x2,⋯,xk}的方差是如何计算的呢?
此时需要知道,样本的方差计算公式 S 2 = 1 k − 1 ∑ i = 1 k ( x i − x ˉ ) 2 S^2=\frac{1}{k-1}\sum_{i=1}^k(x_i-\bar x)^2 S2=k−11∑i=1k(xi−xˉ)2是针对一维特征的,针对同一特征的不同样本取值来进行计算,也就是说计算方差时使用的特征只是一维的,但在实际分类任务中,一个样本有多个维度的特征,此时想要衡量两个样本不同特征之间的关系就需要使用协方差(方差是协方差的特殊情况)
注意,衡量的是特征之间的关系,不是样本之间的
协方差则必须要求至少满足二维特征,协方差为正时,说明特征之间是正相关关系;协方差为负时,说明特征之间是负相关关系;协方差为0时,说明特征之间相互独立。例如,对于三维数据 ( x , y , z ) (x,y,z) (x,y,z),计算它的协方差:
C o v ( X , Y , Z ) = [ 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 ) ] Cov(X,Y,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,Y,Z)= 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)
由上式可以看出,数据的坐标变化时,协方差也随之改变。若样本的特征维度为 n n n,
则 k k k个样本可以表示成矩阵形式 X = [ x 1 , x 2 , ⋯ , x k ] = [ x 11 x 21 ⋯ x k 1 x 12 x 22 ⋯ x k 2 ⋮ ⋮ ⋯ ⋮ x 1 n x 2 n ⋯ x k n ] \mathcal{X}=[x_1,x_2,\cdots,x_k]=\begin{bmatrix}x_{11}&x_{21}&\cdots&x_{k1}\\x_{12}&x_{22}&\cdots&x_{k2}\\\vdots&\vdots&\cdots&\vdots\\x_{1n}&x_{2n}&\cdots&x_{kn}\end{bmatrix} X=[x1,x2,⋯,xk]= x11x12⋮x1nx21x22⋮x2n⋯⋯⋯⋯xk1xk2⋮xkn ,
顺便能得到其均值 X ˉ = 1 k ∑ i = 1 k x i = 1 k [ x 11 + x 21 + ⋯ + x k 1 x 12 + x 22 + ⋯ + x k 2 ⋮ x 1 n + x 2 n + ⋯ + x k n ] \mathcal{\bar X}=\frac{1}{k}\sum_{i=1}^kx_i=\frac{1}{k}\begin{bmatrix}x_{11}+x_{21}+\cdots+x_{k1}\\x_{12}+x_{22}+\cdots+x_{k2}\\\vdots\\x_{1n}+x_{2n}+\cdots+x_{kn}\\\end{bmatrix} Xˉ=k1∑i=1kxi=k1 x11+x21+⋯+xk1x12+x22+⋯+xk2⋮x1n+x2n+⋯+xkn ,其维度为 n × 1 n\times1 n×1
将均值矩阵按列复制,扩展成 n × n n\times n n×n的矩阵 X ˉ ′ = [ x ˉ ⋅ 1 x ˉ ⋅ 1 ⋯ x ˉ ⋅ 1 x ˉ ⋅ 2 x ˉ ⋅ 2 ⋯ x ˉ ⋅ 2 ⋮ ⋮ ⋯ ⋮ x ˉ ⋅ n x ˉ ⋅ n ⋯ x ˉ ⋅ n ] \mathcal{\bar X'}=\begin{bmatrix}\bar x_{\cdot 1}&\bar x_{\cdot 1}&\cdots&\bar x_{\cdot 1}\\\bar x_{\cdot 2}&\bar x_{\cdot 2}&\cdots&\bar x_{\cdot 2}\\\vdots&\vdots&\cdots&\vdots\\\bar x_{\cdot n}&\bar x_{\cdot n}&\cdots&\bar x_{\cdot n}\end{bmatrix} Xˉ′= xˉ⋅1xˉ⋅2⋮xˉ⋅nxˉ⋅1xˉ⋅2⋮xˉ⋅n⋯⋯⋯⋯xˉ⋅1xˉ⋅2⋮xˉ⋅n ,
得到中心化的矩阵:
X ^ = [ x 11 − x ˉ ⋅ 1 x 21 − x ˉ ⋅ 1 ⋯ x k 1 − x ˉ ⋅ 1 x 12 − x ˉ ⋅ 2 x 22 − x ˉ ⋅ 2 ⋯ x k 2 − x ˉ ⋅ 2 ⋮ ⋮ ⋯ ⋮ x 1 n − x ˉ ⋅ n x 2 n − x ˉ ⋅ n ⋯ x k n − x ˉ ⋅ n ] = [ x 11 ′ x 21 ′ ⋯ x k 1 ′ x 12 ′ x 22 ′ ⋯ x k 2 ′ ⋮ ⋮ ⋯ ⋮ x 1 n ′ x 2 n ′ ⋯ x k n ′ ] \mathcal{\hat X}=\begin{bmatrix}x_{11}-\bar x_{\cdot 1}&x_{21}-\bar x_{\cdot 1}&\cdots&x_{k1}-\bar x_{\cdot 1}\\x_{12}-\bar x_{\cdot 2}&x_{22}-\bar x_{\cdot 2}&\cdots&x_{k2}-\bar x_{\cdot 2}\\\vdots&\vdots&\cdots&\vdots\\x_{1n}-\bar x_{\cdot n}&x_{2n}-\bar x_{\cdot n}&\cdots&x_{kn}-\bar x_{\cdot n}\end{bmatrix}=\begin{bmatrix}x_{11}'&x_{21}'&\cdots&x_{k1}'\\x_{12}'&x_{22}'&\cdots&x_{k2}'\\\vdots&\vdots&\cdots&\vdots\\x_{1n}'&x_{2n}'&\cdots&x_{kn}'\end{bmatrix} X^= x11−xˉ⋅1x12−xˉ⋅2⋮x1n−xˉ⋅nx21−xˉ⋅1x22−xˉ⋅2⋮x2n−xˉ⋅n⋯⋯⋯⋯xk1−xˉ⋅1xk2−xˉ⋅2⋮xkn−xˉ⋅n = x11′x12′⋮x1n′x21′x22′⋮x2n′⋯⋯⋯⋯xk1′xk2′⋮xkn′ ,
此时就可以很方便的计算协方差矩阵:
S 2 = 1 k − 1 X ^ X ^ T = 1 k − 1 [ ∑ x i 1 ′ 2 ∑ x i 1 ′ x i 2 ′ ⋯ ∑ x i 1 ′ x i n ′ ∑ x i 2 ′ x i 1 ′ ∑ x i 2 ′ 2 ⋯ ∑ x i 2 ′ x i n ′ ⋮ ⋮ ⋯ ⋮ ∑ x i n ′ x i 1 ′ ∑ x i n ′ x i 2 ′ ⋯ ∑ x i n ′ 2 ] S^2=\frac{1}{k-1}\mathcal{\hat X}\mathcal{\hat X}^T=\frac{1}{k-1}\begin{bmatrix}\sum x_{i1}'^2&\sum x_{i1}'x_{i2}'&\cdots&\sum x_{i1}'x_{in}'\\\sum x_{i2}'x_{i1}'&\sum x_{i2}'^2&\cdots&\sum x_{i2}'x_{in}'\\\vdots&\vdots&\cdots&\vdots\\\sum x_{in}'x_{i1}'&\sum x_{in}'x_{i2}'&\cdots&\sum x_{in}'^2\end{bmatrix} S2=k−11X^X^T=k−11 ∑xi1′2∑xi2′xi1′⋮∑xin′xi1′∑xi1′xi2′∑xi2′2⋮∑xin′xi2′⋯⋯⋯⋯∑xi1′xin′∑xi2′xin′⋮∑xin′2 ,
散度矩阵就是协方差矩阵乘以(k-1)。因此它们的特征值和特征向量是一样的。这里值得注意的是,散度矩阵是SVD奇异值分解的一步,因此PCA和SVD是有很大联系的。
现在考虑散度矩阵 S = X ^ X ^ T S=\mathcal{\hat X}\mathcal{\hat X}^T S=X^X^T,由于它是对称阵,因此有 S T = S S^T=S ST=S,于是也就有 S = X ^ T X ^ S=\mathcal{\hat X}^T\mathcal{\hat X} S=X^TX^,这个式子是将原本的数据 X ^ \mathcal{\hat X} X^经过线性变换后得到一个新的向量组 S S S,其中的数据反映了不同特征之间的协方差
我们如何得到协方差最大的一组基呢?又如何将我们的数据从标准正交基转化到新基去呢?
回答以上两个问题的核心就是特征值和特征向量
现在考虑 k = n k=n k=n的情况,将散度矩阵 S S S进行分解,得到其特征值对角阵 Σ \Sigma Σ和特征向量矩阵 Q Q Q,则有 S = Q Σ Q − 1 S=Q\Sigma Q^{-1} S=QΣQ−1,考虑到所求的 Q Q Q是我们需要的新基向量,所以是正交的,则有 Q − 1 = Q T Q^{-1}=Q^T Q−1=QT,
此时就有 Q Y = X ^ Q\mathcal{Y}=\mathcal{\hat X} QY=X^,那么我们令 Y = Q T X ^ \mathcal{Y}=Q^T\mathcal{\hat X} Y=QTX^,就把在标准正交基下的数据 X ^ \mathcal{\hat X} X^变换成了新基 Q Q Q下的数据,完成了对 X ^ \mathcal{\hat X} X^的基变换,新的坐标就成了 Y \mathcal{Y} Y,它的每个维度都是方差最大的一组方向,保留的xin’xi
重新回到 S = Q Σ Q T S=Q\Sigma Q^T S=QΣQT,代入得 Q T X ^ X ^ T Q = Σ Q^T\mathcal{\hat X}\mathcal{\hat X}^TQ=\Sigma QTX^X^TQ=Σ,即 Y Y T = Σ \mathcal{Y}\mathcal{Y}^T=\Sigma YYT=Σ,也符合散度的计算公式,说明我们所做的线性变换没有问题
只有满足条件的矩阵才可以进行特征值分解,若 k ≠ n k\neq n k=n,则需要用到SVD分解,奇异值分解对所有实数矩阵都可以进行。
PCA缺点
- 它是运用于非监督的情况下的,对于有类别的数据则无法分辨出来
- 它只适用于线性的情况下
解决第2个问题的办法就是使用核函数,可以先把数据集从n维映射到线性可分的高维N>n,然后再从N维降维到一个低纬度n’,这里的维度之间满足n’<n<N,这里就是用到和支持向量机一样的核函数的思想。
使用了核函数的主成分分析一般称之为核主成分分析(Kernalized PCA,简称KPCA)。
如何解决第1个问题?此时就要引入监督学习下的降维算法LDA(后续更新)。