數據分析-------主成分分析


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM