引用自:
1. http://blog.jobbole.com/86905/
2. 应用统计学与R语言实现学习笔记(十二)——主成分分析
3. 主成分分析入门
1. 主成分分析基本思想
研究一个问题,必须考虑许多指标,这些指标能从不同的侧面反映我们所研究的对象的特征,但在某种程度上存在信息的重叠,具有一定的相关性。这种信息的重叠有时甚至会抹杀事物的真正特征与内在规律。
主成分分析是利用降维的思想, 在力求数据信息丢失最少的原则下,对高维的变量空间降维,即在众多变量中找出少数几个综合指标(原始变量的线性组合),并且这几个综合指标将尽可能多地保留原来指标变异方面的信息,且这些综合指标互不相关。这些综合指标就称为主成分。主成分的数目少于原始变量的数目。
主成分分析是一种数学变换方法,它把给定的一组变量通过线性变换转换为一组不相关的变量。在这种变换中,保持变量的总方差不变,同时,使第一主成分具有最大方差,第二主成分具有次大方差,依此类推。
主成分与原始变量间的关系
(1)每一个主成分是原始变量的线性组合。
(2)主成分的数目少于原始变量的数目。
(3)主成分保留了原始变量的大多数变异信息。
(4)各主成分间互不相关。
2. 几何解释
假定只有二维,即只有两个变量,由横坐标和纵坐标所代表;每个观测值都有相应于这两个坐标轴的坐标值。如果这些数据形成一个椭圆形状的点阵(这在二维正态的假定下是可能的)该椭圆有一个长轴和一个短轴。在短轴方向上数据变化较少。在极端的情况,短轴如退化成一点,长轴的方向可以完全解释这些点的变化,由二维到一维的降维就自然完成了。
由图可以看出这些样本点无论是沿着xl轴方向或x2轴方向都具有较大的离散性,其离散的程度可以分别用观测变量xl的方差和x2的方差定量地表示。显然,如果只考虑x1和x2中的任何一个,那么包含在原始数据中的经济信息将会有较大的损失。
当坐标轴和椭圆的长短轴平行,那么代表长轴的变量就描述了数据的主要变化,而代表短轴的变量就描述了数据的次要变化。但是,坐标轴通常并不和椭圆的长短轴平行。因此,需要寻找椭圆的长短轴,并进行变换,使得新变量和椭圆的长短轴平行。如果长轴变量代表了数据包含的大部分信息,就用该变量代替原先的两个变量(舍去次要的一维),降维就完成了。椭圆的长短轴相差得越大,降维也越有道理。
3. 数学模型
1. 二维情况
将xl轴和x2轴先平移,再同时按逆时针方向旋转θθ角度,得到新坐标轴Fl和F2。Fl和F2是两个新变量。根据旋转变换的公式:
旋转变换的目的是为了使得n个样品点在F1轴方向上的离散程度最大,即F1的方差最大。变量Fl代表了原始数据的绝大部分信息,在研究某经济问题时,即使不考虑变量F2也无损大局。经过上述旋转变换原始数据的大部分信息集中到Fl轴上,对数据中包含的信息起到了浓缩作用。
F1, F2除了可以对包含在Xl,X2中的信息起着浓缩作用之外,还具有不相关的性质,这就使得在研究复杂的问题时避免了信息重叠所带来的虚假性。二维平面上的个点的方差大部分都归结在F1轴上,而F2轴上的方差很小。 F1和F2称为原始变量x1和x2的综合变量。
2. 多维情况
X1 X2 ... Xp共计p个变量,现在将这p个变量线性组合组成新的变量F1 F2 ... Fk ,其中k<p。按照保留主要信息量的原则充分反映原指标的信息,并且相互独立。
由讨论多个指标降为少数几个综合指标的过程在数学上就叫做降维。主成分分析通常的做法是,寻求原指标的线性组合Fi。
4. 主成分的推导
第一主成分
第二主成分
5. 主成分性质
- 方差为所有特征根之和:
说明主成分分析把p个随机变量的总方差分解成为p个不相关的随机变量的方差之和。协方差矩阵ΣΣ的对角线上的元素之和等于特征根之和。
- 精度分析
1)贡献率:第i个主成分的方差在全部方差中所占比重lambda(i)/sum(lambda(i)),称为贡献率,体现这个主成分的综合能力的大小,即反映原来p个指标的信息的多少。
2)累积贡献率:前k个主成分共有多大的综合能力,用这个k个主成分的方差和在全部方差中所占比重
[lambda(1)+lambda(2)+...+lambda(k)]/sum(lambda(i))
来描述,称为累积贡献率。
我们进行主成分分析的目的之一是希望用尽可能少的主成分F1,F2,⋯,Fk(k≤p)F1,F2,⋯,Fk(k≤p)代替原来的p个指标。到底应该选择多少个主成分,在实际工作中,所采用主成分个数的多少取决于能够反映原来变量85%以上的信息量为依据,即当累积贡献率≥85%时的主成分的个数就足够了。最常见的情况是主成分为2到3个。
6. 计算实例
10个样例,每个样例有2个特征:降维
第一步:分别求 x 和 y 的平均值,然后对所有的样例都减去对应的均值
这里求得 x 的均值为 1.81 , y 的均值为 1.91,减去均值后得到数据如下:
第二步:在对特征进行方差归一化,目的是让每个特征的权重都一样,但是由于我们的数据的值都比较接近,所以归一化这步可以忽略不做
第三步:计算协方差矩阵,计算协方差矩阵的特征值和特征向量
第四步:将特征值从大到小进行排序,选择其中最大的 k 个,然后将其对应的 k 个特征向量分别作为列向量组成特征矩阵
这里的特征值只有两个,我们选择最大的那个,为: 1.28402771 ,其对应的特征向量为:
注意:matlab 的 eig 函数求解协方差矩阵的时候,返回的特征值是一个特征值分布在对角线的对角矩阵,第 i 个特征值对应于第 i 列的特征向量
第五步: 将样本点投影到选取的特征向量上
假设样本列数为 m ,特征数为 n ,减去均值后的样本矩阵为 DataAdjust(mn),协方差矩阵为 nn ,选取 k 个特征向量组成后的矩阵为 EigenVectors(nk),则投影后的数据 FinalData 为:
FinalData (mk) = DataAdjust(mn) X EigenVectors(nk)
得到的结果是:
这样,我们就将 n 维特征降成了 k 维,这 k 维就是原始特征在 k 维上的投影。