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