PCA功能与原始功能不匹配

时间:2019-09-27 15:29:27

标签: python machine-learning pca feature-selection

我正在尝试使用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
# ...

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这是正常现象,因为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()