最近在看《Python数据分析与挖掘实战》和在上《模式识别》这门课的时候遇到了---------------主成分分析这个东西所以就学习了查询了一下,学习了一下
参考博客:
http://blog.csdn.net/xyilu/article/details/9569063
主成分分析的主要目的就是:减少决策变量的数目,也就是降维,另一个目的是防范多重共线性。
主成分分析包含以下流程:
1、原始数据标准化。
2、计算标准化变量间的相关系数矩阵。
3、计算相关系数矩阵的特征值和特征向量。
4、计算主成分变量值。
5、统计结果分析,提取所需的主成分。
我们从实战入手,先来个简单的例子,完整体验使用SAS进行主成分分析的过程。准备好图1所示的数据集,该数据集包含5个变量和22个观测。其中变量num用于标识每条观测。
图一
对源数据Practice.PCA_Demo的四个变量var1、var2、var3和var4(以下简称原始变量)做主成分分析,输出结果(包含源数据的所有变量及新增的主成分变量)放在Work.PCA_Demo_out数据集,主成分变量名的前缀使用comp。相关变量的统计结果(均值、方差、特征值、特征向量等)输出到Work.PCA_Demo_stat。
程序运行后,输出界面显示如图2。
图2
输出结果Work.PCA_Demo_out存放了原始数据集的所有变量以及新变量comp1、comp2、comp3和comp4,分别代表第1至第4主成分,它们对原始变量的解释力度依次减少。
图三
一同输出的还有统计结果Work.PCA_Demo_stat:
新的变量comp1和comp2就可以替代原来的四个变量var1、var2、var3和var4,因为这两个变量合起来解释了原来四个变量91.27%的信息,能够满足要求。
作为细节强迫症重度患者,图2~图4只要有个点没搞清楚都觉得寝食难安。
我们先来看图2。
第1部分很简单,指出观测数为22,变量数为4,也就是我们在var语句中指定4个原始变量。
第2部分Simple Statistics是对原始变量的简单描述性统计,Mean是均值,StD是标准偏差(注意标准偏差与标准差的区别)。
Mean的计算公式我们都很熟悉,就是
(1)
标准偏差StD的计算公式是:
(2)
第3部分Correlation Matrix是原始变量的相关系数矩阵,其中的元素代表4个原始变量两两之间的相关系数。
相关系数的计算公式是:
(3)
从原始变量的相关系数矩阵可以看出,变量var1和var2、var1和var4呈现出较为显著的负相关,变量var2和var4则是强烈的正相关,其相关系数高达0.9752。
第4部分Eigenvalues of the Correlation Matrix输出了相关系数矩阵的特征值。Eigenvalue一列从大到小依次展示了4个特征值,特征值越大,表示对应的主成分变量包含的信息越多,对原始变量的解释力度越强。
Difference是相邻两个特征值的差,比如1.74819156 = 2.69946764 - 0.95127608。
Proportion表示主成分的贡献率,也就是,比如第1个特征值的贡献率0.6749 = 2.69946764 / (2.69946764+0.95127608+0.32758452+0.02167176)。
Cumulative则是累计贡献率,到第2个特征值累计贡献率0.9127 = 0.6749 + 0.2378。
我们在判断应提取多少个主成分时,根据的就是累计贡献率。0.9127的累计贡献率说明特征值1和特征值2对应的主成分变量comp1和comp2合起来能够反映原始变量91.27%的信息,能够满足应用需求。这时我们可以作出决策:提取两个主成分comp1和comp2代替4个原始变量。而如果我们希望主成分变量对原始变量的解释力度应达到95%以上,那么就需要加入comp3,共提取3个主成分,其累计贡献率达到99.46%。而提取全部4个主成分变量,则没有达到降维的目的,意义已经不大。至于这个累计贡献率要达到多少才算满足需求,需要视具体业务需求而定,我们的参考值是85%。
第5部分Eigenvectors是特征值对应的特征向量。图5一秒钟告诉你特征值和特征向量如何对应。图中的第1个特征值=2.699467638对应第一个特征向量V=(-0.530270329, 0.582022127, 0.232614551, 0.570923894)。同理可知第2个特征值和第2个特征向量的对应。
图5
这些公式可以去查查《概率论》或者《应用统计》的数据看看
特征值:原始变量相关系数矩阵的特征值。
特征向量:原始变量相关系数矩阵的特征向量。
总结最后就是:
主成分分析包含以下流程:
1、原始数据标准化。 (数据的标准化 基本上都要做的)
2、计算标准化变量间的相关系数矩阵。
3、计算相关系数矩阵的特征值和特征向量。(特征值大,占的比例的成分越大,当所占的比例之和大于要求的是 就用几个成分代表总体)
4、计算主成分变量值。
5、统计结果分析,提取所需的主成分。
下面插入一些Python中的代码和数据《Python数据分析与挖掘实战》

1 #-*- coding: utf-8 -*- 2 #主成分分析 降维 3 import pandas as pd 4 5 #参数初始化 6 inputfile = '../data/principal_component.xls' 7 outputfile = '../tmp/dimention_reducted.xls' #降维后的数据 8 9 data = pd.read_excel(inputfile, header = None) #读入数据 10 11 from sklearn.decomposition import PCA 12 13 pca = PCA(3) 14 pca.fit(data) 15 print("################ print(pca.components_) ###############") 16 print(pca.components_) #返回模型的各个特征向量 17 print("################ print(pca.explained_variance_ratio_) ###############") 18 print(pca.explained_variance_ratio_) #返回各个成分各自的方差百分比 19 low_d = pca.transform(data) 20 print("################ print(low_d) ###############") 21 print(low_d)
自己跑跑数据理解的更好,更理解。
数据我上传你们自己下载吧
https://files.cnblogs.com/files/zerozs/principal_component.zip