使用主成分分析减少维度

主成分分析查找特征的线性组合序列。第一个线性组合最大化特征的方差(受单位约束)。以下线性组合中的每一个最大化子空间中的特征的方差,该子空间与先前线性组合所跨越的特征正交。

常见的降维技术是仅使用 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])