使用主成分分析減少維度

主成分分析查詢特徵的線性組合序列。第一個線性組合最大化特徵的方差(受單位約束)。以下線性組合中的每一個最大化子空間中的特徵的方差,該子空間與先前線性組合所跨越的特徵正交。

常見的降維技術是僅使用 k 個第一個這樣的線性組合。假設特徵是矩陣 XN 行和列。第一 K 線性組合形成矩陣 β K行和 K 列。乘積 具有 n 行和 k 列。因此,得到的矩陣 βk 可以被認為是從 mk 維度的減少,保留了原始矩陣 X 的高方差部分。

scikit-learn 中,PCA 用 sklearn.decomposition.PCA 執行。例如,假設我們從 100 X 7 矩陣開始,構造使得方差僅包含在前兩列中(通過縮小最後 5 列):

import numpy as np
np.random.seed(123) # we'll set a random seed so that our results are reproducible
X = np.hstack((np.random.randn(100, 2) + (10, 10), 0.001 * np.random.randn(100, 5)))

讓我們執行減少到 2 維:

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(X)

現在讓我們檢查結果。首先,這是線性組合:

pca.components_
# array([[ -2.84271217e-01,  -9.58743893e-01,  -8.25412629e-05,
#           1.96237855e-05,  -1.25862328e-05,   8.27127496e-05,
#          -9.46906600e-05],
#        [ -9.58743890e-01,   2.84271223e-01,  -7.33055823e-05,
#          -1.23188872e-04,  -1.82458739e-05,   5.50383246e-05,
#           1.96503690e-05]])

注意每個向量中的前兩個分量如何比其他向量大幾個數量級,表明 PCA 認識到方差主要包含在前兩列中。

要檢查此 PCA 解釋的方差比率,我們可以檢查 pca.explained_variance_ratio_

pca.explained_variance_ratio_
# array([ 0.57039059,  0.42960728])