資料預處理-資料規約-屬性規約
原資料:
#-*- coding: utf-8 -*- import pandas as pd from sklearn.decomposition import PCA #PCA主成分分析函式 inputfile = '../data/principal_component.xls' outoutfile = './dimention_reducted.xls' #降維後的資料 data = pd.read_excel(inputfile) pca = PCA() pca.fit(data) pca.components_ #返回模型的各個特徵向量 pca.explained_variance_ratio_ #返回各個成分各自的方差百分比; variance:方差; ratio:百分比
輸出:pca.explained_variance_ratio_
[8.19870356e-01 1.24403427e-01 4.35654729e-02 1.01185073e-02
1.44614964e-03 3.46741246e-04 1.51101937e-04 9.82436662e-05]
從上面的結果可以得到特徵方程det有8個特徵根,對應8個特徵向量以及各個成分的方差百分比(也稱貢獻率),其中方差百分比越大,說明向量的權重越大。當選取前3個主成分時,累計的貢獻率已達到98.78%(81.98%+12.44%+4.36%),說明選取前3個主成分進行計算已經相當不錯了,因此可以重建PCA模型,設定n_components=3,計算出成分結果
#-*- coding: utf-8 -*- import pandas as pd from sklearn.decomposition import PCA #主成分分析函式 inputfile = '../data/principal_component.xls' outputfile = './dimention_reducted.xls' data = pd.read_excel(inputfile) pca = PCA(3) #n_components=3表示PCA演算法中所要保留的主成分個數為3,也即保留下來的特徵個數為3 pca.fit(data) low_d = pca.transform(data) #用它來降低維度 print(low_d) pd.DataFrame(low_d).to_excel(outputfile, index=False) #儲存結果
原始資料從8維降到了3維:
[[ 1.05001221 -5.51748501 -5.91441212]
[-22.99722874 -1.97512405 -0.20900558]
[-13.89767671 3.37263948 -0.79992678]
[ 5.67710353 10.923606 11.64081709]
[ 25.0534891 -6.9734989 0.85775793]
[ -2.81280563 -6.07880095 -2.65207248]
[ 14.1489874 16.43302809 -4.11709058]
[ 41.83184701 -11.32960529 3.20277843]
[ -1.00625614 -2.65780713 -0.27401457]
[-21.33464558 -2.82555148 0.17044138]
[-35.91396474 -5.99120963 3.78629425]
[ 3.6840302 5.68331179 1.42625345]
[ 6.51710808 6.93649707 -7.11782042]]