糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 主成分分析原理以及SPSS和Python实现

主成分分析原理以及SPSS和Python实现

时间:2019-06-16 10:46:47

相关推荐

主成分分析原理以及SPSS和Python实现

目录

[ 0 ] 一句话定义[ 1 ] 使用目的和使用条件[ 2 ] 基本思想和直观理解[ 3 ] 具体计算步骤[ 4 ] 求各个成分的累计贡献率[ 5 ] 主成分分析的SPSS和Python实现SPSS实现相关设置结果分析Python实现[ 6 ] 总结

[ 0 ] 一句话定义

主成分分析(principal component analysis,PCA)是一种常用的无监督学习方法,它利用正交变换把由线性相关变量表示的观测数据转换为少数几个由线性无关变量表示的数据,线性无关的变量叫主成分,主成分个数主一般小于原始变量个数,所以它是一种降维方法。主成分分析主要用于发现数据中的基本结构,即数据中变量之间的基本关系,是一种描述性统计方法,常常用于其他机器学习方法的前处理。

——李航《统计学习方法》

[ 1 ] 使用目的和使用条件

统计分析中,变量之间可能存在相关性,以致增加了分析的难度,因而人们探索降维的可能性,用原始变量构造少数变量来代替多数变量,这样能保留数据中的大部分信息,同时简化了运算。

讨论: 为什么要降维/处理相关性?相关的数据难处理在哪?

从数据的意义上:举例来说,关于国家的描述有以下变量:人均收入、外汇储备、进出口贸易额等变量,这些变量不独立,反而可能十分相关,其中一个变量的自身变化往往伴随着其他变量不可忽略的变化,谈论单独某个变量对国家特征的单独贡献就没有意义,它们有着“集体贡献”,而总的贡献不是单独变量贡献之和。

从机器学习角度:要处理的数据可能有成百上千的变量,里面有与问题无关的变量,也有彼此相关的冗余变量,进行数据降维能够在较好地描述原始数据的基础上,减少计算时间,改善整体性能。机器学习的降维有两大类:

(1)特征选择:选择原始变量集的子集,不产生新的变量

(2)特征降维:生成了新的变量,如PCA

如上所述,PCA的使用条件就是变量之间存在相关性,如果是完全独立的,那么就没有做PCA的必要了。

[ 2 ] 基本思想和直观理解

把给定的一组变量 X1,X2,...,XpX_1,X_2,...,X_pX1​,X2​,...,Xp​ 通过线性变换转化为一组不相关的变量 Y1,Y2,...,YpY_1,Y_2,...,Y_pY1​,Y2​,...,Yp​,保持总方差不变,其中 Y1Y_1Y1​ 具有最大方差,称为第一主成分,类似地,有第二、第三…第p主成分。方差表示在新变量上信息的大小。

为了直观展示,假设两维的情况。左图由于两个变量相关,呈现一个椭圆的形状,沿椭圆长轴方向包含更多的信息,即方差最大的方向,而短轴方向方差较小。右图是两个不相关变量,长短轴没有差别,近似于一个正圆,因而降维没有什么意义,因为无论向那个方向投影都不会有大的差别。

下面介绍具体的步骤,现在总结要关注的几个问题:

如何将原始变量变换称线性无关的变量?这些成分代表了原来的多少信息?是否有可能解释这些成分?

[ 3 ] 具体计算步骤

我将省略一些推导和具体的计算,尽量表达出这个过程的思路,使得不需要太好的数学基础也能尽可能看懂。

目标:x=(x1,x2,...,xp)T\bm{x}=(x_1,x_2,...,x_p)^Tx=(x1​,x2​,...,xp​)T 是 ppp 维随机变量,定义一个线性变换 yi=αiTx=α1ix1+α2ix2+...+αpixpy_i=\alpha_i^T\bm{x}=\alpha_{1i}x_1+\alpha_{2i}x_2+...+\alpha_{pi}x_pyi​=αiT​x=α1i​x1​+α2i​x2​+...+αpi​xp​其中,αiT=(α1i,α2i,...,αpi)\alpha_i^T=(\alpha_{1i},\alpha_{2i},...,\alpha_{pi})αiT​=(α1i​,α2i​,...,αpi​),从而将 x\bm{x}x 转变为 ppp 维随机变量 y\bm{y}y,使得满足以下条件:

系数向量 αiT\alpha_i^TαiT​ 是单位向量,即αiTαi=1\alpha_i^T\alpha_i=1αiT​αi​=1变量 yiy_iyi​与yjy_jyj​互不相关y1y_1y1​是 xxx所有线性变换中方差最大的,y2y_2y2​是与y1y_1y1​不相关的xxx的所有线性变换中方差最大的……yiy_iyi​是与y1,y2,...,yi−1y_1,y_2,...,y_{i-1}y1​,y2​,...,yi−1​都不相关的xxx的所有线性变换中方差最大的

第一个条件表明线性变换是正交变换,α1,α2,...,αp\alpha_1,\alpha_2,...,\alpha_pα1​,α2​,...,αp​是一组标准正交基,第二、三个条件给出了求主成分的方法。那么,再具体一点,怎么求呢?

先要介绍一个定理:

