【问题标题】:Recursive Feature Elimination (RFE) SKLearn递归特征消除 (RFE) SKLearn
【发布时间】:2018-05-21 04:29:11
【问题描述】:

我创建了一个表格来测试我的理解

    F1  F2  Outcome
0   2   5        1
1   4   8        2
2   6   0        3
3   9   8        4
4  10   6        5

我试图从 F1 和 F2 预测结果

如您所见,F1 与 Outcome 有很强的相关性,F2 是随机噪声

我测试过

pca = PCA(n_components=2)
fit = pca.fit(X)
print("Explained Variance")
print(fit.explained_variance_ratio_)
Explained Variance
[ 0.57554896  0.42445104]

这是我的预期,表明 F1 更重要

但是当我做 RFE(递归特征消除)时

model = LogisticRegression()
rfe = RFE(model, 1)
fit = rfe.fit(X, Y)
print(fit.n_features_)
print(fit.support_)
print(fit.ranking_)
1
[False  True]
[2 1]

它要求我改为保留 F2?它应该要求我保留 F1,因为 F1 是强预测因子,而 F2 是随机噪声……为什么要 F2?

谢谢

【问题讨论】:

    标签: machine-learning scikit-learn


    【解决方案1】:

    您正在使用LogisticRegression 模型。这是一个分类器,而不是一个回归器。因此,您在这里的结果被视为标签(而不是数字)。为了获得良好的训练和预测,分类器需要每个类的多个样本。但是在您的数据中,每个类只存在单行。因此,结果是垃圾,不要当真。

    尝试用任何回归模型替换它,您将看到您认为的结果。

    model = LinearRegression()
    rfe = RFE(model, 1)
    fit = rfe.fit(X, y)
    
    print(fit.n_features_)
    print(fit.support_)
    print(fit.ranking_)
    
    # Output
    1
    [ True False]
    [1 2]
    

    【讨论】:

    • 太好了,我没有注意到它是一个分类器......谢谢兄弟
    • @JNg 还有一件事。在你在那里做的 PCA() 中,你看错了。 PCA 用于将数据转换为比当前形式更容易学习的其他维度。所以它不能告诉你特征的重要性。你可以看到你没有提供y。解释的方差并不重要。它在该列中的数据有多少变化。
    • 嗨 Vivek 想知道 PCA,如果它解释的方差很高,这应该意味着该因素比其他因素更有意义,因此更重要?
    • @JNg 不。请理解,PCA 会先将您的特征转换为其他一些值,然后再找到方差。您看到的解释差异不是您的实际特征,而是两个原始特征混合的转换后的投影组件版本。它主要用于特征减少,您有许多特征并希望将它们减少到 2 或 3 个。然后基于您的新投影特征而不是原始特征,方差数组将只有 2 或 3 个值。也许你会感到困惑,因为你的输出特征也和你的输入一样是 2。
    • 请在此处查看 PCA 的示例和文档:scikit-learn.org/stable/modules/generated/…
    猜你喜欢
    • 2020-03-24
    • 2018-05-23
    • 1970-01-01
    • 2022-11-05
    • 2013-08-17
    • 1970-01-01
    • 2018-10-15
    • 2017-05-10
    • 2018-11-14
    相关资源
    最近更新 更多