我是靠谱客的博主 外向野狼,最近开发中收集的这篇文章主要介绍机器学习——降维,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

机器学习——降维

    • 线性降维-主成分分析PCA
    • 损失函数
    • SVD与PCoA
    • p-PCA
    • 小结

降维的思路来源于维度灾难的问题,我们知道n维球的体积为:
C R n CR^n CRn
那么在求体积与边长为 2 R 2R 2R的超立方体比值为:
lim ⁡ n → 0 C R n 2 n R n = 0 limlimits_{nrightarrow0}frac{CR^n}{2^nR^n}=0 n0lim2nRnCRn=0
这就是所谓的维度灾难,在高维数据中,主要样本都分布在立方体的边缘,所以数据集更加稀疏。(因为,维度越高的球,靠近边缘的空间越大,如果数据符合均匀分布的话)
维度的算法分为:

  • 直接降维,特征选择
  • 线性降维,PCA,MDS等
  • 分线性,流行包括lsomap,LLE
    为了方便,我们首先将协方差矩阵写成中心化的形式:
    S = 1 N ∑ i = 1 N ( x i − x ‾ ) ( x i − x ‾ ) T = 1 N ( x 1 − x ‾ , x 2 − x ‾ , ⋯   , x N − x ‾ ) ( x 1 − x ‾ , x 2 − x ‾ , ⋯   , x N − x ‾ ) T = 1 N ( X T − 1 N X T I N 1 I N 1 T ) ( X T − 1 N X T I N 1 I N 1 T ) T = 1 N X T ( E N − 1 N I N 1 I 1 N ) ( E N − 1 N I N 1 I 1 N ) T X = 1 N X T H N H N T X = 1 N X T H N H N X = 1 N X T H X S=frac{1}{N}sumlimits_{i=1}^N(x_i-overline{x})(x_i-overline{x})^T\ =frac{1}{N}(x_1-overline{x},x_2-overline{x},cdots,x_N-overline{x})(x_1-overline{x},x_2-overline{x},cdots,x_N-overline{x})^T\ =frac{1}{N}(X^T-frac{1}{N}X^Tmathbb{I}_{N1}mathbb{I}_{N1}^T)(X^T-frac{1}{N}X^Tmathbb{I}_{N1}mathbb{I}_{N1}^T)^T\ =frac{1}{N}X^T(E_N-frac{1}{N}mathbb{I}_{N1}mathbb{I}_{1N})(E_N-frac{1}{N}mathbb{I}_{N1}mathbb{I}_{1N})^TX\ =frac{1}{N}X^TH_NH_N^TX\ =frac{1}{N}X^TH_NH_NX=frac{1}{N}X^THX S=N1i=1N(xix)(xix)T=N1(x1x,x2x,,xNx)(x1x,x2x,,xNx)T=N1(XTN1XTIN1IN1T)(XTN1XTIN1IN1T)T=N1XT(ENN1IN1I1N)(ENN1IN1I1N)TX=N1XTHNHNTX=N1XTHNHNX=N1XTHX
    这个式子利用了中心矩阵H的对称性,这也是一个投影矩阵。

线性降维-主成分分析PCA

损失函数

主成分分析中,我们的基本型想法是将所有数据投影到一个子空间中,从而达到降维的目标,为了寻找这个子空间,我们基本想法是:

  1. 所有数据在子空间中更为分散
  2. 损失的信息最小,即:在补空间的分量少
    原来的数据很有可能各个维度之间是相关的,于是我们希望找到一组p个新的线性无关的单位基 μ i mu_i μi,降维就是取其中的q个基。于是对于一个样本 x i x_i xi,经过这个坐标变换后:
    x i ^ = ∑ i = 1 p ( u i T x i ) u i = ∑ i = 1 q ( u i T x i ) u i + ∑ i = q + 1 p ( u i T x i ) u i hat{x_i}=sumlimits_{i=1}^p(u_i^Tx_i)u_i=sumlimits_{i=1}^q(u_i^Tx_i)u_i+sumlimits_{i=q+1}^p(u_i^Tx_i)u_i xi^=i=1p(uiTxi)ui=i=1q(uiTxi)ui+i=q+1p(uiTxi)ui
    对于数据集来说,我们首先将其中心化然后再去上面的式子的第一项,并使用其系数的平方平均作为损失函数并最大化:
    J = 1 N ∑ i = 1 N ∑ j = 1 q ( ( x i − x ‾ ) T u j ) 2 = ∑ j = 1 q u j T S u j   ,   s . t .   u j T u j = 1 J=frac{1}{N}sumlimits_{i=1}^Nsumlimits_{j=1}^q((x_i-overline{x})^Tu_j)^2\ =sumlimits_{j=1}^qu_j^TSu_j , s.t. u_j^Tu_j=1 J=N1i=1Nj=1q((xix)Tuj)2=j=1qujTSuj , s.t. ujTuj=1
    由于每个基都是线性无关的,于是每一个 μ j mu_j μj的求解可以分别进行,使用拉个朗日乘子法:
    a r g m a x u j L ( u j , λ ) = a r g m a x u j u j T S u j + λ ( 1 − u j T u j ) mathop{argmax}_{u_j}L(u_j,lambda)=mathop{argmax}_{u_j}u_j^TSu_j+lambda(1-u_j^Tu_j) argmaxujL(uj,λ)=argmaxujujTSuj+λ(1ujTuj)
    于是:
    S μ j = λ μ j Smu_j=lambdamu_j Sμj=λμj
    可见,我们需要的基就是协方差矩阵的特征向量。损失函数最大取在本征值前q个最大值。

