当我将XGBClassifier
与SelectFromModel
一起使用时,无论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')