美文网首页
预处理(一):主成分分析PCA

预处理(一):主成分分析PCA

作者: 阿圆的一亩三分地 | 来源:发表于2019-01-23 15:52 被阅读47次

    主成分分析(PCA)

    在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错误的结论。

    因此需要找到一个合理的方法,在减少需要分析的指标的同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量间存在一定的相关关系,因此有可能用较少的综合指标,分别综合存在于各变量中的各类信息。主成分分析与因子分析就属于这类降维的方法。

    问题描述

    下表是某些学生的语文、数学、物理、化学成绩统计:

    学生编号 语文 数学 物理 化学
    1 90 140 99 100
    2 90 97 88 92
    3 90 110 79 83
    …… …… …… …… ……

    首先,假设这些科目成绩不相关,也就是说某一科目考多少分与其他科目没有关系。那么一眼就能看出来,数学、物理、化学这三门课的成绩构成了这组数据的主成分(很显然,数学作为第一主成分,因为数学成绩拉的最开)。下面再看一组学生的数学、物理、化学、语文、历史、英语成绩统计:

    学生编号 数学 物理 化学 语文 历史 英语
    1 65 61 72 84 81 79
    2 77 77 76 64 70 55
    3 67 63 49 65 67 57
    4 80 69 75 74 74 63
    5 74 70 80 84 82 74
    6 78 84 75 62 72 64
    7 66 71 67 52 65 57
    8 77 71 57 72 86 71
    9 83 100 79 41 67 50
    …… …… …… …… …… …… ……

    数据太多了,以至于看起来有些凌乱!也就是说,无法直接看出这组数据的主成分,因为在坐标系下这组数据分布的很散乱。

    在另一个例子中,假设数据在相应坐标空间中表示出来如下图所示,也许你就能换一个观察角度找出主成分。


    6a3aa9a2e690fa67aec528dfc2d8595.png

    但是,对于更高维的数据,能想象其分布吗?就算能描述分布,如何精确地找到这些主成分的轴?如何衡量你提取的主成分到底占了整个数据的多少信息?所以,我们就要用到主成分分析的处理方法。

    数据降维

    假设三维空间中有一系列点,这些点分布在一个过原点的斜面上,如果你用自然坐标系x,y,z这三个轴来表示这组数据的话,需要使用三个维度,而事实上,这些点的分布仅仅是在一个二维的平面上。如果我们把坐标轴旋转一下, 使数据所在的平面与x^`, y^`平面重合,不就只需要使用两个维度了吗。这样数据的维数就降下来了。究其本质,如果把这些数据按行存储成一个矩阵,那么这个矩阵的秩为2。这些数据之间是具有相关性的,这些数据的最大线性无关组只包含两个向量。(一般来讲n维空间中的n个点一定能在一个n-1维子空间中分析)

    将上面的数据降维之后,我们可以认为并没有损失信息,因为所有的数据在平面之外的第三个维度的分量都是0。现在假设z^`轴有一个轻微的扰动,那么我们仍然用上述的二维来表示这些数据,因为我们可以认为这两个轴包含了数据的主成分。而且这些信息对于我们的分析已经足够了,z^`轴的扰动很有可能是噪声,并且具有很大的相关性。所以,综合考虑,可以认为数据在x^`, y^`上的投影构成数据的主成分。

    PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主成分,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。

    PCA推导

    357d394d5b6639f12f25e175372ad7b.png

    首先对于二维数据,如上图所示,每个观测点都是二维平面的一个点。如果这些数据形成一个椭圆形的点阵,这个椭圆有一个长轴和一个短轴。在短轴方向,数据的变化很小;在极端的情况下,如果短轴退化成了一个点,那么只有在长轴的方向才能解释这些点的变化。这样二维就降维一维了。

    显然,上图中u_1就是主成分方向,二维空间中与u_1正交的方向,就是u_2方向。则数据在u_1轴的离散程度最大(方差最大),数据在u_1上的投影代表了原始数据的绝大部分信息,即使不考虑u2,信息损失也不多。而且,u1、u2不相关。只考虑u1时,二维降为一维。

    椭圆的长短轴相差得越大,降维也越有道理。

    1、最大方差理论

    在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。如前面的图,样本在u1上的投影方差较大,在u2上的投影方差较小,那么可认为u2上的投影是由噪声引起的。

    因此我们认为,最好的k维特征是将n维样本点转换为k维后,每一维上的样本方差都很大。

    2、最小二乘法

    使用最小二乘法来确定各个主轴的方向。

    对于一组给定的数据\{\vec z_1, \vec z_2, \vec z_3, \cdots, \vec z_n\}

    其数据的中心为:

    \vec \mu = \frac{1}{n} \sum_{i = 1}^{n} \vec z_i

    数据中心化后为:

    \{\vec x_1, \vec x_2, \cdots, \vec x_n\} = \{\vec z_1 - \vec \mu, \vec z_2 - \vec \mu,\cdots, \vec z_n - \vec \mu \}

    设中心化后的数据在第一主轴u_1方向上分布最为离散,也就是说在u1方向上的投影的绝对值之和最大(也可以说方差最大),只需要求出u_1方向,设u_1为单位向量。

    也就是最大化式:

    \frac{1}{n} \sum_{i=1}^n(\vec x_i \cdot \vec u_i)^2 = \frac{1}{n} \sum_{i=1}^n(x_i^T u_1)^2 = \frac{1}{n} \sum_{i=1}^nu_1^Tx_ix_i^Tu_1 = \frac{1}{n} u_1^T(\sum_{i=1}^nx_ix_i^T)u_1

    令: X = [x_1, x_2, \cdots, x_n]

    上式 = \frac{1}{n} u_1^T XX^Tu_1

    u_1^T XX^Tu_1是一个二次型,我们假设XX^T的某一个特征值为\lambda,对应的特征向量为\xi,那么:

    (XX^T)^T = XX^T

    XX^T\xi = \lambda\xi

    (XX^T\xi)^T\xi = (\lambda\xi)^T\xi

    \xi^TXX^T\xi = \lambda\xi^T\xi

    \xi^TXX^T\xi = (X^T\xi)^T(X^T\xi) = \left \| X^T\xi \right \|^2 = \lambda\xi^T\xi = \lambda \left \| \xi \right\|^2

    显然,\frac{1}{n} u_1^T XX^Tu_1是一个半正定的二次型,且有最大值。

    求解最大值和最大值点

    目标函数可以表示成映射后的向量的二范数平方:

    u_1^TXX^Tu_1^T = (X^Tu_1)^T(X^Tu_1) = <X^Tu_1^T, X^Tu_1> = (\frac{|| X^Tu_1||_2^2}{||u_1||_2})^2

    所以最大化目标函数的基本问题就转化成了:对于一个矩阵,它对一个向量做变换,变换前后的向量的模长伸缩尺度如何才能最大?我们有矩阵代数中的定理知,向量经矩阵映射前后的向量长度之比的最大值就是这个矩阵的最大奇异值,即:

    \frac{\left\|Ax\right\|}{\left\| x\right\|} \leq \sigma_1(A)

    X^TX最大特征值对应的特征向量的方向就是第一个主成分u_1的方向。

    主成分所占整个信息的百分比可用下式计算:

    \sqrt{\frac{\sum_{i=1}^k\sigma_i^2}{\sum_{i=1}^n\sigma_i^2}}

    分母为所有奇异值的平方和,分子为前k个奇异值的平方和。

    PCA实例

    我们假设有如下数据:

    x y
    2.5 2.4
    0.5 0.7
    2.2 2.9
    1.9 2.2
    3.1 3.0
    2.3 2.7
    2 1.6
    1 1.1
    1.5 1.6
    1.1 0.9

    第一步:分别球x,y的平均值:然后对所有的样例,都减去对应的均值。\overline{x} = 1.81\ \ \overline{y} = 1.91

    x - \overline{x} y - \overline{y}
    0.69 0.49
    -1.31 -1.21
    0.39 0.99
    0.09 0.29
    1.29 1.09
    0.49 0.79
    0.19 -0.31
    -0.81 -0.81
    -0.31 -0.31
    -0.71 -1.01

    第二步:求特征协方差矩阵

    cov = \left( \begin{array}{ccc}.616555556 & .615444444 \\.615444444 & .716555556 \end{array}\right)

    第三步:求协方差的特征值和特征向量

    eigenbalues = \left( \begin{array} {ccc} .490833989&1.28402771\end{array}\right)

    eigenvectors = \left(\begin{array}{ccc} -.735178656&-.677873399 \\ .677873399&-.735178656\end{array}\right)

    第四步:将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。

    这里特征值只有两个,我们选择其中最大的那个,这里是1.28402771,对应的特征向量为
    \left( \begin{array} {ccc} .677873399&-.735178656\end{array} \right)

    第五步:将样本点投影到特征向量上, 这样,就将原始样例的n维特征变成了k维,这k维就是原始特征在k维上的投影。

    相关文章

      网友评论

          本文标题:预处理(一):主成分分析PCA

          本文链接:https://www.haomeiwen.com/subject/katsjqtx.html