精华内容
下载资源
问答
  • 主成分分析(PCA)原理详解

    万次阅读 多人点赞 2018-06-09 15:08:25
    “微信公众号”本文同步更新在我的微信公众号里,地址:https://mp.weixin.qq.com/s/Xt1vLQfB20rTmtLjiLsmww本文同步更新在我的知乎专栏里面:主成分分析(PCA)原理详解 - Microstrong的文章 - 知乎...

    “微信公众号”

    1.相关背景

    在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律。多变量大数据集无疑会为研究和应用提供丰富的信息,但是也在一定程度上增加了数据采集的工作量。更重要的是在很多情形下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性。如果分别对每个指标进行分析,分析往往是孤立的,不能完全利用数据中的信息,因此盲目减少指标会损失很多有用的信息,从而产生错误的结论。

    因此需要找到一种合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量之间存在一定的相关关系,因此可以考虑将关系紧密的变量变成尽可能少的新变量,使这些新变量是两两不相关的,那么就可以用较少的综合指标分别代表存在于各个变量中的各类信息。主成分分析与因子分析就属于这类降维算法。

    2. 数据降维

    降维就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。降维也成为应用非常广泛的数据预处理方法。

    降维具有如下一些优点:

    • 1) 使得数据集更易使用。
    • 2) 降低算法的计算开销。
    • 3) 去除噪声。
    • 4) 使得结果容易理解。

    降维的算法有很多,比如奇异值分解(SVD)、主成分分析(PCA)、因子分析(FA)、独立成分分析(ICA)。

    3. PCA原理详解

    3.1 PCA的概念

    PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。

    思考:我们如何得到这些包含最大差异性的主成分方向呢?

    答案:事实上,通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值特征向量,选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。

    由于得到协方差矩阵的特征值特征向量有两种方法:特征值分解协方差矩阵、奇异值分解协方差矩阵,所以PCA算法有两种实现方法:基于特征值分解协方差矩阵实现PCA算法、基于SVD分解协方差矩阵实现PCA算法。

    既然提到协方差矩阵,那么就简单介绍一下方差和协方差的关系。然后概括介绍一下特征值分解矩阵原理、奇异值分解矩阵的原理。概括介绍是因为在我之前的《机器学习中SVD总结》文章中已经详细介绍了特征值分解原理和奇异值分解原理,这里就不再重复讲解了。可以看我的

    《机器学习中SVD总结》文章。地址:机器学习中SVD总结

    3.2 协方差和散度矩阵

    样本均值:

    样本方差:


    样本X和样本Y的协方差:

    由上面的公式,我们可以得到以下结论:

    (1) 方差的计算公式是针对一维特征,即针对同一特征不同样本的取值来进行计算得到;而协方差则必须要求至少满足二维特征;方差是协方差的特殊情况。

    (2) 方差和协方差的除数是n-1,这是为了得到方差和协方差的无偏估计。

    协方差为正时,说明X和Y是正相关关系;协方差为负时,说明X和Y是负相关关系;协方差为0时,说明X和Y是相互独立。Cov(X,X)就是X的方差。当样本是n维数据时,它们的协方差实际上是协方差矩阵(对称方阵)。例如,对于3维数据(x,y,z),计算它的协方差就是:

    散度矩阵定义为:

    对于数据X的散度矩阵为。其实协方差矩阵和散度矩阵关系密切,散度矩阵就是协方差矩阵乘以(总数据量-1)。因此它们的特征值和特征向量是一样的。这里值得注意的是,散度矩阵是SVD奇异值分解的一步,因此PCA和SVD是有很大联系。

    3.3 特征值分解矩阵原理

    (1) 特征值与特征向量

    如果一个向量v是矩阵A的特征向量,将一定可以表示成下面的形式:

    其中,λ是特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。

    (2) 特征值分解矩阵

    对于矩阵A,有一组特征向量v,将这组向量进行正交化单位化,就能得到一组正交单位向量。特征值分解,就是将矩阵A分解为如下式:


    其中,Q是矩阵A的特征向量组成的矩阵,\Sigma则是一个对角阵,对角线上的元素就是特征值。

    具体了解这一部分内容看我的《机器学习中SVD总结》文章。地址:机器学习中SVD总结

    3.4 SVD分解矩阵原理

    奇异值分解是一个能适用于任意矩阵的一种分解的方法,对于任意矩阵A总是存在一个奇异值分解:

    假设A是一个m*n的矩阵,那么得到的U是一个m*m的方阵,U里面的正交向量被称为左奇异向量。Σ是一个m*n的矩阵,Σ除了对角线其它元素都为0,对角线上的元素称为奇异值。是v的转置矩阵,是一个n*n的矩阵,它里面的正交向量被称为右奇异值向量。而且一般来讲,我们会将Σ上的值按从大到小的顺序排列。

    SVD分解矩阵A的步骤:

    (1) 求的特征值和特征向量,用单位化的特征向量构成 U。

    (2) 求的特征值和特征向量,用单位化的特征向量构成 V。

    (3) 将或者的特征值求平方根,然后构成 Σ。

    具体了解这一部分内容看我的《机器学习中SVD总结》文章。地址:机器学习中SVD总结

    3.5 PCA算法两种实现方法

    (1) 基于特征值分解协方差矩阵实现PCA算法

    输入:数据集,需要降到k维。

    1) 去平均值(即去中心化),即每一位特征减去各自的平均值。、

    2) 计算协方差矩阵,注:这里除或不除样本数量n或n-1,其实对求出的特征向量没有影响。

    3) 用特征值分解方法求协方差矩阵的特征值与特征向量。

    4) 对特征值从大到小排序,选择其中最大的k个。然后将其对应的k个特征向量分别作为行向量组成特征向量矩阵P。

    5) 将数据转换到k个特征向量构建的新空间中,即Y=PX。

    总结:

    1)关于这一部分为什么用,这里面含有很复杂的线性代数理论推导,想了解具体细节的可以看下面这篇文章。

    CodingLabs - PCA的数学原理

    2)关于为什么用特征值分解矩阵,是因为 是方阵,能很轻松的求出特征值与特征向量。当然,用奇异值分解也可以,是求特征值与特征向量的另一种方法。

    举个例子:


    以X为例,我们用PCA方法将这两行数据降到一行。

    1)因为X矩阵的每行已经是零均值,所以不需要去平均值。

    2)求协方差矩阵:

    3)求协方差矩阵的特征值与特征向量。

    求解后的特征值为:

    对应的特征向量为:


    其中对应的特征向量分别是一个通解,可以取任意实数。那么标准化后的特征向量为:


    4)矩阵P为:


    5)最后我们用P的第一行乘以数据矩阵X,就得到了降维后的表示:


    结果如图1所示:


                                                                                        图1:数据矩阵X降维投影结果

    注意:如果我们通过特征值分解协方差矩阵,那么我们只能得到一个方向的PCA降维。这个方向就是对数据矩阵X从行(或列)方向上压缩降维。

    (2) 基于SVD分解协方差矩阵实现PCA算法

    输入:数据集,需要降到k维。

    1) 去平均值,即每一位特征减去各自的平均值。

    2) 计算协方差矩阵。

    3) 通过SVD计算协方差矩阵的特征值与特征向量。

    4) 对特征值从大到小排序,选择其中最大的k个。然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。

    5) 将数据转换到k个特征向量构建的新空间中。

    在PCA降维中,我们需要找到样本协方差矩阵的最大k个特征向量,然后用这最大的k个特征向量组成的矩阵来做低维投影降维。可以看出,在这个过程中需要先求出协方差矩阵,当样本数多、样本特征数也多的时候,这个计算还是很大的。当我们用到SVD分解协方差矩阵的时候,SVD有两个好处:

    1) 有一些SVD的实现算法可以先不求出协方差矩阵也能求出我们的右奇异矩阵V。也就是说,我们的PCA算法可以不用做特征分解而是通过SVD来完成,这个方法在样本量很大的时候很有效。实际上,scikit-learn的PCA算法的背后真正的实现就是用的SVD,而不是特征值分解。

    2)注意到PCA仅仅使用了我们SVD的左奇异矩阵,没有使用到右奇异值矩阵,那么右奇异值矩阵有什么用呢?

    假设我们的样本是m*n的矩阵X,如果我们通过SVD找到了矩阵最大的k个特征向量组成的k*n的矩阵 ,则我们可以做如下处理:


    可以得到一个m*k的矩阵X',这个矩阵和我们原来m*n的矩阵X相比,列数从n减到了k,可见对列数进行了压缩。也就是说,左奇异矩阵可以用于对行数的压缩;右奇异矩阵可以用于对列(即特征维度)的压缩。这就是我们用SVD分解协方差矩阵实现PCA可以得到两个方向的PCA降维(即行和列两个方向)。

    4. PCA实例

    (1)PCA的Python实现:

    ##Python实现PCA
    import numpy as np
    def pca(X,k):#k is the components you want
      #mean of each feature
      n_samples, n_features = X.shape
      mean=np.array([np.mean(X[:,i]) for i in range(n_features)])
      #normalization
      norm_X=X-mean
      #scatter matrix
      scatter_matrix=np.dot(np.transpose(norm_X),norm_X)
      #Calculate the eigenvectors and eigenvalues
      eig_val, eig_vec = np.linalg.eig(scatter_matrix)
      eig_pairs = [(np.abs(eig_val[i]), eig_vec[:,i]) for i in range(n_features)]
      # sort eig_vec based on eig_val from highest to lowest
      eig_pairs.sort(reverse=True)
      # select the top k eig_vec
      feature=np.array([ele[1] for ele in eig_pairs[:k]])
      #get new data
      data=np.dot(norm_X,np.transpose(feature))
      return data
    
    X = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
    
    print(pca(X,1))

    上面代码实现了对数据X进行特征的降维。结果如下:

    (2)用sklearn的PCA与我们的PCA做个比较:

    ##用sklearn的PCA
    from sklearn.decomposition import PCA
    import numpy as np
    X = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
    pca=PCA(n_components=1)pca.fit(X)
    print(pca.transform(X))

    结果如下:

    搞了半天结果不是很一样啊!分析一下吧!

    sklearn中的PCA是通过svd_flip函数实现的,sklearn对奇异值分解结果进行了一个处理,因为ui*σi*vi=(-ui)*σi*(-vi),也就是u和v同时取反得到的结果是一样的,而这会导致通过PCA降维得到不一样的结果(虽然都是正确的)。具体了解可以看参考文章9或者自己分析一下sklearn中关于PCA的源码。

    5. PCA的理论推导

    PCA有两种通俗易懂的解释:(1)最大方差理论;(2)最小化降维造成的损失。这两个思路都能推导出同样的结果。

    我在这里只介绍最大方差理论:

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

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

    比如我们将下图中的5个点投影到某一维上,这里用一条过原点的直线表示(数据已经中心化):

    假设我们选择两条不同的直线做投影,那么左右两条中哪个好呢?根据我们之前的方差最大化理论,左边的好,因为投影后的样本点之间方差最大(也可以说是投影的绝对值之和最大)。

    计算投影的方法见下图:


    图中,红色点表示样例,蓝色点表示在u上的投影,u是直线的斜率也是直线的方向向量,而且是单位向量。蓝色点是在u上的投影点,离原点的距离是<x,u>(即或者)。

    6. 选择降维后的维度K(主成分的个数)

    如何选择主成分个数K呢?先来定义两个概念:


    选择不同的K值,然后用下面的式子不断计算,选取能够满足下列式子条件的最小K值即可。

    其中t值可以由自己定,比如t值取0.01,则代表了该PCA算法保留了99%的主要信息。当你觉得误差需要更小,你可以把t值设置的更小。上式还可以用SVD分解时产生的S矩阵来表示,如下面的式子:


    Reference:

    (1) 主成分分析(PCA)原理详解

    http://blog.csdn.net/zhongkelee/article/details/44064401

    (2) 机器学习之PCA主成分分析 - steed灬 - 博客园

    https://www.cnblogs.com/steed/p/7454329.html

    (3) 简单易学的机器学习算法——主成分分析(PCA)

    https://blog.csdn.net/google19890102/article/details/27969459

    (4) 机器学习实战之PCA - 笨鸟多学 - 博客园

    https://www.cnblogs.com/zy230530/p/7074215.html

    (5) 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用 - LeftNotEasy - 博客园

    http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html

    (6) 从PCA和SVD的关系拾遗

    https://blog.csdn.net/Dark_Scope/article/details/53150883

    (7) CodingLabs - PCA的数学原理

    http://blog.codinglabs.org/articles/pca-tutorial.html

    (8) PCA(主成分分析)python实现

    https://www.jianshu.com/p/4528aaa6dc48

    (9) 主成分分析PCA(Principal Component Analysis)在sklearn中的应用及部分源码分析

    https://www.cnblogs.com/lochan/p/7001907.html

    展开全文
  • 主成分分析与因子分析及SPSS实现

    万次阅读 多人点赞 2018-05-25 11:27:12
    主成分分析与因子分析及SPSS实现一、主成分分析(1)问题提出在问题研究中,为了不遗漏和准确起见,往往会面面俱到,取得大量的指标来进行分析。比如为了研究某种疾病的影响因素,我们可能会收集患者的人口学资料、...

    主成分分析与因子分析及SPSS实现

    一、主成分分析

    (1)问题提出
    在问题研究中,为了不遗漏和准确起见,往往会面面俱到,取得大量的指标来进行分析。比如为了研究某种疾病的影响因素,我们可能会收集患者的人口学资料、病史、体征、化验检查等等数十项指标。如果将这些指标直接纳入多元统计分析,不仅会使模型变得复杂不稳定,而且还有可能因为变量之间的多重共线性引起较大的误差。有没有一种办法能对信息进行浓缩,减少变量的个数,同时消除多重共线性?
    这时,主成分分析隆重登场。
    (2)主成分分析的原理
    主成分分析的本质是坐标的旋转变换,将原始的n个变量进行重新的线性组合,生成n个新的变量,他们之间互不相关,称为n个“成分”。同时按照方差最大化的原则,保证第一个成分的方差最大,然后依次递减。这n个成分是按照方差从大到小排列的,其中前m个成分可能就包含了原始变量的大部分方差(及变异信息)。那么这m个成分就成为原始变量的“主成分”,他们包含了原始变量的大部分信息。
    注意得到的主成分不是原始变量筛选后的剩余变量,而是原始变量经过重新组合后的“综合变量”。
    我们以最简单的二维数据来直观的解释主成分分析的原理。假设现在有两个变量X1、X2,在坐标上画出散点图如下:

     

    可见,他们之间存在相关关系,如果我们将坐标轴整体逆时针旋转45°,变成新的坐标系Y1、Y2,如下图:
    根据坐标变化的原理,我们可以算出:
    Y1 = sqrt(2)/2 * X1 + sqrt(2)/2 * X2
    Y2 = sqrt(2)/2 * X1 – sqrt(2)/2 * X2
    其中sqrt(x)为x的平方根。
    通过对X1、X2的重新进行线性组合,得到了两个新的变量Y1、Y2。
    此时,Y1、Y2变得不再相关,而且Y1方向变异(方差)较大,Y2方向的变异(方差)较小,这时我们可以提取Y1作为X1、X2的主成分,参与后续的统计分析,因为它携带了原始变量的大部分信息。
    至此我们解决了两个问题:降维和消除共线性。
    对于二维以上的数据,就不能用上面的几何图形直观的表示了,只能通过矩阵变换求解,但是本质思想是一样的。
     
    二、因子分析
    (一)原理和方法:
    因子分析是主成分分析的扩展。
    在主成分分析过程中,新变量是原始变量的线性组合,即将多个原始变量经过线性(坐标)变换得到新的变量。
    因子分析中,是对原始变量间的内在相关结构进行分组,相关性强的分在一组,组间相关性较弱,这样各组变量代表一个基本要素(公共因子)。通过原始变量之间的复杂关系对原始变量进行分解,得到公共因子和特殊因子。将原始变量表示成公共因子的线性组合。其中公共因子是所有原始变量中所共同具有的特征,而特殊因子则是原始变量所特有的部分。因子分析强调对新变量(因子)的实际意义的解释。
    举个例子:
    比如在市场调查中我们收集了食品的五项指标(x1-x5):味道、价格、风味、是否快餐、能量,经过因子分析,我们发现了:
    x1 = 0.02 * z1 + 0.99 * z2 + e1
    x2 = 0.94 * z1 – 0.01 * z2 + e2
    x3 = 0.13* z1 + 0.98 * z2 + e3
    x4 = 0.84 * z1 + 0.42 * z2 + e4
    x5 = 0.97 * z1 – 0.02 * z2 + e1
    (以上的数字代表实际为变量间的相关系数,值越大,相关性越大)
    第一个公因子z1主要与价格、是否快餐、能量有关,代表“价格与营养”
    第二个公因子z2主要与味道、风味有关,代表“口味”
    e1-5是特殊因子,是公因子中无法解释的,在分析中一般略去。
    同时,我们也可以将公因子z1、z2表示成原始变量的线性组合,用于后续分析。
    (二)使用条件:
    (1)样本量足够大。通常要求样本量是变量数目的5倍以上,且大于100例。
    (2)原始变量之间具有相关性。如果变量之间彼此独立,无法使用因子分析。在SPSS中可用KMO检验和Bartlett球形检验来判断。
    (3)生成的公因子要有实际的意义,必要时可通过因子旋转(坐标变化)来达到。
     
    三、主成分分析和因子分析的联系与区别
    联系:两者都是降维和信息浓缩的方法。生成的新变量均代表了原始变量的大部分信息且互相独立,都可以用于后续的回归分析、判别分析、聚类分析等等。
    区别:
    (1)主成分分析是按照方差最大化的方法生成的新变量,强调新变量贡献了多大比例的方差,不关心新变量是否有明确的实际意义。
    (2)因子分析着重要求新变量具有实际的意义,能解释原始变量间的内在结构。
     
    SPSS没有提供单独的主成分分析方法,而是混在因子分析当中,下面通过一个例子来讨论主成分分析与因子分析的实现方法及相关问题。
     
    一、问题提出
     
    男子十项全能比赛包含100米跑、跳远、跳高、撑杆跳、铅球、铁饼、标枪、400米跑、1500米跑、110米跨栏十个项目,总分为各个项目得分之和。为了分析十项全能主要考察哪些方面的能力,以便有针对性的进行训练,研究者收集了134个顶级运动员的十项全能成绩单,将通过因子分析来达到分析目的。
     
    二、分析过程
     
    变量视图:
     
    数据视图(部分):
    菜单选择(分析->降维->因子分析):

    打开因子分析的主界面,将十项成绩选入”变量“框中(不要包含总分),如下:
    点击”描述“按钮,打开对话框,选中”系数“和”KMO和Bartlett球形度检验“:

    上图相关解释:
    ”系数“:为变量之间的相关系数阵列,可以直观的分析相关性。
    ”KMO和Bartlett球形度检验“:用于定量的检验变量之间是否具有相关性。
    点击”继续“,回到主界面,点击”抽取“,打开对话框。
    ”方法“ =>”主成分“,”输出“=>”未旋转的因子解“和”碎石图“,”抽取“=>”基于特征值“,其余选择默认。

    解释:
    ①因子抽取的方法:选取默认的主成分法即可,其余方法的计算结果可能有所差异。
    ②输出:”未旋转的因子解”极为主成分分析结果。碎石图有助于我们判断因子的重要性(详细介绍见后面)。
    ③抽取:为抽取主成分(因子)的方法,一般是基于特征值大于1,默认即可。
    点击”继续“,回到主界面,点击”确定“,进入分析。
    输出的主要表格如下:
    (1)相关性检验
    因子分析要求变量之间有相关性,所以首先要进行相关性检验。首先输出的是变量之间的相关系数矩阵:

    可以直观的看到,变量之间有相关性。但需要检验,接着输出的是相关性检验:
    上图有两个指标:第一个是KMO值,一般大于0.7就说明不了之间有相关性了。第二个是Bartlett球形度检验,P值<0.001。综合两个指标,说明变量之间存在相关性,可以进行因子分析。否则,不能进行因子分析。
    (2)提取主成分和公因子
    接下来输出主成分结果:

    这就是主成分分析的结果,表中第一列为10个成分;第二列为对应的”特征值“,表示所解释的方差的大小;第三列为对应的成分所包含的方差占总方差的百分比;第四列为累计的百分比。一般来说,选择”特征值“大于1的成分作为主成分,这也是SPSS默认的选择。
    在本例中,成分1和2的特征值大于1,他们合计能解释71.034%的方差,还算不错。所以我们可以提取1和2作为主成分,抓住了主要矛盾,其余成分包含的信息较少,故弃去。
    下面,输出碎石图,如下:
    碎石图来源于地质学的概念。在岩层斜坡下方往往有很多小的碎石,其地质学意义不大。碎石图以特征值为纵轴,成分为横轴。前面陡峭的部分特征值大,包含的信息多,后面平坦的部分特征值小,包含的信息也小。
    由图直观的看出,成分1和2包含了大部分信息,从3开始就进入平台了。
    接下来,输出提取的成分矩阵:

    上表中的数值为公因子与原始变量之间的相关系数,绝对值越大,说明关系越密切。公因子1和9个运动项目都正相关(注意跑步运动运动的计分方式,时间越短,分数越高),看来只能称为“综合运动”因子了。公因子2与铁饼、铅球正相关,与1500米跑、400米跑负相关,这究竟代表什么意思呢?看来只能成为“不知所云”因子了。
    (三)因子旋转
    前面提取的两个公因子一个是大而全的“综合因子”,一个不知所云,得到这样的结果,无疑是分析的失败。不过,不要灰心,我们可以通过因子的旋转来获得更好的解释。在主界面中点击“旋转”按钮,打开对话框,“方法”=>“最大方差法”,“输出”=>“旋转解”。

    点击“继续”,回到主界面点击“确认”进行分析。输出结果如下:
    这是选择后的成分矩阵。经过旋转,可以看出:
    公因子1得分越高,所有的跑步和跨栏成绩越差,而跳远、撑杆跳等需要助跑类项目的成绩也越差,所以公因子1代表的是奔跑能力的反向指标,可称为“奔跑能力”。
    公因子2与铁饼和铅球的正相关性很高,与标枪、撑杆跳等需要上肢力量的项目也正相关,所以该因子可以成为“上肢力量”。
    经过旋转,可以看出公因子有了更合理的解释。
    (四)结果的保存
    在最后,我们还要将公因子储存下来供后续使用。点击“得分”按钮,打开对话框,选中“保存为变量”,方法采用默认的“回归”方法,同时选中“显示因子得分系数矩阵”。

    SPSS会自动生成2个新变量,分别为公因子的取值,放在数据的最后。同时会输出一个因子系数表格:

    由上图,我们可以写出公因子的表达式(用F1、F2代表两个公因子,Z1~Z10分别代表原始变量):

    F1 = -0.16*Z1+0.161*Z2+0.145*Z3+0.199*Z4-0.131*Z5-0.167*Z6+0.137*Z7+0.174*Z8+0.131*Z9-0.037*Z10
    F2同理,略去。
    注意,这里的变量Z1~Z10,F1、F2不再是原始变量,而是标准正态变换后的变量。
    展开全文
  • 主成分分析

    万次阅读 多人点赞 2019-03-25 09:50:04
    Principal components analysis ...   我们在作数据分析处理时,数据往往包含多个变量,而较多的变量会带来...主成分分析(Principal components analysis,以下简称PCA)是一种通过降维技术把多个变量化为少数几个主...

    Principal components analysis
    来源:http://blog.csdn.net/m0_37788308/article/details/78115209

      我们在作数据分析处理时,数据往往包含多个变量,而较多的变量会带来分析问题的复杂性。主成分分析(Principal components analysis,以下简称PCA)是一种通过降维技术把多个变量化为少数几个主成分的统计方法,是最重要的降维方法之一。它可以对高维数据进行降维减少预测变量的个数,同时经过降维除去噪声,其最直接的应用就是压缩数据,具体的应用有:信号处理中降噪,数据降维后可视化等。 
      PCA把原先的n个特征用数目更少的m个特征取代,新的m个特征一要保证最大化样本方差,二保证相互独立的。新特征是旧特征的线性组合,提供一个新的框架来解释结果。接下来分四部分来展开PCA的理论与实践:

    • 什么时候用PCA,即数据特点;

    • 什么是主成分分析、主成分计算;

    • 主成分分析为什可以,即主成分理论基础;

    • python如何快速实现PCA;

    一、数据特点
    1.维度灾难

      维度灾难,简单来说就是变量的个数多。如果变量个数增加,随之需要估计的参数个数也在增加,在训练集保持不变的情况下待估参数的方差也会随之增加,导致参数估计质量下降。

    2.变量关系不一般。

      变量关系不一般,指的是变量彼此之间常常存在一定程度的、有时甚至是相当高的相关性,这说明数据是有冗余的,或者说观测数据中的信息是有重叠的,这是我们利用主成分进行降维的前提条件,也可以说这使得变量降维成为可能(观察变量的相关系数矩阵,一般来说相关系数矩阵中多数元素绝对值大于0.5,非常适合做主成分分析,但也不是说小于的就不可以用这种方法)。 
      在变量个数多,相互的相关性比较大的时候,我们会不会去寻找变量中的“精华”呢?,寻找个数相对较少的综合变量呢?这是我们利用主成分降维的动机。

      可参考被博文广传的例子:

    •比如拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余。

    • 拿到一个数学系的本科生期末考试成绩单,里面有三列,一列是对数学的兴趣程度,一列是复习时间,还有一列是考试成绩。我们知道要学好数学,需要有浓厚的兴趣,所以第二项与第一项强相关,第三项和第二项也是强相关。那是不是可以合并第一项和第二项呢?

    (为保证公式的显示规范,方便讨论,建议至原博客网页进行查看呦http://blog.csdn.net/m0_37788308/article/details/78115209)

    二、什么是主成分分析
    1.由来:
      主成分分析(principal component analysis)由皮尔逊(Pearson,1901)首先引入,后来被霍特林(Hotelling,1933)发展了。

    2. 描述;
      主成分分析是一种通过降维技术把多个变量化为少数几个主成分(综合变量)的统计分析方法。这些主成分能够反映原始变量的绝大部分信息,它们通常表示为原始变量的某种线性组合。 
      那为了主成分的为了是这些主成分所含的信息不互相重叠,应要求他们之间互不相关。 
    主成分的目的: 
    (1)变量的降维 
    (2)主成分的解释(在主成分有意义的情况下

    3.计算步骤
    例子:我们简单粗暴直接上例子,我们带着问题看例子,一步一步来。(例子来自《应用多元统计》,王学民老师著)

      在制定服装标准的过程中,对128名成年男子的身材进行了测量,每人测得的指标中含有这样六项:身高(x1)、坐高(x2) 、胸围(x3) 、手臂长(x4) 、肋围(x5)和腰围(x6) 。

    第一步,对原始数据标准化(减去对应变量的均值,再除以其方差),并计算相关矩阵(或协方差矩阵): 
    表1男子身材六项指标的样本相关矩阵

     
    第二步,计算相关矩阵的特征值及特征向量。 
    表2的前三个特征值、特征向量以及贡献率


      特征值从大到小排列,特征向量和特征值对应从大到小排列。前三个主成分分别为:
      y^1=0.469x1∗+0.404x2∗+0.394x3∗+0.408x4∗+0.337x5∗+0.427x6

      y^2=−0.365x1∗−0.397x2∗+0.397x3∗−0.365x4∗+0.569x5∗+0.308x6

      y^3=−0.092x1∗+0.613x2∗−0.279x3∗−0.705x4∗+0.164x5∗+0.119x6


    第三步,根据累计贡献率(一般要求累积贡献率达到85%)可考虑取前面两个或三个主成分。

    第四步,解释主成分。观察系数发现第一主成分系数多为正数,且变量都与身材大小有关系,称第一主成分为(身材)大小成分;类似分析,称第二主成分为形状成分(或胖瘦成分),称第三主成分为臂长成分。

    结合一定的经验和猜想,解释主成分,不是所有的主成分都能被合理的解释

      称第一主成分为(身材)大小成分,称第二主成分为形状成分(或胖瘦成分),称第三主成分为臂长成分。

    可考虑取前两个主成分。

    由于λ6 非常小,所以存在共线性关系: 
    λ6^=0.126

    t6^=(−0.786,0.433,−0.125,0.371,0.034,0.179)

    =−0.786x1∗+0.433x2∗−0.125x3∗+0.371x4∗+0.034x5∗+0.179x6∗≈0
    第五步,计算主成分得分。即对每一个样本数据标准化后带入第三步的主成分公式中,计算第一主成分得分,第二主成分得分。

    第六步,将主成分可画图聚类,将主成分得分看成新的因变量可线性回归。

    例子参考《多元统计分析》王学民老师著,上海财经大学出版社

    总结一下PCA的算法步骤:
      设有m条n维数据,m个样本,对原始数据标准化(减去对应变量的均值,再除以其方差),每个样本对应p个变量,x=(x∗1,x∗2,⋯,x∗n)′x=(x1∗,x2∗,⋯,xn∗)′。

    1.求出自变量的协方差矩阵(或相关系数矩阵);

    2.求出协方差矩阵(或性关系数矩阵)的特征值及对应的特征向量;

    3.将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵aa(为k*p维);

    4.Y=aT∗XaT∗X (Y 为k*1维)即为降维到k维后的数据,此步算出每个样本的主成分得分;

    5.可将每个样本的主成分得分画散点图及聚类,或将主成分得分看成新的因变量,对其做线性回归等。

    4.主成分的应用
      在主成分分析中,我们首先应保证所提取的前几个主成分的累计贡献率达到一个较高的水平,其次对这些被提取的主成分都能够给出符合实际背景和意义的解释。但是主成分的解释其含义一般多少带有点模糊性,不像原始变量的含义那么清楚、确切,这是变量降维过程中不得不付出的代价。因此,提取的主成分个数m通常应明显小于原始变量个数p(除非p本身较小),否则主成分维数降低的“利”,可能抵不过主成分含义不如原始变量清楚的“弊”。 
       在一些应用中,这些主成分本身就是分析的目的,此时我们需要给前几个主成分一个符合实际背景和意义的解释,以明白其大致的含义。 
      在更多的另一些应用中,主成分只是要达到目的的一个中间结果(或步骤),而非目的本身。例如,将主成分用于聚类(主成分聚类)、回归(主成分回归)、评估正态性、寻找异常值,以及通过方差接近于零的主成分发现原始变量间的多重共线性关系等,此时的主成分可不必给出解释。

    三、主成分为什么可以?(主成分的原理)
    小节内容有:.PCA理论基础:方差最大理论、方差最大和协方差的关系、解释方差最大和主成分的关系、贡献率和累计贡献率概念、主成分取多少个呢?、几何意义。
       经过主成分在压缩数据之后的数据(主成分得分数据),多个变量变为更少的综合变量,变量个数减少了,还能反映原有数据的信息吗?答案是可以的。为什么可以呢?解决以上疑问前我们需要了解PCA理论基础:

    1.PCA理论基础:方差最大理论
      我们以一个二维数据为例: 
     
    图1:寻找主成分的正交旋转 
    将二维,降至一维 
    • a二维经过投影,变为一维; 
    • b要尽可能保留原始信息。直观的感受就是投影之后尽量分散,点分布差异相对较大,没有相关性。(相反的极端情况是投影后聚成一团,变量间的差别小,蕴含的信息就少了)所以样本间有变化,才有更多信息,变化就是差异; 
    • c如何体现差异呢?,可量化的方差。这就需要找一个方向使得投影后它们在投影方向上的方差尽可能达到最大,即在此方向上所含的有关原始信息样品间的差异信息是最多的; 
    • d降维在线性空间中就是基变换,换一种说法就是,找到一组新的基向量,在此向量空间上进行投影。在图中原本的基向量是(0,1),(1,0),现在基向量换成在横贯1,3象限的那条,为什么不选横贯2,4象限的呢,思考②条。

    我们由二维空间向一维空间的转换,如何才能尽可能的保留信息呢,这就需要找一个方向使得投影后它们在投影方向上的方差尽可能达到最大,即在此方向上所含的有关原始信息样品间的差异信息是最多的。


    1.我们由二维空间向一维空间的转换,如何才能尽可能的保留信息呢,这就需要找一个方向使得投影后它们在投影方向上的方差尽可能达到最大,即在此方向上所含的有关原始信息样品间的差异信息是最多的。
    (再问一遍:小伙伴会不会有为什么是方差最大的疑惑呢?从数据体现信息的多少出发。极端的情况是样本数据都是相同的,那就没有更多信息了。所以样本间有变化,才有更多信息,变化就是差异,差异就用方差体现)

    2.方差最大和协方差的关系
       要解释方差最大和主成分的关系需要从方差和协方差的关系入手:

      设对原始数据标准化,减去对应变量的均值,再除以其方差,每个样本对应P个变量,设x=(x1,x2,⋯,xp)′x=(x1,x2,⋯,xp)′为P维随机变量,u=E(x),∑=V(x)u=E(x),∑=V(x),找其线性组合,即综合变量,进行线性变换:


      首先,我们试图用综合变量y1y1来代表原始的P个变量,为使y1y1,在 x1,x2,⋯,xnx1,x2,⋯,xn的一切线性组合中最大限度的保留这组变量的信息,应使其方差最大化。在a1′a1=1的约束下,寻找a1,使得 
    V(y1)=a1′∑a1, 
    达到最大,就称为第一主成分。协方差矩阵 : 
    ∑=V(x)

    为对称的,进行对称矩阵的谱分解,分解后的对角矩阵元素λi,tiλi,ti都有着特殊的含义,即特征值和对应的特征向量。 
    谱分解: 

    3. 解释方差最大和主成分的关系:

      计算要知道,T为正交矩阵。t为特征向量,T’T为1;a’t是一个数,不是向量;a’a已经设定为1,本人第一次看好多遍无果,想到前面一句后才顺利的推导上面的式子。
      直接验证,当取a1=t1时,有t′1∑t1=t′1(λ1t1)=λ1,即此时y1=t′1x,具有最大方差值λ1。 
       如果第一主成分信息不够多,还不足以代表原始的p个变量,则需要再考虑第二主成y2,为了使与y2所含的信息与y1不重叠,要求第一主成分与第二主成分不相关 ,cov(y1,y2)=0。这里的重叠是指线性关系上的,如果有重叠则说明还有进一步降维的空间。 
      第二主成分的推理于第一主成分类似,可得到y2=t′2x,具有方差值λ2。 
    推理点拨:考虑到不同特征值的特征向量正交,相乘为0,推理亦是会畅通。

    4、 贡献率和累计贡献率概念:
      从上面的推导,我们也可以发现特征值和主成分方差的关系,总方差中属于第i主成分yi的比例为

    称为主成分yi的贡献率。累计贡献率就是多个主成分贡献率的加和啦。
    5、主成分取多少个呢?
      可人为指定固定个数,但是往往取相对于变量个数p较小的m个,使得累计贡献达到一个较高的百分比(80%——90%),此时y1,y2,y2……,ym可以来代替x1,x2,x3……xp,从而达到降为的目的,而信息的损失却不多。

    6、几何意义
      通过第三部分的计算过程,假设我们得到所有的主成分: 
    y1,y2,y3,⋯,ypy1,y2,y3,⋯,yp,aiai为特征向量.在“方差最大和协方差的关系”小节内容中的的线性变换,是一个正交变换。 
      主成分几何意义是将原由(x1,x2,x3……xp)′构成的原p维RP空间的坐标轴作一正交旋转,,一组正交单位向量(t1,t2,⋯,tp)(t1,t2,⋯,tp)表明了p个新坐标轴的方向,这些新的坐标轴彼此仍保持正交,yi是在ti上的投影值,λiλi反映了在t1上投影点的分散程度。

    四、如何实现
      内部服务器博客,或者CSDN 云南省高校数据化运营管理工程研究中心的博客.

    1.我们可以按步编程(见程序《PCA算法 python实现(法一)一步一步实现》) 
    http://blog.csdn.net/m0_37788308/article/details/78115229

    2.快速代码实现(《PCA python实现(法2)scikit-learn 快速实现》) 
    http://blog.csdn.net/m0_37788308/article/details/78115229

    sklearn官方文档地址:http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
     

    展开全文
  • 超详细SPSS主成分分析计算指标权重(一)

    万次阅读 多人点赞 2019-03-13 20:58:51
    相信很多写过或者正在写指标处理类论文的朋友都曾对如何计算指标权重充满困惑,到底是用熵值法,还是主成分分析法?或者其他各种看起来奥妙无穷却难以上手操作的神奇方法?好不容易确定要选用主成分分析法时又开始...

    一、指标权重计算确定的困惑

    相信很多写过或者正在写指标处理类论文的朋友都曾对如何计算指标权重充满困惑,到底是用熵值法,还是主成分分析法?或者其他各种看起来奥妙无穷却难以上手操作的神奇方法?好不容易确定要选用主成分分析法时又开始发愁要如何实现呢?听说过要可以用SPPS,可是又如何使用SPSS操作呢?用SPSS进行主成分分析之后又要如何得到最终的权重呢?接下来笔者将以一个实际的案例,带领大家一步步从SPSS入手,进行主成分分析,并利用主成分分析的结果最终得到各指标的权重值。

    二、利用SPSS实现主成分分析

    1、数据标准化
    (1)为什么要对数据进行标准化处理

    在对数据进行主成分分析前,首先要对数据进行标准化,之所以要对数据进行标准化,是因为各种类别的数据间的度量不同,比如计算经济的指标,我们通常会选取地区GDP生产总值和第三产业产值在GDP中的比重,GDP产值以亿为单位,通常以千计或万计,而第三产业产值在GDP中的比重的取值范围在0~1之间,如何能够相提并论呢?能够因为前者的数据远远大于后者,而得出前者的指标更为重要的结论吗?显然是不行的,所以要进行主成分分析,首先要对数据进行标准化。

    (2)数据标准化的方法

    为什么要关心数据处理的方法呢?在实际操作中,笔者曾经遇到一个问题。笔者利用SPSS自带的数据标准化方法对数据进行了标准化处理,但在权重的计算过程中不断出现负值,后来笔者几次重新调整指标类别,终于得出了均为正值的权重。但笔者最终的目的是要进行耦合协调度,这时候出现了大量的负值,而耦合度及耦合协调度的取值范围应该在0~1之间,因此笔者开始从头探索出错的原因。终于,笔者找到了原因,那就是数据标准化的方法选取的不正确,因此笔者重新选择了极差法对数据重新进行标准化,并最终顺利得到了后续的结果。

    本文中笔者将先直接利用SPSS对数据进行标准化,进行主成分分析,并计算权重。随后再利用极差法对数据进行标准化并进行主成分分析,计算权重。

    在这里先列出极差法数据标准化的方法:
    首先要区分指标的正负向,即指标数值越大对主体产生的结果是越好还是越坏。
    在这里插入图片描述
    如上图,城市绿地面积越大对城市环境越好,而工业废气排放量越大,对城市环境越坏,因此城市绿地面积为正向指标,而工业废气排放量为负向指标。

    2.SPSS数据标准化
    (1)数据选取
    我们选择广东省2016年21个市级行政区域的五项指标数据,如下图所示:
    在这里插入图片描述
    (2)SPSS中的数据标准化
    首先将数据直接粘贴到SPSS数据视图中:
    在这里插入图片描述
    发现表头那里是自动生成的标号,在“变量视图”中进行修改:
    在这里插入图片描述
    这时候在数据视图可以看到表头已经修改:
    在这里插入图片描述
    这时候开始进行数据标准化处理,也很简单,点击【分析】——【描述统计】——【描述】在这里插入图片描述
    将选中数据放入右侧“变量”,将左下角“将标准化得分另存为变量(Z)”,这一步一定不能缺少,否则无法在变量视图中展现标准化的数据:
    在这里插入图片描述
    直接点击确定,不用管输入的内容,直接看回“数据视图”,发现新增加了五列数,这些就是用SPSS标准化处理后得到的数据。
    在这里插入图片描述
    (3)主成分分析
    首先什么是主成分分析?如何进行主成分分析?由于数据之间可能会具有相关性,即可能表达的是同样的含义,因此需要的对这些相关性的数据进行降维处理,用较少的变量去解释原来资料中的大部分变量,将我们手中许多相关性很高的变量转化成彼此相互独立或不相关的变量。通常是选出比原始变量个数少,能解释大部分资料中变量的几个新变量,并用以解释资料的综合性指标。简单来说就是,把给定的一组相关变量通过线性变换转成另一组不相关的变量,这些新的变量按照方差依次递减的顺序排列。利用SPSS极大的简化了以上过程:
    点击【分析】——【降维】——【因子分析】
    在这里插入图片描述
    将刚才标准化得到的数据项添加到“变量中”:
    在这里插入图片描述
    接下来,点击:【描述】——选中“原始分析结果”,“系数”,“KMO和Bartlett球形度检验”(用来检测是否适合使用主成分分析)
    在这里插入图片描述
    点击:【抽取】——【主成分分析】,其他选项默认
    在这里插入图片描述
    点击:【旋转】——选择“最大方差法”,“旋转解”(也可以选择无,在某些情况下数据会出现异常结果,这时会需要进行矩阵旋转)
    在这里插入图片描述
    点击:【得分】,选择“显示因子得分系数矩阵”(对于权重计算来说这必不可少)
    在这里插入图片描述
    点击:【选项】,其他选项可默认
    在这里插入图片描述
    当一切设置完毕之后,点击“确定”,就可以得到主成分分析结果了:
    我们主要关注【解释的总方差】和【成分矩阵】,这也是后面计算权重所不可缺少的。通常解释的总方差需要超过80%,说明提取的两个总方差对总体方差的贡献率高。从笔者分析的结果来说,好像并不适合进行主成分分析。这其实是由于数据标准化选择不可造成的,有的情况下权重计算还可以得出负值,这就是为什么要选择数据标准化的方法,而不能够只依靠SPSS中的数据标准化。相信这也困惑了很多的朋友,怀疑自己选取指标体系的合理性,在后面笔者使用极差法对数据进行标准化处理后,解释的总方差接近95%。
    在这里插入图片描述
    成分矩阵在后面全之后结果的计算中,是不可或缺的。

    在这里插入图片描述
    由于篇幅的原因,接下来利用极差法对数据进行标准化以及权重的计算将放到第二节进行。后面在得出指标权重后,笔者还将分享如何进行多个指标系统之间耦合度及耦合协调度的方法,相信这也曾经难倒了不少朋友,笔者希望能为大家解决一些障碍,降低各位的时间成本。下面是第二节权重计算及极差法标准化的链接:

    超详细SPSS主成分分析计算指标权重(二:权重计算及极差法标准化)
    https://blog.csdn.net/qq_32925031/article/details/88562141

    展开全文
  • PCA:详细解释主成分分析

    万次阅读 多人点赞 2018-09-04 15:33:33
    主成分分析算法(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的信息量最大(方差最大),以此使用较少的数据维度,同时保留住较多的原...
  • 主成分分析是在做特征筛选时的重要手段,这个方法在大部分的书中都只是介绍了步骤方法,并没有从头到尾把这个事情给说清楚。本文的目的是把PCA和KPCA给说清楚。主要参考了YouTube上李政轩的Principal Component ...
  • 主成分回归

    2015-11-23 17:27:22
    主成分回归分析代码,主成分回归相比于传统的最小二乘回归,去除了自变量之间的耦合干扰,提高了回归的逼近能力
  • 主成分分析-源码

    2021-02-26 19:24:12
    主成分分析
  • 介绍主成分分析,介绍主成分分析,介绍主成分分析,介绍主成分分析,介绍主成分分析,介绍主成分分析,介绍主成分分析,介绍主成分分析,介绍主成分分析,介绍主成分分析,介绍主成分分析,介绍主成分分析,介绍...
  • 主成分分析程序

    2018-01-10 16:53:13
    主成分分析程序
  • 主成分分析法

    2017-12-21 18:53:01
    主成分分析法
  • 联合稀疏主成分分析

    2021-03-26 05:16:22
    联合稀疏主成分分析
  • 主成分分析操作步骤 1先在 spss 中录入原始数据 2 菜单栏上执行分析降维因子分析打开因素分析对话 框将要分析的变量都放入变量窗口中 . . 3 设计分析的统计量 点击描述选中 Statistics中的原始分析结果和相关性矩阵...
  • 主成分分析.rar

    2020-01-23 13:56:07
    主成分分析.rar主成分分析.rar

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,828
精华内容 4,731
关键字:

主成分