Scikit learn 改变数据帧位置后,主成分分析(PCA)解释的方差保持不变

Scikit learn 改变数据帧位置后,主成分分析(PCA)解释的方差保持不变,scikit-learn,pca,Scikit Learn,Pca,我有一个数据框,其中a和B用于预测C df = df[['A','B','C']] array = df.values X = array[:,0:-1] Y = array[:,-1] # Feature Importance model = GradientBoostingClassifier() model.fit(X, Y) print ("Importance:") print((model.feature_importances_)*100) #PCA pca = PCA(n

我有一个数据框,其中a和B用于预测C

df = df[['A','B','C']]
array = df.values

X = array[:,0:-1]
Y = array[:,-1]

# Feature Importance
model = GradientBoostingClassifier()
model.fit(X, Y)
print ("Importance:")
print((model.feature_importances_)*100)


#PCA
pca = PCA(n_components=len(df.columns)-1)
fit = pca.fit(X)

print("Explained Variance")
print(fit.explained_variance_ratio_)
这张照片

Importance:
[ 53.37975706  46.62024294]
Explained Variance
[ 0.98358394  0.01641606]
然而,当我改变数据帧位置交换A和B时,只有重要性改变了,但解释差异仍然存在,为什么解释差异没有根据[0.01641606 0.98358394]改变

df = df[['B','A','C']]


Importance:
[ 46.40771024  53.59228976]
Explained Variance
[ 0.98358394  0.01641606]

解释的差异不涉及数据帧的A或B或任何列。它指的是主成分分析法确定的主成分,是一些列的线性组合。这些成分按方差递减的顺序排序,如下所示:

组件:阵列、形状(n个组件、n个特征) 特征空间中的主轴,表示数据中最大方差的方向。组件按解释的方差排序

已解释的变量:数组、形状(n个组件) 由每个选定组件解释的差异量。 等于X的协方差矩阵的最大特征值的n_分量

解释的方差比:数组、形状(n个分量) 每个选定组件解释的差异百分比


因此,功能的顺序不会影响返回的组件的顺序。它确实会影响数组
组件
,该矩阵可用于将主组件映射到特征空间。

谢谢Ivan,现在我想对要保留的重要特征进行排序的唯一方法是使用(model.feature\u importances)由于解释的差异并没有对我进行分类,如果你知道这些工具的实际用途,你可以用它们做很多事情。正如您所注意到的,PCA中没有Y参数,所以您的Y数据甚至没有被PCA使用。PCA不是基于X来预测Y。