1. 程式人生 > >資料預處理-資料規約-屬性規約

資料預處理-資料規約-屬性規約

原資料:

#-*- 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]]