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