设 x\bm{x}x 是 ppp 维随机变量,Σ\SigmaΣ 是 x\bm{x}x 的协方差矩阵,Σ\SigmaΣ 的特征值分别是 λ1≥λ2≥...≥λp\lambda_1\geq\lambda_2\geq...\geq\lambda_pλ1​≥λ2​≥...≥λp​,特征值对应的单位特征向量分别是 α1,α2,...,αm\alpha_1,\alpha_2,...,\alpha_mα1​,α2​,...,αm​,则 x\bm{x}x 的第 kkk 主成分是 yk=αkTx=α1kx1+α2kx2+...+αmkxmy_k=\alpha_k^T\bm{x}=\alpha_{1k}x_1+\alpha_{2k}x_2+...+\alpha_{mk}x_myk​=αkT​x=α1k​x1​+α2k​x2​+...+αmk​xm​ x\bm{x}x的第 kkk 主成分的方差是 var(yk)=αkTΣαk=λkvar(y_k)=\alpha_k^T\Sigma\alpha_k=\lambda_kvar(yk​)=αkT​Σαk​=λk​即协方差矩阵 Σ\SigmaΣ 的第 kkk个特征值。

这个定理给出了求主成分的方法,即第一主成分 y1=α1Txy_1=\alpha_1^T\bm{x}y1​=α1T​x, 只要求出系数向量 α1\alpha_1α1​即可。而求解α1\alpha_1α1​是一个约束最优化问题,可以表达成如下形式,然后用拉格朗日乘子法求解。

max⁡α1α1TΣα1\max\limits_{\alpha_1}\quad \alpha_1^T\Sigma\alpha_1α1​max​α1T​Σα1​s.t.α1Tα1=1s.t.\quad\alpha_1^T\alpha_1=1 s.t.α1T​α1​=1同理,求第二主成分可以表达成以下约束最优化问题:max⁡α2α2TΣα2\max\limits_{\alpha_2}\quad \alpha_2^T\Sigma\alpha_2α2​max​α2T​Σα2​s.t.α1TΣα2=0,α2TΣα1=0s.t.\quad\alpha_1^T\Sigma\alpha_2=0, \alpha_2^T\Sigma\alpha_1=0s.t.α1T​Σα2​=0,α2T​Σα1​=0α2Tα2=1\alpha_2^T\alpha_2=1α2T​α2​=1 这样就能够计算出所有的系数向量了,求解的过程在此省略。

注:实际问题中,由于变量的协方差矩阵未知,因而可以用样本协方差矩阵代替,同时为了避免受到量纲的影响,通常用样本相关阵R\bm{R}R 代替样本协方差矩阵,这等价于用标准化数据的协方差矩阵(标准化后的数据各个变量的均值为0,方差为1)。

这里规定一些符号:

[ 4 ] 求各个成分的累计贡献率

一个成分的重要程度由其方差占总方差的比例来衡量。对于第 iii 个成分,其方差为特征值 λi\lambda_iλi​(由上面的定理得到),总方差为 ∑i=1pλi\sum_{i=1}^p\lambda_i∑i=1p​λi​,则第 iii 个成分贡献率为 λi/∑i=1pλi\lambda_i/\sum_{i=1}^p\lambda_iλi​/∑i=1p​λi​

若使用样本相关阵,则计算出的特征向量 ai\bm{a_i}ai​ 都是单位向量,第 iii 个主成分和第 jjj 个原始变量之间的相关系数为 liaij\sqrt{l_i}a_{ij}li​​aij​,也就是—>

【第 iii 个特征向量 ai\bm{a_i}ai​】与【相应的特征值的平方根li\sqrt{l_i}li​​ 】的乘积 的各个分量为【第 iii 个主成分和各个原始变量之间的相关系数】

一些软件将 liai\sqrt{l_i}\bm{a_i}li​​ai​ 定义为载荷,而有的将单位特征向量 ai\bm{a}_iai​ 定义为载荷。所谓 “载荷” 就是 “变量在主成分上的载荷”,也就是原始变量与主成分之间的相关系数。

这里有两个常用的工具:碎石图载荷图

碎石图描述了各个成分的贡献率及累计贡献率的变化。

载荷图描述主成分和原始变量的相关系数,每一点的横坐标为相应变量和第一主成分的相关系数,纵坐标为其与第二主成分的相关系数。

[ 5 ] 主成分分析的SPSS和Python实现

SPSS实现

相关设置

【分析】—【降维】—【因子分析】— 选择变量

结果分析

相关性矩阵描述变量之间的相关性,例如利润和创汇之间相关性很高,相关系数为0.871.

提取出四个主成分,前两个主成分的方差解释率已经达到了90.772%,保留了大部分的信息。

Python实现

import pandas as pdimport numpy as npfrom sklearn.decomposition import PCAdata=pd.read_csv(r'C:\Users\Lenovo\Desktop\PCA.csv')X=np.array(data)pca=PCA(n_components=2) # 设置主成分个数为2pca.fit(X) print(pca.explained_variance_ratio_) # 输出前两个主成分的方差贡献率

[ 6 ] 总结

如果有一组数据,一共有 k 个变量,对其进行主成分分析,一般过程应当是:

z-score标准化,消除量纲的影响求出变量之间的相关系数矩阵 Rk×kR_{k×k}Rk×k​求R的特征根,并按从大到小排列 λ1,λ2,...λk\lambda_1,\lambda_2,...\lambda_kλ1​,λ2​,...λk​,并求出其一组长度为1,相互正交的特征向量 b1,b2,...,bkb_1,b_2,...,b_kb1​,b2​,...,bk​取 λ1,λ2,...λq(q<k)\lambda_1,\lambda_2,...\lambda_q(q<k)λ1​,λ2​,...λq​(q<k),计算 Y1=b1XT,....,Yq=bqXTY_1=b_1X^T,....,Y_q=b_qX^TY1​=b1​XT,....,Yq​=bq​XT,即为所求

如果觉得《主成分分析原理以及SPSS和Python实现》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。