使用主成分分析减少维度
主成分分析查找特征的线性组合序列。第一个线性组合最大化特征的方差(受单位约束)。以下线性组合中的每一个最大化子空间中的特征的方差,该子空间与先前线性组合所跨越的特征正交。
常见的降维技术是仅使用 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])