Scikit learn 使用CV的递归特征删除不';t减少特征计数

Scikit learn 使用CV的递归特征删除不';t减少特征计数,scikit-learn,feature-selection,rfe,Scikit Learn,Feature Selection,Rfe,我有一个蛋白质数据集,我需要对它执行RFE。有100个带有二进制类标签(sick-1、health-0)的示例,每个示例有9847个特性。为了降低维度,我使用逻辑回归估计器和5倍CV进行RFECV。代码如下: model = LogisticRegression() rfecv = RFECV(estimator=model, step=1, cv=StratifiedKFold(5), n_jobs=-1) rfecv.fit(X_train, y_train) print("Nu

我有一个蛋白质数据集,我需要对它执行RFE。有100个带有二进制类标签(sick-1、health-0)的示例,每个示例有9847个特性。为了降低维度,我使用逻辑回归估计器和5倍CV进行RFECV。代码如下:

model = LogisticRegression()
rfecv = RFECV(estimator=model, step=1, cv=StratifiedKFold(5), n_jobs=-1)
rfecv.fit(X_train, y_train)

print("Number of features selected: %d" % rfecv.n_features_)
所选功能数量:9874

然后,我绘制特征数量与CV分数:

plt.figure()
plt.xlabel("feature count")
plt.ylabel("CV accuracy")
plt.plot(range(1, len(rfecv.grid_scores_) + 1), rfecv.grid_scores_)
plt.show()

我认为正在发生的事情(这就是我需要专家的原因)是第一个峰值显示了最佳的功能数量。之后,曲线下降,只是因为过度拟合而再次开始上升,不是真正的分类,而是示例。会是这样吗?如果是这样,我如何获得这些特性(即第一个峰值的特性),因为rfecv.support只提供达到最高精度的特性(意思是:所有特性)


当我这样做的时候:我如何为RFE选择最好的估计器?这仅仅是通过尝试和错误,通过所有可能的分类器,还是有任何逻辑可以解释为什么我会在线性SVC上使用Logit?

我用于特征相关性的一种方法是RandomForest或ExtremeRandomizedTrees。 我可以使用:

rfecv.n_features
要查看查找和更新功能的数量,请执行以下操作:

 rfec.ranking

按降序查看功能索引。您可以使用的另一种算法是PCA来减少数据集的维数。

此项目是我在uni的一门课程。我没有提到,但我应该比较RFE和PCA。因此,我不能使用随机森林方法