我有这个蛋白质数据集,我需要对其执行 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?