zoukankan      html  css  js  c++  java
  • Jordan Lecture Note-9: Principal Components Analysis (PCA).

    Principal Components Analysis

    (一)引入PCA

       当我们对某个系统或指标进行研究时往往会发现,影响这些系统和指标的因素或变量的数量非常的多。多变量无疑会为科学研究带来丰富的信息,但也会在一定程度上增加工作的难度,而通常变量之间又具有一定的相关性,这又增加了问题分析的复杂度。如果分别分析每个变量,那么分析又不够综合,而盲目的减少变量又会损失很多有用的信息。因而我们自然而然想到能否用较少的新变量去代替原来较多的旧变量(即降维),同时使这些新变量又能够尽可能保留原来旧变量所反映的信息,另外又能保证这些新变量之间是相互无关的。

        而PCA就是在这样的一个背景下用于解决上述问题的一种方法,其思想就是将多维的旧变量转换成低维的新变量,使新变量之间只包含旧变量中最主要的成分。那么什么样的成分才是最重要的呢?我们知道,当一个变量只取一个数值时,这个变量所提供的信息量非常有限,而当这个变量取一系列不同的数值时,我们可以从中读出最大值,最小值,平均值等信息。当变量的变异性越大时,说明它对各种场景的“遍历性”越强,提供的信息就更加充分,信息量就越大。较不严格的说:当一个变量中的某个成分的变异性为0,即其方差为0,那么我们就可以认为该变量提供的信息量为0。相反,方差越大时我们认为其包含的信息量越大。

    (二)寻找变换

        在n维空间中,任何一个n维向量都可表示成该空间下一组基的线性组合,而其中的系数就是该向量在这组基下的坐标。同时,我们还可以寻找另外一组基来表示该向量,就得到一个新坐标。而从旧基到新基的坐标变换是通过变换矩阵得到的。假设我们有$m$个$n$维的坐标向量所组成的矩阵$mathbf{X}$,通过变化矩阵$mathbf{P}$将$mathbf{X}$变换成新坐标矩阵$mathbf{Y}$,即$mathbf{P}mathbf{X}=mathbf{Y}$,其中$mathbf{X},mathbf{Y}$为$n imes m$,$mathbf{P}$为$n imes n$。

        现在我们的目标就是寻找$mathbf{P}$,使变量$mathbf{X}=(x_1,x_2,cdots,x_m)$变换成新的坐标$mathbf{Y}=(y_1,y_2,cdots,y_m)$使$y_i$的方差尽可能的大,$y_i,y_j (i eq j)$之间的协方差为0,即$y_i,y_j$之间相互无关。

        首先,我们对数据$mathbf{X}$作一下中心化处理,即将$x_i$减去其平均值$ar{x}$,使$x_i$的均值为0。以下我们都假设$x_i$的均值为0。记矩阵$mathbf{X}$为如下形式:

    egin{equation}mathbf{X}=left[egin{array}&X_{11}&X_{12}&cdots&X_{1m}\X_{21}&X_{22}&cdots&X_{2m}\vdots&vdots&cdots&vdots\X_{n1}&X_{n2}&cdots&X_{nm}end{array} ight] riangleqleft[egin{array}&X_{1cdot}\X_{2cdot}\vdots\X_{ncdot}end{array} ight]label{equ:denoteX}end{equation}

    从式子 ef{equ:denoteX}中,我们可以计算各分量的方差:

    egin{align}sigma_1^2&=frac{1}{m}sum_{i=1}^mX_{1i}^2=frac{1}{m}X_{1cdot}X_{1cdot}^prime\&vdots onumber\sigma_n^2&=frac{1}{m}sum_{i=1}^mX_{ni}^2=frac{1}{m}X_{ncdot} X_{ncdot}^primeend{align}

    以及第$i$个分量与第$j$个分量的协方差:

    egin{align}sigma_{ij}^2=frac{1}{m}sum_{k=1}^mX_{ik}X_{jk}=frac{1}{m}X_{icdot}X_{icdot}^primeend{align}

    所以$n$维变量的协方差矩阵可写成如下形式:

    egin{align*}&left[egin{array}&sigma_1^2&sigma_{12}^2&cdots&sigma_{1n}^2\sigma_{21}^2&sigma_2^2&cdots&sigma_{2n}^2\vdots &vdots &cdots&vdots\sigma_{n1}^2&sigma_{n2}^2&cdots&sigma_n^2end{array} ight]=frac{1}{m}left[egin{array}&X_{1cdot}X_{1cdot}^prime&cdots&X_{1cdot}X_{ncdot}^prime\vdots&cdots\X_{ncdot}X_{1cdot}^prime&cdots&X_{ncdot}X_{ncdot}^primeend{array} ight]\=&frac{1}{m}mathbf{X}mathbf{X}^prime riangleqmathbf{C_X}end{align*}

    同理,新变量$mathbf{Y}$的协方差矩阵记为$mathbf{C_Y}=frac{1}{m}mathbf{Y}mathbf{Y}^prime$。

        我们的目标是求矩阵$mathbf{P}:mathbf{P}mathbf{X}=mathbf{Y}$使$mathbf{C_Y}=left[egin{array}&lambda_1\ &lambda_2 \ &&ddots\&&&lambda_nend{array} ight]$为对角矩阵,其中非对角线为新变量之间的协方差(说明新变量之间相互无关),对角线表示新变量的方差$lambda_1geqlambda_2geqcdotsgeqlambda_n$,这样新变量的第一个分量方差最大,即信息量最大,以此类推。

    egin{equation}mathbf{C_Y}=frac{1}{m}mathbf{Y}mathbf{Y}^prime=frac{1}{m}mathbf{P}mathbf{X}mathbf{X}^primemathbf{P}^prime=mathbf{P}mathbf{C_X}mathbf{P}^prime=Lambda=left[egin{array}&lambda_1\&lambda_2\&&ddots\&&&lambda_nend{array} ight]end{equation}

    由于$mathbf{C_X}$是对称矩阵,所以根据线性代数的知识,我们可以知道,存在一个正定矩阵$mathbf{Q}$使$mathbf{Q}mathbf{C_X}mathbf{Q}^prime=Lambda=left[egin{array}&lambda_1\&lambda_2\&&ddots\&&&lambda_nend{array} ight]$,其中$lambda_1geqlambda_2geqcdotsgeqlambda_n$为$mathbf{C_X}$的特征值,$mathbf{Q}=(q_1,q_2,cdots,q_n)$为对应的特征向量。故我们通过此方法可以得到$mathbf{P}=mathbf{Q}=(q_1,q_2,cdots,q_n)$其中$q_1$为$mathbf{C_X}$的最大特征值对应的特征向量,$q_1$称为最主要成分,$q_k$称为第$k$主要成分。

        回到我们原先的问题,我们要将$n$维的变量降为$k$维的新变量,同时使新变量的各成分方差最大,协方差为0。那么我们可以取$mathbf{P}$的前$k$个向量$mathbf{P^{(k)}}=(p_1,p_2,cdots,p_k)$,然后将$x_i$投影到$p_1,p_2,cdots,p_k$上得到新坐标$y_i$,即

    $$y_i=(p_1x_i^prime,cdots,p_kx_i^prime)=x_i^primemathbf{P^{(k)}}$$

    将其写成矩阵形式:

    $$mathbf{Y}_{k imes m}=(y_1,y_2,cdots,y_m)=(x_1^primemathbf{P^{(k)}},cdots,x_m^primemathbf{P^{(k)}})=mathbf{P^{(k)}}^primemathbf{X}$$.

    (三)Singular Value Decomposition (SVD)

        设$mathbf{X}$为任意$n imes m$矩阵,$mathbf{X}^primemathbf{X}$是秩为$r(rleq m)$的对称矩阵,${hat{v}_1,hat{v}_2,cdots,hat{v}_r}$是$mathbf{X}^primemathbf{X}$的$m imes 1$正交特征向量,对应的特征值为$(lambda_1,lambda_2,cdots,lambda_r)$,于是有:$(mathbf{X}^primemathbf{X})hat{v}_i=lambda_ihat{v}_i$。令$sigma_i=sqrt{lambda_i},u_i=frac{1}{sigma_i}mathbf{X}hat{v}_i$,则${hat{u}_1,hat{u}_2,cdots,hat{u}_r}$是$n imes 1$正交向量,即$hat{u}_icdothat{u}_j=delta_{ij}=left{egin{array}&1&i=j\0&i eq jend{array} ight.$,$|mathbf{X}hat{v}_i|=sigma_i$。

    我们构造一个新的对角矩阵$mathbf{Sigma}=left[egin{array}&sigma_1\&sigma_2\&&ddots\&&&sigma_rend{array} ight]$,令$mathbf{V}=(hat{v}_1,cdots,hat{v}_r),mathbf{U}=(hat{u}_1,cdots,hat{u}_r)$。

    由$hat{u}_i=frac{1}{sigma_i}mathbf{X}hat{v}_iLongrightarrow sigma_ihat{u}_i=mathbf{X}hat{v}_iLongrightarrow mathbf{U}mathbf{Sigma}=mathbf{X}mathbf{V}Longrightarrow mathbf{U}mathbf{Sigma}mathbf{V}^prime=mathbf{X}mathbf{V}mathbf{V}^prime=mathbf{X}$,即任意一个$n imes m$矩阵都可以分解成一个列正交矩阵$mathbf{U}$,对角矩阵$mathbf{Sigma}$和行正交矩阵的乘积。其中$mathbf{V}$是$mathbf{X}mathbf{X}^prime$的正交矩阵,称为右奇异特征向量,$mathbf{U}$称为左奇异特征向量。

    (四)PCA与SVD

        我们可以利用SVD计算PCA的主成分。假设我们有$n$维变量组成的数据$mathbf{X}_{n imes m}=(x_1,x_2,cdots,x_m)$,令$mathbf{Y}=frac{1}{sqrt{m}}mathbf{X}^prime$,则

    $$mathbf{Y}^primemathbf{Y}=(frac{1}{sqrt{m}}mathbf{X}^prime)^prime(frac{1}{sqrt{m}}mathbf{X}^prime)=frac{1}{m}mathbf{X}mathbf{X}^prime=mathbf{C_X}$$

    即变量的协方差矩阵。而PCA中的主成分就是好协方差矩阵中的前$k$个最大特征值对应的特征向量。对$mathbf{Y}$进行SVD,则$mathbf{Y}=mathbf{U}mathbf{Sigma}mathbf{V}^prime$,其中$mathbf{V}$是$mathbf{Y}^primemathbf{Y}$的前$k$个最大特征值对应的特征向量,故$mathbf{V}$是$mathbf{X}$的主成分。

    (五)总结

    PCA过程:

    1. 将已知数据组织成一个$n imes m$矩阵$mathbf{X}$,其中$n$为变量维数,$m$为数据个数。
    2. 将$mathbf{X}$的每一行都减去该行的平均值,使变量的均值为0。
    3. 构造$mathbf{Y}=frac{1}{sqrt{m}}mathbf{X}^prime$,对$mathbf{Y}$进行SVD的主成分$mathbf{V}$。
    4. 将旧变量投影到$mathbf{V}$中得到新变量。

     

  • 相关阅读:
    zoj3814
    cf249D
    codeforces 461C
    uva 11584
    Codeforces Round #247 (Div. 2) C D
    AOAPC I: Beginning Algorithm Contests (Rujia Liu) Volume 6. Mathematical Concepts and Methods
    AOAPC I: Beginning Algorithm Contests -- Training Guide (Rujia Liu) Chapter 3. Data Structures Fundamental Data Structures
    Codeforces Round #257 (Div. 2)
    DAY 16 PYTHON入门
    DAY 15 PYTHON入门
  • 原文地址:https://www.cnblogs.com/boostable/p/principal_components_analysis.html
Copyright © 2011-2022 走看看