【问题标题】:About mutual_info_classif in sklearn, so confused about usage of random_state in terms of feature selection关于sklearn中的mutual_info_classif,所以在特征选择方面对random_state的使用感到困惑
【发布时间】:2020-02-22 21:45:53
【问题描述】:

我使用了来自 sklearn 的mutual_info_classif 和 selectPercentile 在数据集中进行特征选择。我发现我可以将 random_state 设置为 0 以确保每次选择的功能都可以相同,例如下面的代码:

mi = mutual_info_classif(X_train, y_train, random_state=0)
print(mi)
sel_mi = SelectPercentile(mutual_info_classif, percentile=10).fit(X_train,y_train)

另一个,我不需要设置 random_state 并使其成为默认值。但这会使每个选择都会有所不同。

mi = mutual_info_classif(X_train, y_train)

我想知道如果每次的特征选择都一样,如何判断是不是最好的特征选择?

如果每次选择都不一样,是否意味着这种特征选择没有意义?

【问题讨论】:

    标签: random scikit-learn feature-selection


    【解决方案1】:

    ML 与其说是一门科学,不如说是一门艺术。无论种子如何,某些算法将始终返回相同的结果,例如线性回归,其他,例如决策树,将根据子样本返回不同的结果,以及一些,例如随机森林,即使在相同的子样本上也可能返回不同的结果,具体取决于种子。

    根据子样本返回不同结果的算法意味着您的算法取决于数据分布,并且可能会根据您提供的种子而改变。这并不意味着您的算法是无用的。您可能会更加关注始终出现最重要的特征,而与您提供的数据子样本无关。

    您可以通过提供更多数据获得更一致的结果,从而在数据分布方面通过抽样获得更一致的结果。

    最后的话。就探索数据而言,特征重要性似乎是一项重要的练习,在收集或清理数据时必须更加注意什么。但它在模型构建方面并不那么重要,因为大多数算法都内置了特征选择机制。

    【讨论】:

    • 感谢您的回答。根据我的理解,我认为您的意思是注意始终出现的特征很重要。这意味着我们必须做几个实验来确认哪个特征对建模很重要。但是,在找到最佳特征组合之前,我如何判断需要做多少次实验呢?越来越多的测试是否更有利于找到最佳结果?
    • 正如我所说,它更像是一门艺术而不是一门科学。多少次测试或 CV 拆分,由您决定。顺便说一句,如果你看一下小数据上最简单的线性回归,如果你在不同的样本上运行它,你可能会得到不同的结果。然后您必须就哪种型号最好(在您的客厅中最重要的型号)做出结论。
    • 找到相同的重要功能集不是您的任务。在现实生活中,你总是在处理样本,你永远不会看到 full 数据集(直到你永远活着,明天生命就停止了)。你真正的任务是在那些子样本上找到始终表现最好的特征,不管子样本有多奇怪。当然,您不必走极端,您必须确保您的子样本或多或少类似于您对真实数据的理解。这样一来,您的模型可能会偶尔错过目标,但从长远来看,它的性能会更高。
    • 目标是更多数据和公平的二次抽样,而不是相同的特征重要性。
    猜你喜欢
    • 2019-01-18
    • 2017-01-02
    • 2018-09-27
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    相关资源
    最近更新 更多