一.PCA概述
PCA是常用的数据降维方法。当数据维度较高,变量个数多且有一定程度的相关性时,变量间的信息存在重叠,此时利用主成分分析(PCA)能够将多个变量化为少数几个互不相关的主成分。这些主成分通常表示为原始变量的线性组合,它们能够反映原始数据大部分的信息,并且所含的信息互不重叠。
设x=(x1,x2,...xp)'为一个p维随机向量,用变换y=T'x得到主成分向量y
该正交变换的几何意义是将x1,x2,...xp构成的原p维坐标轴作一正交旋转,得到新坐标系,一组正交向量t1,t2,...,tp表明了新坐标系的方向。
从几何上看,就是将原数据集移动至原点为中心,保持原点不动,在空间里转动坐标轴系,在转动的过程中使第一主成分方向的椭球轴最长,第二主成分次之,其后主成分依次递减。在转的同时协方差矩阵一直在跟着变化,当协方差矩阵变成对角矩阵时,各个轴相互垂直,得到所要的解。
求解的过程是从原始数据的相关矩阵出发,得到特征根λi以及对应的特征向量ti,λi即为第i个主成分的方差,ti的值则是第i个主成分在原始变量上的载荷。使用相关矩阵而不是协方差矩阵的原因有二:1.使用协方差矩阵会受到原始数据量纲的影响 2.各变量方差的差异较大时,PCA的结果过于照顾方差大的变量。因此,做PCA首先要将各个原始变量做标准化处理。PS:特例也是有的,如果各原始变量量纲和方差大致相同,协方差矩阵更有优势,因为它能保留对角线上的信息,而相关矩阵对角线上的值都是1
二.SAS实现
#数据标准化
proc standard data=tmp1.innovation mean=0 std=1 out=a1;
run;
#主成分分析
proc princomp data=a1 n=4 prefix=F out=a2; #n为要输出的主成分的个数,prefix为主成分的前缀
run;
#对前两个主成分做散点图
proc plot data=a2;
plot F1*F2 $region=‘*’/href=0 vref=0;
run;
三.对SAS输出结果的分析
上图输出的是相关系数矩阵以及特征值的信息,前4个主成分能够解释87.88%的信息,前两个主成分能够解释原始数据74%的信息。
以上是特征向量的信息,从图中可以看出在F1的线性表达式中,COLLEGE、PRDEX、RDINTENSITY等的系数较大,且都为正值,可以把F1解释成人均科研投入的主成分;同理,可以把F2解释成人均科研产出的主成分。但F3就很难解释了,既然难解释,F1,F2的累计贡献率74%也不算低,F3、F4可以放弃(保留几个主成分主要看有多少个能用实际含义解释)
主成分的散点图在探索性数据分析中相当有用,可以在直觉上反映大部分信息,还能有效地检测异常值。从图中可以直观地看出(纵向),北上广苏浙在人均科研投入上领先全国。
四.sklearn实现PCA
from sklearn.decomposition import PCA
pca=PCA(n_components=4,whiten= )
newdata=pca.tranform_fit(data)
whiten是白化的选项,默认为False,白化的作用是使PCA得到的各个新特征有相同的方差,在深度学习领域有较多应用