机器学习笔记13-降维
-
低维嵌入
在高维情形下数据样本会出现稀疏、距离计算困难等问题,称为“维数灾难”,缓解维数灾难的一个重要途径是降维,即通过数学变换将原始高维属性空间转变为一个低维子空间,在这个子空间中样本密度大幅提高,距离计算也变得更为容易。若要求原始空间中样本之间的距离在低维空间中得以保持,即得到“多维缩放”(MDS)这一经典的降维方法。
MDS算法
假定m个样本在原始空间的距离矩阵为D∈Rm×mD \in {R^{m \times m}}D∈Rm×m,其第i行第j列的元素distijdist_{ij}distij为样本xix_ixi到xjx_jxj的距离。我们的目标是获得样本在d′d'd′维空间的表示Z∈Rd′×mZ \in {R^{d' \times m}}Z∈Rd′×m,d′≤dd' \le dd′≤d,且任意两个样本在d′d'd′维空间中的欧式距离等于原始空间中的距离,即∥zi−zj∥=distij\left\| {{z_i} - {z_j}} \right\| = dis{t_{ij}}∥zi−zj∥=distij。令B=ZTZ∈Rm×mB = {Z^T}Z \in {R^{m \times m}}B=ZTZ∈Rm×m,其中BBB为降维后样本的内积矩阵,bij=ziTzjb_{ij}=z_i^Tz_jbij=ziTzj,有
distij2=∥zi∥2+∥zj∥2−2ziTzj=bii+bjj−2bijdist_{ij}^2 = {\left\| {{z_i}} \right\|^2} + {\left\| {{z_j}} \right\|^2} - 2z_i^T{z_j} = {b_{ii}} + {b_{jj}} - 2{b_{ij}}distij2=∥zi∥2+∥zj∥2−2ziTzj=bii+bjj−2bij令降维后的样本ZZZ被中心化,即∑i=1mzi=0\sum\limits_{i = 1}^m {{z_i} = 0}i=1∑mzi=0,可得
bij=−12(distij2−disti⋅2−dist⋅j2+dist⋅⋅2){b_{ij}} = - \frac{1}{2}(dist_{ij}^2 - dist_{i \cdot }^2 - dist_{ \cdot j}^2 + dist_{ \cdot \cdot }^2)bij=−21(distij2−disti⋅2−dist⋅j2+dist⋅⋅2)其中,disti⋅2=1m∑j=1mdistij2dist_{i \cdot }^2 = \frac{1}{m}\sum\limits_{j = 1}^m {dist_{ij}^2}disti⋅2=m1j=1∑mdistij2,dist⋅j2=1m∑i=1mdistij2dist_{ \cdot j}^2 = \frac{1}{m}\sum\limits_{i = 1}^m {dist_{ij}^2}dist⋅j2=m1i=1∑mdistij2,dist⋅⋅2=1m2∑i=1m∑j=1mdistij2dist_{ \cdot \cdot }^2 = \frac{1}{{{m^2}}}\sum\limits_{i = 1}^m {\sum\limits_{j = 1}^m {dist_{ij}^2} }dist⋅⋅2=m21i=1∑mj=1∑mdistij2。由此即可通过降维前后保持不变的距离矩阵DDD求取内积矩阵BBB。对矩阵BBB做特征值分解,B=VΛVTB = V\Lambda {V^T}B=VΛVT,其中Λ=diag(λ1,λ2,...,λd)\Lambda = diag({\lambda _1},{\lambda _2},...,{\lambda _d})Λ=diag(λ1,λ2,...,λd)为特征值构成的对角矩阵,λ1≥λ2≥...≥λd{\lambda _1} \ge {\lambda _2} \ge ... \ge {\lambda _d}λ1≥λ2≥...≥λd,VVV为特征向量矩阵。假定有d∗d^*d∗个非零特征值,他们构成对角矩阵Λ∗=diag(λ1,λ2,...,λd∗){\Lambda _*} = diag({\lambda _1},{\lambda _2},...,{\lambda _{d*}})Λ∗=diag(λ1,λ2,...,λd∗),令V∗V_*V∗表示相应的特征向量矩阵,则ZZZ可表示为:
Z=Λ∗1/2V∗T∈Rd∗×mZ = \Lambda _*^{1/2}V_*^T \in {R^{d* \times m}}Z=Λ∗1/2V∗T∈Rd∗×m在现实应用中,为了有效降维,往往仅需降维后的距离与原始空间中的距离尽可能接近,而不必严格相等。此时可取d′≤dd' \le dd′≤d个最大特征值构成对角矩阵。
—
一般来说,获得低维子空间最简单的方法时对高维空间进行线性变换。d维空间中的样本X=(x1,x2,...,xm)∈Rd×mX=(x_1,x_2,...,x_m) \in R^{d \times m }X=(x1,x2,...,xm)∈Rd×m,变换到d′≤dd' \le dd′≤d维中,
Z=WTXZ=W^TXZ=WTX其中W∈Rd×d′W \in R^{d \times d'}W∈Rd×d′是变换矩阵,Z∈Rd′×mZ \in R^{d' \times m}Z∈Rd′×m是样本在新空间中的表达。基于这种线性变换来进行降维的方法称为线性降维方法。 -
主成分分析(PCA)
PCA是最常用的一种降维方法。对于正交属性空间中样本点,若想要用一个超平面对所有样本进行恰当表达,这种超平面需满足两点:(1)最近重构性:样本点到这个超平面的距离都足够近;(2)最大可分性:样本点在这个超平面上的投影能尽可能分开。而这两个条件会得到等价的优化目标:
maxWtr(WTXXTW)\mathop {\max }\limits_W {\rm{ }}tr({W^T}X{X^T}W)Wmaxtr(WTXXTW)WTW=I{W^T}W=IWTW=I对上式使用拉格朗日乘子法可得:
XXTwi=λiwiX{X^T}{w_i} = {\lambda _i}{w_i}XXTwi=λiwi于是只需对协方差矩阵XXTXX^TXXT进行特征值分解,将求得的特征值排序:λ1≥λ2≥,...,≥λd{\lambda _1} \ge {\lambda _2} \ge ,..., \ge {\lambda _d}λ1≥λ2≥,...,≥λd,再取前d′d'd′个特征值对应的特征向量构成W∗=(w1,w2,...,wd′){W^*} = ({w_1},{w_2},...,{w_{d'}})W∗=(w1,w2,...,wd′)。这就是主成分分析的解。其具体过程如下:
(1)对所有样本进行中心化:xi←xi−1m∑i=1mxi{x_i} \leftarrow {x_i} - \frac{1}{m}\sum\limits_{i = 1}^m {{x_i}}xi←xi−m1i=1∑mxi
(2)计算样本的协方差矩阵XXTXX^TXXT
(3)对协方差矩阵XXTXX^TXXT做特征值分解
(4)取最大的d′d'd′个特征值所对应的特征向量(w1,w2,...,wd′)({w_1},{w_2},...,{w_{d'}})(w1,w2,...,wd′)
(5)输出投影矩阵W∗=(w1,w2,...,wd′){W^*} = ({w_1},{w_2},...,{w_{d'}})W∗=(w1,w2,...,wd′)
降维后低维空间的维数d′d'd′通常是由用户事先指定,或通过交叉验证来选取最佳d′d'd′值。对PCA,还可以从重构的角度设置一个重构阈值,例如t=95%t=95\%t=95%,使下式成立:
∑i=1d′λi∑i=1dλi≥t\frac{{\sum\limits_{i = 1}^{d'} {{\lambda _i}} }}{{\sum\limits_{i = 1}^d {{\lambda _i}} }} \ge ti=1∑dλii=1∑d′λi≥tPCA仅需保留W∗W^*W∗与样本均值向量即可通过简单的向量减法和矩阵-向量乘法将新样本投影到低维空间中。运算过程中,d′−dd'-dd′−d个特征值向量会被舍弃。这样做一方面可以使样本的采样密度增大,这正是降维的重要动机;另一方面,当数据受到噪声影响时,最小的特征值所对应的特征向量往往与噪声有关,舍弃这些可达到去噪的目的。 -
核化线性降维
在不少任务中,需要非线性映射才能找到恰当的低维嵌入。非线性降维的一种常用方法,是基于核技巧对线性降维方法进行核化。以下介绍核主成分分析(KPCA)。
假定将数据投影到W=(w1,w2,...,wd)W = ({w_1},{w_2},...,{w_d})W=(w1,w2,...,wd)确定的超平面上,对于wjw_jwj有
(∑i=1mzizT)wj=λjwj(\sum\limits_{i = 1}^m {{z_i}{z^T}} ){w_j} = {\lambda _j}{w_j}(i=1∑mzizT)wj=λjwj其中ziz_izi是样本点xix_ixi在高维空间中的像。易知
wj=1λj(∑i=1mziziT)wj=∑i=1mziziTwjλj=∑i=1mziαij{w_j} = \frac{1}{{{\lambda _j}}}(\sum\limits_{i = 1}^m {{z_i}z_i^T} ){w_j} = \sum\limits_{i = 1}^m {{z_i}\frac{{z_i^T{w_j}}}{{{\lambda _j}}}} = \sum\limits_{i = 1}^m {{z_i}\alpha _i^j}wj=λj1(i=1∑mziziT)wj=i=1∑mziλjziTwj=i=1∑mziαij其中αij=ziTwjλj{\alpha _i^j = \frac{{z_i^T{w_j}}}{{{\lambda _j}}}}αij=λjziTwj是αi\alpha_iαi的第j个分量。假定ziz_izi是由原始属性空间中的样本点xix_ixi通过映射ϕ\phiϕ产生,即zi=ϕ(xi)z_i=\phi(x_i)zi=ϕ(xi)。若ϕ\phiϕ能够被显示地表达出来,则通过它将样本映射至高维空间,再在高维空间中实施PCA即可。有:
(∑i=1mϕ(xi)ϕ(xi)T)wj=λjwj(\sum\limits_{i = 1}^m {\phi ({x_i})\phi {{({x_i})}^T}} ){w_j} = {\lambda _j}{w_j}(i=1∑mϕ(xi)ϕ(xi)T)wj=λjwj于是wjw_jwj可写为wj=∑i=1mϕ(xi)αij{w_j} = \sum\limits_{i = 1}^m {\phi ({x_i})\alpha _i^j}wj=i=1∑mϕ(xi)αij。一般情形下,并不清楚ϕ\phiϕ的具体形式,于是引入核函数
κ(xi,xj)=ϕ(xi)Tϕ(xj)\kappa ({x_i},{x_j}) = \phi {({x_i})^T}\phi ({x_j})κ(xi,xj)=ϕ(xi)Tϕ(xj)于是有
Kαj=λjαj{\rm{K}}{\alpha ^j} = {\lambda _j}{\alpha ^j}Kαj=λjαjK是κ\kappaκ对应的核矩阵,Kij=κ(xi,xj)K_{ij}=\kappa(x_i,x_j)Kij=κ(xi,xj),αj=(α1j;α2j;...;αmj)\alpha^j=(\alpha_1^j;\alpha_2^j;...;\alpha_m^j)αj=(α1j;α2j;...;αmj)。显然上式是特征值分解问题,取K最大的d′d'd′个特征值对应的特征向量即可。对新样本xxx,其投影后的第j维坐标为
zj=wjTϕ(x)=∑i=1mαijϕ(xi)Tϕ(x)=∑i=1mαijκ(xi,x){z_j} = w_j^T\phi (x) = \sum\limits_{i = 1}^m {\alpha _i^j\phi {{({x_i})}^T}\phi (x)} = \sum\limits_{i = 1}^m {\alpha _i^j\kappa ({x_i},x)}zj=wjTϕ(x)=i=1∑mαijϕ(xi)Tϕ(x)=i=1∑mαijκ(xi,x)因此为了获得投影后的坐标,KCPA需对所有样本求和,因此它的计算开销很大。
参考:
周志华《机器学习》