scikit的SelectFromModel是如何学习精选功能的



当我将XGBClassifierSelectFromModel一起使用时,无论max_features值如何,算法总是返回大约五个特征

我的问题是:XGBClassifier是否认为我的数据集中只有五个有用的特性?

from sklearn.feature_selection  import SelectFromModel
from xgboost                    import XGBClassifier
sf=SelectFromModel(XGBClassifier(), max_features=10).fit(X, y)

#The output only contains five True, all remaining are False
print(sf.get_support())

要仅根据最大功能进行选择,请设置阈值=-np.inf.

我在文档sklearn.feature_selection中找到了上述文本。这意味着优先级SelectFromModel取决于threshold参数,并返回所有超过阈值的功能(与max_features无关(。

如果你想让max_features完全发挥作用,那么设置threshold=-np.inf,在这种情况下,所有功能都通过了阈值,那么max_features可以选择所需的功能(根据它们的等级(。

您可以使用threshold='median'来获得最好的一半特征,然后在生成的数据集上再调用一次以获得最好的四分之一,依此类推。您可以使用Pipeline来更好地处理重复的特征减少。

sf = SelectFromModel(RandomForestClassifier(), threshold='median')

最新更新