0

我有这个蛋白质数据集,我需要对其执行 RFE。有 100 个带有二进制类标签(生病 - 1,健康 - 0)的示例和每个示例的 9847 个特征。为了降低维度,我正在使用 LogisticRegression 估计器和 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?

4

1 回答 1

0

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

rfecv.n_features

查看找到的功能和:

 rfec.ranking

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

于 2018-08-20T12:46:38.057 回答