关于sklearn中的mutual_info_classif,所以对random_state在特征选择方面的用法感到困惑

About mutual_info_classif in sklearn, so confused about usage of random_state in terms of feature selection

我使用 mutual_info_classif 和 sklearn 中的 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)

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

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

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

一种算法,return根据子样本得出不同的结果,这意味着您的算法取决于数据分布,并且这可能会根据您提供的种子而改变。这并不意味着您的算法毫无用处。您可能会更加关注始终显示最重要的功能,这些功能与您提供的数据子样本无关。

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

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