数据分析-------主成分分析

最近在看《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)
View Code

自己跑跑数据理解的更好,更理解。

 数据我上传你们自己下载吧

https://files.cnblogs.com/files/zerozs/principal_component.zip

posted @ 2017-12-20 21:19  Zero_zs  阅读(6143)  评论(0编辑  收藏  举报