4

【PCA】理论与实现

 3 years ago
source link: https://www.guofei.site/2017/10/12/pca.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

降维

降维的必要性

  1. 多重共线性–预测变量之间相互关联。多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯。

  2. 高维空间本身具有稀疏性。一维正态分布有68%的值落于正负标准差之间,而在十维空间上只有0.02%。

  3. 过多的变量会妨碍查找规律的建立。

  4. 仅在变量层面上分析可能会忽略变量之间的潜在联系。例如几个预测变量可能落入仅反映数据某一方面特征的一个组内。

降维的目的:

  1. 减少预测变量的个数

  2. 确保这些变量是相互独立的

  3. 提供一个框架来解释结果

降维的方法有:主成分分析、因子分析、用户自定义复合等。

问题背景

PCA(Principal Component Analysis)不仅仅是对高维数据进行降维,更重要的是经过降维去除了噪声,发现了数据中的模式。

PCA把原先的n个特征用数目更少的m个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的m个特征互不相关。从旧特征到新特征的映射捕获数据中的固有变异性。

PCA在有噪声的场景下很好用。

数学表达

下面是一组数据:

X1 X2 … Xp sample1 XX XX … XX sample2 XX XX … XX sample3 XX XX … XX … … … … …

举个例子:
如果对于所有的sample,其X1和X2的值都相等,就意味着其中一个可以被干掉,从而降低维度。
为什么要降低维度呢? 目的有很多,其中之一是避免“维度灾难”。
所谓维度灾难,指的是维度很高的情况下,模型更有可能通过检验,但模型的预测能力实际上会变得很弱,多元回归就是典型代表。

当然,数据分析中不大可能出现两个字段完全相等的情况,但会出现多个字段之间有 多重相关性 的情况,那么就需要使用主成分分析法了

模型的数学形式

主成分分析(PCA)是一种降维方法

多个变量之间往往存在一定的相关性,人们希望通过用 线性组合 的方式,提取信息,从而降低维度

那么,我们想做这件事: ⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪Y1=l11X1+l12X2+...+l1pXpY2=l21X1+l22X2+...+l2pXp...Yp=lp1X1+lp2X2+...+lppXp{Y1=l11X1+l12X2+...+l1pXpY2=l21X1+l22X2+...+l2pXp...Yp=lp1X1+lp2X2+...+lppXp

其中, ⎧⎩⎨⎪⎪⎪⎪Var(Y1)≥Var(Y2)≥...Var(Yp)≥0COV(Yi,Yj)=0l2i1+l2i2+...+l2ip=1i≠ji=1,2,...p{Var(Y1)≥Var(Y2)≥...Var(Yp)≥0COV(Yi,Yj)=0i≠jli12+li22+...+lip2=1i=1,2,...p

解释一下上面的限制条件:

  1. 这是为了提取后的因子重要程度排序:Var(Y1)≥Var(Y2)≥…Var(Yp)≥0Var(Y1)≥Var(Y2)≥…Var(Yp)≥0
  2. 这是为了提取后的因子不再有相关性:COV(Yi,Yj)=0COV(Yi,Yj)=0
  3. 为了保持信息不丢失

模型的矩阵形式

以矩阵形式表示:

X=(X1,X2,…Xp)′X=(X1,X2,…Xp)′
Y=T′XY=T′X

模型的解

这里先写出模型的解,然后写出这个解的证明过程
COV(X)COV(X)是协方差矩阵,这是一个p×p矩阵,而且是一个实对称阵,
对于p×p实对称矩阵,存在p个正交的特征向量
按照特征值λiλi从大到小排序,对应特征向量记为e1,e2,…epe1,e2,…ep(列向量)

模型如下:
⎛⎝⎜⎜⎜Y1Y2...Yp⎞⎠⎟⎟⎟=⎛⎝⎜⎜⎜⎜e′1e′2...e′p⎞⎠⎟⎟⎟⎟⎛⎝⎜⎜⎜X1X2...Xp⎞⎠⎟⎟⎟(Y1Y2...Yp)=(e1′e2′...ep′)(X1X2...Xp)

解的证明

引理:(很重要,后面反复用到)
COV(Yi,Yj)=COV(e′iX,e′jX)=e′iCOV(X)ejCOV(Yi,Yj)=COV(ei′X,ej′X)=ei′COV(X)ej

因为COV(X)COV(X)是实对称矩阵,ei,ej(i≠j)ei,ej(i≠j)是特征向量并且正交,所以:

COV(Yi,Yj)={0λii≠ji=jCOV(Yi,Yj)={0i≠jλii=j

(证明完毕)

解的性质

性质1

Cov(Y)Cov(Y)是对角阵,对角线上的元素是Cov(x)Cov(x)的特征值

性质2

∑Var(Yi)=∑Var(Xi)∑Var(Yi)=∑Var(Xi)

性质3

Cov(Xi,Yj)=Cov(EiXi,e′jX)=EiCov(X)ej=λieijCov(Xi,Yj)=Cov(EiXi,ej′X)=EiCov(X)ej=λieij
ρ(Xi,Yj)=Cov(Xi,Yj)DXiDYj−−−−−−−√=λieijλiσii−−−−√ρ(Xi,Yj)=Cov(Xi,Yj)DXiDYj=λieijλiσii
这个相关系数叫做 因子载荷量

贡献率

λk/∑λλk/∑λ叫做 贡献率

贡献率的cumsum叫做 累计贡献率

Python实现

大图见于这里

大图见于这里

更一般化的推导

我们希望找到一种降维的编码方案,这种方案记为函数 ff,对应一个还原方案,记为函数 gg

  • 这套编码方案首先要合理,也就是 x≈g(f(x))x≈g(f(x))
  • 进一步,希望找到一组编码 c=f(x)c=f(x),使得 xx 和 g(c)g(c) 尽量接近
  • 我们用 L2 范数来定义“接近”,问题转化为一个最优化问题 c^\star =\argmin\limits_c \mid\mid x-g(c) \mid\mid_2c^\star =\argmin\limits_c \mid\mid x-g(c) \mid\mid_2

继续添加一些前提条件:

  • 把映射限定为线性映射,即 g(c)=Dcg(c)=Dc
  • 最优化有无穷多解,因为按比例扩大D,都可以满足条件。所以继续限定 D 是正交的。

接下来就是推导过程,只写思路

  • 把最优化问题化简
  • 用迹的一些定理转化一下。
  • 优化问题最终转化到特征分解。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK