《主成分分析 ( Principal Component Analysis PCA )》由会员分享,可在线阅读,更多相关《主成分分析 ( Principal Component Analysis PCA )(24页珍藏版)》请在金锄头文库上搜索。
1、主成分分析 ( Principal Component Analysis , PCA )主成分分析 ( Principal Component Analysis , PCA ) 是一种掌握事物主要矛盾的统计分析方法,它可以从多元事 物中解析出主要影响因素,揭示事物的本质,简化复杂的问 题。计算主成分的目的是将高维数据投影到较低维空间。给 定n个变量的m个观察值,形成一个n ! m的数据矩 阵, n 通常比较大。对于一个由多个变量描述的复杂事物, 人们难以认识,那么是否可以抓住事物主要方面进行重点分 析呢?如果事物的主要方面刚好体现在几个主要变量上,我 们只需要将这几个变量分离出来,进行详细分析
2、。但是,在 一般情况下,并不能直接找出这样的关键变量。这时我们可 以用原有变量的线性组合来表示事物的主要方面, PCA 就 是这样一种分析方法。 PCA 主要 用于数据降维,对于 一系列例子的特征组成的多维向量,多维向量里的某些元素 本身没有区分性,比如某个元素在所有的例子中都为 1,或 者与 1 差距不大,那么这个元素本身就没有区分性,用它做 特征来区分,贡献会非常小。所以我们的目的是找那些变化 大的元素,即方差大的那些维,而去除掉那些变化不大的维, 从而使特征留下的都是“精品”,而且计算量也变小了。 对 于一个 k 维的特征来说,相当于它的每一维特征与其他维都 是正交的(相当于在多维坐标系
3、中,坐标轴都是垂直的), 那么我们可以变化这些维的坐标系,从而使这个特征在某些 维上方差大,而在某些维上方差很小。例如,一个 45 度倾 斜的椭圆,在第一坐标系,如果按照 x,y 坐标来投影,这些 点的 x 和 y 的属性很难用于区分他们,因为他们在 x,y 轴上 坐标变化的方差都差不多,我们无法根据这个点的某个x属 性来判断这个点是哪个,而如果将坐标轴旋转,以椭圆长轴 为 x 轴,则椭圆在长轴上的分布比较长,方差大,而在短轴 上的分布短,方差小,所以可以考虑只保留这些点的长轴属 性,来区分椭圆上的点,这样,区分性比x,y轴的方法要好! 所以我们的做法就是求得一个 k 维特征的投影矩阵,这个投
4、 影矩阵可以将特征从高维降到低维。投影矩阵也可以叫做变 换矩阵。新的低维特征必须每个维都正交,特征向量都是正 交的。通过求样本矩阵的协方差矩阵,然后求出协方差矩阵 的特征向量,这些特征向量就可以构成这个投影矩阵了。特 征向量的选择取决于协方差矩阵的特征值的大小。 举一 个例子: 对于一个训练集, 100 个对象模板,特征是 10 维,那么它可以建立一个 100*10 的矩阵,作为样本。求这 个样本的协方差矩阵,得到一个 10*10 的协方差矩阵,然后 求出这个协方差矩阵的特征值和特征向量,应该有 10 个特 征值和特征向量,我们根据特征值的大小,取前四个特征值 所对应的特征向量,构成一个 10
5、*4 的矩阵,这个矩阵就是 我们要求的特征矩阵, 100*10 的样本矩阵乘以这个 10*4 的 特征矩阵,就得到了一个 100*4的新的降维之后的样本矩阵, 每个特征的维数下降了。 当给定一个测试的特征集之 后,比如1*10维的特征,乘以上面得到的 10*4的特征矩阵, 便可以得到一个 1*4 的特征,用这个特征去分类。 所以 做 PCA 实际上是求得这个投影矩阵,用高维的特征乘以这个 投影矩阵,便可以将高维特征的维数下降到指定的维数。 PCA 的目标是寻找 r ( r<n )个新变量,使它们反映事 物的主要特征,压缩原有数据矩阵的规模。每个新变量是原 有变量的线性组合,体现原有变量的
6、综合效果,具有一定的 实际含义。这 r 个新变量称为“主成分”,它们可以在很大 程度上反映原来 n 个变量的影响,并且这些新变量是互不 相关的,也是正交的。通过主成分分析,压缩数据空间,将 多元数据的特征在低维空间里直观地表示出来。例如,将多 个时间点、多个实验条件下的基因表达谱数据( N 维)表 示为 3 维空间中的一个点,即将数据的维数从 RN 降到 R3 。 在进行基因表达数据分析时,一个重要问题是确 定每个实验数据是否是独立的,如果每次实验数据之间不是 独立的,则会影响基因表达数据分析结果的准确性。对于利 用基因芯片所检测到的基因表达数据,如果用 PCA 方法进 行分析,可以将各个基因
7、作为变量,也可以将实验条件作为 变量。当将基因作为变量时,通过分析确定一组“主要基因 元素”,它们能够很好地说明基因的特征,解释实验现象;当将实验条件作为变量时,通过分析确定一组“主要实验因 素”,它们能够很好地刻画实验条件的特征,解释基因的行 为。下面着重考虑以实验条件作为变量的 PCA 分析方法。 假设将数据的维数从 R N 降到 R 3 ,具体的 PCA 分析步 骤如下: (1) 第一步计算矩阵 X 的样本的协方差矩阵S :(2)第二步计算协方差矩阵S的本征向量el,e2,eN的本征值,i = 12,N。本征值按大到小排序:;第三步投影数据到本征矢张成的空间之中,这些本征矢相应 的本征值
8、为 。现在数据可以在三维空间中展示为云状的点 集。 对于 PCA ,确定新变量的个数 r 是一个两难的问 题。我们的目标是减小 r ,如果 r 小,则数据的维数低, 便于分析,同时也降低了噪声,但可能丢失一些有用的信息。 究竟如何确定 r 呢?这需要进一步分析每个主元素对信息 的贡献。 令 代表第 i 个特征值,定义第 i 个主元素的 贡献率为: (8-45) 前 r 个主成分的累计贡献率为: (8-46) 贡献率表示所定义的主成分在整个数据分析中承 担的主要意义占多大的比重,当取前 r 个主成分来代替原来 全部变量时,累计贡献率的大小反应了这种取代的可靠性, 累计贡献率越大,可靠性越大;反之
9、,则可靠性越小。一般 要求累计贡献率达到 70% 以上。 经过 PCA 分析,一 个多变量的复杂问题被简化为低维空间的简单问题。可以利 用这种简化方法进行作图,形象地表示和分析复杂问题。在 分析基因表达数据时,可以针对基因作图,也可以针对实验 条件作图。前者称为 Q 分析,后者称为 R 分析。 1) 协 方差矩阵 2) 特征值与特征向量 3) 贡献率http:/ view plaincopy/* * PrincipalComponents.java * Copyright (C) 2000 University of Waikato, Hamilton, NewZealand * */ pac
10、kage weka.attributeSelection;/* <!- globalinfo-start -> * Performs a principal components analysis and transformation of the data. Use in conjunction with a Ranker search. Dimensionality reduction is accomplished by choosing enough eigenvectors to account for some percentage of the variance in
11、 the original data-default 0.95 (95%). Attribute noise can be filtered by transforming to the PC space, eliminating some of the worst eigenvectors, and then transforming back to the original space. * <p/> <!- globalinfo-end -> * <!- options-start ->* Valid options are: <p/> *
12、 * <pre> -D *Dont normalize input data.</pre> * * <pre> -R* Retain enough PC attributes to account * for this proportion of variance in the original data. * (default = 0.95)</pre> * * <pre> -O * Transform through the PC space and * back to the originalspace.</pre>
13、 * * <pre> -A * Maximum number of attributes to include in * transformed attribute names. (-1 = include all)</pre> * <!- options-end -> * * author Mark Hall (mhallcs.waikato.ac.nz) * author Gabi Schmidberger (gabics.waikato.ac.nz) * version $Revision: 5987 $ */ public class Princip
14、alComponents extends UnsupervisedAttributeEvaluator implements AttributeTransformer, OptionHandler /* forserialization */static final long serialVersionUID =3310137541055815078L;/* The data to transformanalyse/transform */ private Instances m_trainInstances; /* Keep a copy for the class attribute (i
15、f set) */privateInstances m_trainHeader; /* The header for the transformed data format */private Instancesm_transformedFormat; /* The header for data transformed back to the original space */private Instancesm_originalSpaceFormat;/* Data has a class set */private boolean m_hasClass; /* Class index *
16、/ private int m_classIndex;/* Number of attributes */private int m_numAttribs;/* Number of instances */private int m_numInstances;/* Correlation matrix forthe original data */private double m_correlation;/* Will hold the unordered linear transformations of the (normalized) original data */ private double m_eigenvectors;/* Eigenvalues for the corresp