【问题标题】:Recursive feature elemination with CV doesn't reduce feature count使用 CV 进行递归特征消除不会减少特征数
【发布时间】:2019-01-26 14:04:53
【问题描述】:

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

【问题讨论】:

    标签: scikit-learn feature-selection rfe


    【解决方案1】:

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

    rfecv.n_features
    

    查看找到了多少功能并:

     rfec.ranking
    

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

    【讨论】:

    • 这个项目是我在大学的一门课程。我没有提到它,但我应该将 RFE 与 PCA 进行比较。因此我不能使用 RandomForest 方法
    猜你喜欢
    • 1970-01-01
    • 2017-05-10
    • 2017-09-29
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 2018-05-21
    • 2019-07-15
    • 2018-05-23
    相关资源
    最近更新 更多