SVD与PCoA

下面使用实际训练时常常使用的SVD直接求得这个q个本征矢。
对中心化后的数据集进行奇异值分解:
H X = U Σ V T , U T U = E N , V T V = E p , Σ : N × P HX=USigma{V^T},U^TU=E_N,V^TV=E_p,Sigma:Ntimes{P} HX=UΣVT,UTU=EN,VTV=Ep,Σ:N×P
于是:
S = 1 N X T H X = 1 N X T H T H X = 1 N V Σ T Σ V T S=frac{1}{N}X^THX=frac{1}{N}X^TH^THX=frac{1}{N}VSigma^TSigma{V^T} S=N1XTHX=N1XTHTHX=N1VΣTΣVT
因此,我们直接对中心化后的数据集进行SVD,就可以得到特征值和特征向量V,在新坐标系中的坐标就是:
H X . V HX.V HX.V
由上面的推导,我们也可以得到另一种方法PCoA主坐标分析,定义并进行特征值分解:
T = H X X T H = U Σ Σ T U T T=HXX^TH=USigmaSigma^TU^T T=HXXTH=UΣΣTUT
由于:
T U Σ = U Σ ( Σ T Σ ) TUSigma=USigma(Sigma^TSigma) TUΣ=UΣ(ΣTΣ)
于是可以直接得到坐标。这两种方法都可以得到主成分,但是由于方差矩阵是 p × p ptimes{p} p×p的,而T是 N × N Ntimes{N} N×N的,所以对样本量较少的时候可以采用PCoA的方法。

p-PCA

下面从概率的角度对PCA进行分析,概率方法也叫p-PCA。我们使用线性模型,类似之前LDA,我们选定一个方向,对原数据 x ∈ R p xinmathbb{R}^p xRp ,降维后的数据为 z ∈ R q , q < p zinmathbb{R}^q,q<p zRq,q<p。降维通过一个矩阵变换(投影)进行:
z ∼ N ( O q 1 , I q q ) x = W z + μ + ε ε ∼ N ( 0 , σ 2 I p p ) zsimmathcal{N}(mathbb{O}_{q1},mathbb{I}_{qq})\ x=Wz+mu+varepsilon\ varepsilonsimmathcal{N}(0,sigma^2mathbb{I}_{pp}) zN(Oq1,Iqq)x=Wz+μ+εεN(0,σ2Ipp)
对于这个模型,我们可以使用期望-最大(EM)的算法进行学习,在进行推断的时候需要求得 p ( z ∣ x ) p(z|x) p(zx),推断的求解过程和线性高斯模型类型。
p ( z ∣ x ) = p ( x ∣ z ) p ( z ) p ( x ) E [ x ] = E [ W z + μ + ε ] = μ V a r [ x ] = W W T + σ 2 I p p ⟹ p ( z ∣ x ) = N ( W T ( W W T + σ 2 I ) − 1 ( x − μ ) , I − W T ( W W T + σ 2 I ) − 1 W ) p(z|x)=frac{p(x|z)p(z)}{p(x)}\ mathbb{E}[x]=mathbb{E}[Wz+mu+varepsilon]=mu\ Var[x]=WW^T+sigma^2mathbb{I}_{pp}\ Longrightarrow p(z|x)=mathcal{N}(W^T(WW^T+sigma^2mathbb{I})^{-1}(x-mu),mathbb{I}-W^T(WW^T+sigma^2mathbb{I})^{-1}W) p(zx)=p(x)p(xz)p(z)E[x]=E[Wz+μ+ε]=μVar[x]=WWT+σ2Ippp(zx)=N(WT(WWT+σ2I)1(xμ),IWT(WWT+σ2I)1W)

小结

在PCA中,我们只要直接对数据矩阵进行中心化然后求奇异值分解或者对数据的协方差矩阵进行分解就可以得到其主要维度。非线性学习的方法如流形学习将投影面从平面改为超曲面。

最后

以上就是外向野狼为你收集整理的机器学习——降维的全部内容,希望文章能够帮你解决机器学习——降维所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部