在 scikit-learn 和 PCA 中使用向后特征选择进行特征选择

问题描述 投票:0回答:1

我已经使用 PCA 和以下代码计算了 DF 中所有列的分数,其中 DF 有 312 列和 650 行:

all_pca=PCA(random_state=4)
all_pca.fit(tt)
all_pca2=all_pca.transform(tt)
plt.plot(np.cumsum(all_pca.explained_variance_ratio_) * 100)  
plt.xlabel('Number of components')
plt.grid(which='both', linestyle='--', linewidth=0.5)
plt.xticks(np.arange(0, 330, step=25))
plt.yticks(np.arange(0, 110, step=10))
plt.ylabel('Explained variance (%)')  
plt.savefig('elbow_plot.png', dpi=1000)

结果如下图。

我的主要目标是仅使用随机森林回归、梯度提升、OLS回归和LASSO的重要特征。如您所见,100 列描述了我的 Dataframe 中 95.2% 的方差。

我可以使用这个阈值(100 列)进行向后特征选择吗?

python pca feature-selection
1个回答
0
投票

如您所见,100 列描述了我的数据框中 95.2% 的方差。

图表告诉您,100 个 PCA 组件 捕获了 95% 的方差。这 100 个组件并不对应 100 个单独的特征。每个 PCA 组件都是通过将所有功能组合在一起而制成的,从而为您提供了一个组件。

当 100 个 PCA 分量捕获 95% 的方差时,这意味着您原来的 312 列可以线性组合成更少(100)个新列,并且在此过程中您只丢失 5% 的信息。它是特征集内在维度的度量。

我可以使用这个阈值(100 列)进行向后特征选择吗?

解释 95% 的 100 个 PCA 组件并不能真正告诉您哪些单独的特征(或其中有多少)是重要的,因为每个 PCA 组件都是所有特征的组合。此外,95% 指的是特征的可变性 - 这并不意味着 100 个 PCA 组件对目标有用。

也许您可以使用这 100 个组件来指导您在使用前向特征选择还是后向特征选择之间进行选择。在这种情况下,数据集的内在维度更接近 100,而不是 312,因此我会选择前向选择,因为看起来有用特征的数量可能小于原始大小。

如果您在特征选择之前运行 PCA,它会从原始特征中创建特征(PCA 组件),在此过程中您可能会失去可解释性,因为新特征可能是原始特征的混乱线性组合.

识别有用特征的一种方法是使用原始特征在随机森林上进行前向(或后向)选择,并在达到 95% 准确度等分数阈值时停止。然后您可以将这些选定的功能用于其他型号。

© www.soinside.com 2019 - 2024. All rights reserved.