主成分分析的應用之sklearn.decomposition模塊的PCA函數
一、模型建立整體步驟

二、數據
2297.86 589.62 474.74 164.19 290.91 626.21 295.20 199.03
2262.19 571.69 461.25 185.90 337.83 604.78 354.66 198.96
2303.29 589.99 516.21 236.55 403.92 730.05 438.41 225.80
2308.70 551.14 476.45 293.23 406.44 785.74 494.04 254.10
2337.65 589.28 509.82 334.05 442.50 850.15 563.72 246.51
2418.96 618.60 454.20 429.60 615.00 1065.12 594.48 164.28
2702.34 735.01 475.36 459.69 790.26 1025.99 741.60 187.81
3015.32 779.68 474.15 537.95 865.45 1200.52 903.22 196.77
3135.65 849.53 583.50 629.32 929.92 1391.11 882.41 221.85
3415.92 1038.98 615.74 705.72 976.02 1449.49 954.56 242.26
三、代碼實現(含詳細注釋)
#程序文件ex12_1.py
import numpy as np
from sklearn.decomposition import PCA
from scipy.stats import zscorea=np.loadtxt('data12_1.txt')
# scipy.stats的zscore函數對數組a中的數據進行標準化處理,并將結果賦值給變量b。
# 標準化處理是將數據轉換為以0為均值,以標準差為1的分布,
# 這樣做的目的是消除不同量綱的影響,使得數據具有可比性。
# zscore函數計算每個值與其均值的差,然后除以該數據的標準差,
# 從而得到Z分數(也稱為標準分數)。
# 參數ddof=1指定在計算標準差時使用分母N-1(其中N是數據的數量),這是統計學中的樣本標準差計算方式(無偏估計)。
# 如果ddof=0,則使用N作為分母計算標準差,這通常對應于總體標準差。
b=zscore(a, ddof=1) #數據標準化
# 創建一個PCA實例,使用數據集b來“擬合”這個實例(即計算PCA轉換所需的參數)
md=PCA().fit(b) #構造并擬合模型
print('特征值為:', md.explained_variance_)
print('各主成分貢獻率:', md.explained_variance_ratio_)
# .components_:這是md對象的一個屬性,它通常存儲了數據分解或降維后的結果。在PCA的上下文中,components_屬性包含了主成分的方向(或者說是“軸”),
# 這些主成分是用來解釋原始數據集方差的最大方向。每個主成分都是一個向量,向量的長度等于原始數據的特征數。
xs1=md.components_ #提出各主成分系數,每行是一個主成分
print('各主成分系數:\n',xs1)# axis=0代表沿著行的方向(即垂直方向,對列進行求和),而axis=1代表沿著列的方向(即水平方向,對行進行求和)。
# 因此,axis=1意味著會對xs1的每一行進行求和。
check=xs1.sum(axis=1,keepdims=True) #計算各個主成分系數的和
# xs1 * np.sign(check):這個操作是逐元素的乘法。
# xs1數組中的每個元素與np.sign(check)數組中對應位置的元素相乘。這意味著:
# 如果check中的某個元素為正,xs1中對應的元素保持不變(因為乘以1)。
# 如果check中的某個元素為負,xs1中對應的元素取反(因為乘以-1)。
# 如果check中的某個元素為零,xs1中對應的元素將變為零(因為乘以0)。
xs2=xs1*np.sign(check) #調整主成分系數,和為負時乘以-1
print('調整后的主成分系數:', xs2)
三、結果及其分析
特征值為: [6.27943341e+00 1.30599080e+00 2.74277611e-01 9.97624700e-022.31016993e-02 1.22233669e-02 4.69357480e-03 5.17066158e-04]
各主成分貢獻率: [7.84929176e-01 1.63248850e-01 3.42847014e-02 1.24703088e-022.88771241e-03 1.52792086e-03 5.86696851e-04 6.46332697e-05]
各主成分系數:[[ 0.39186166 0.38439344 0.3059243 0.39231584 0.38537825 0.389613220.38389911 0.05908768][-0.0210478 0.02214509 0.47783697 -0.08905605 -0.19878256 -0.1043221-0.11376475 0.83634169][ 0.14762176 0.39254883 0.57745685 -0.20021017 -0.15914777 -0.1347164-0.4303164 -0.47108809][ 0.47832186 0.48941314 -0.44488132 -0.27708115 0.02393188 -0.465646730.07989617 0.18222681][-0.09762149 -0.27604773 0.34873203 -0.35508891 0.52307577 -0.456434080.4158212 -0.10824944][ 0.70552867 -0.53549607 0.049896 -0.32914209 -0.14716623 0.28505603-0.02367193 -0.03426265][-0.08102349 0.10492282 0.11905975 -0.07206231 -0.68369188 -0.020605350.68706375 -0.15212634][ 0.28557308 -0.29011082 0.09180137 0.6940343 -0.15286467 -0.55886444-0.05098258 -0.07665729]]
調整后的主成分系數: [[ 0.39186166 0.38439344 0.3059243 0.39231584 0.38537825 0.389613220.38389911 0.05908768][-0.0210478 0.02214509 0.47783697 -0.08905605 -0.19878256 -0.1043221-0.11376475 0.83634169][-0.14762176 -0.39254883 -0.57745685 0.20021017 0.15914777 0.13471640.4303164 0.47108809][ 0.47832186 0.48941314 -0.44488132 -0.27708115 0.02393188 -0.465646730.07989617 0.18222681][ 0.09762149 0.27604773 -0.34873203 0.35508891 -0.52307577 0.45643408-0.4158212 0.10824944][-0.70552867 0.53549607 -0.049896 0.32914209 0.14716623 -0.285056030.02367193 0.03426265][ 0.08102349 -0.10492282 -0.11905975 0.07206231 0.68369188 0.02060535-0.68706375 0.15212634][-0.28557308 0.29011082 -0.09180137 -0.6940343 0.15286467 0.558864440.05098258 0.07665729]]
由結果可知前兩個特征值的累積量貢獻率達到了94.82%,主成分分析效果很好,因此后續直接對這兩個主成分的特征值進行詳細的分析即可。