【问题标题】:PCA features do not match original featuresPCA 特征与原始特征不匹配
【发布时间】:2019-09-27 15:29:27
【问题描述】:

我正在尝试使用 PCA 减少特征尺寸。我已经能够将 PCA 应用于我的训练数据,但我很难理解为什么减少的特征集 (X_train_pca) 与原始特征 (X_train) 没有相似之处。

print(X_train.shape) # (26215, 727)
pca = PCA(0.5)
pca.fit(X_train)
X_train_pca = pca.transform(X_train)
print(X_train_pca.shape) # (26215, 100)

most_important_features_indicies = [np.abs(pca.components_[i]).argmax() for i in range(pca.n_components_)]
most_important_feature_index = most_important_features_indicies[0]

X_train_pca 中的第一个特征向量不应该只是X_train 中第一个特征向量的子集吗?例如,为什么以下不等于 True?

print(X_train[0][most_important_feature_index] == X_train_pca[0][0]) # False

此外,X_train 的第一个特征向量中的所有特征都不在X_train_pca 的第一个特征向量中:

for i in X_train[0]:
    print(i in X_train_pca[0])
# False
# False
# False
# ...

【问题讨论】:

标签: python machine-learning pca feature-selection


【解决方案1】:

PCA 将您的高维特征向量转换为低维特征向量。 它不是简单地确定原始空间中最不重要的索引并删除该维度。

【讨论】:

  • 那么,如果在我的离线训练数据上使用 PCA 并训练具有缩减特征集的模型,那么在在线推理期间我将无法转换推理输入?
  • @SoftwareStudent123 PCA 计算从原始空间到缩减空间的转换矩阵。您使用相同的矩阵将推理输入转换为缩减空间。
  • 啊,我明白了。我剩下的唯一问题是如何获得这个转换矩阵,以便我可以转换我的推理输入?
  • @SoftwareStudent123 我认为您可以再次使用pca.transform,这应该为您应用矩阵。但我强烈建议您阅读 pca 背后的数学知识。
【解决方案2】:

这是正常的,因为 PCA 算法会对您的数据进行转换:

PCA 在数学上被定义为一种正交线性变换,它将数据变换到一个新的坐标系,使得数据的某个投影的最大方差位于第一个坐标(称为第一个主成分)上,第二个最大第二个坐标的方差,依此类推。 (https://en.wikipedia.org/wiki/Principal_component_analysis#Dimensionality_reduction)

运行以下代码示例,查看 PCA 算法对简单高斯数据集的影响。

from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot as plt

pca = PCA(2)
X = np.random.multivariate_normal(mean=np.array([0, 0]), cov=np.array([[1, 0.75],[0.75, 1]]), size=(1000,))
X_new = pca.fit_transform(X)

plt.scatter(X[:, 0], X[:, 1], s=5, label='Initial data')
plt.scatter(X_new[:, 0], X_new[:, 1], s=5, label='Transformed data')
plt.legend()
plt.show()

【讨论】:

    猜你喜欢
    • 2019-12-22
    • 1970-01-01
    • 2019-08-08
    • 2021-07-30
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    相关资源
    最近更新 更多