使用主成分分析減少維度
主成分分析查詢特徵的線性組合序列。第一個線性組合最大化特徵的方差(受單位約束)。以下線性組合中的每一個最大化子空間中的特徵的方差,該子空間與先前線性組合所跨越的特徵正交。
常見的降維技術是僅使用 k 個第一個這樣的線性組合。假設特徵是矩陣 X 的 N 行和米列。第一 K 線性組合形成矩陣 β K 的米行和 K 列。乘積 Xβ 具有 n 行和 k 列。因此,得到的矩陣 βk 可以被認為是從 m 到 k 維度的減少,保留了原始矩陣 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])