首页 > 解决方案 > SelectFromModel() 如何从 from_model.py 工作?

问题描述

fsel = ske.ExtraTreesClassifier().fit(X, y)

model = SelectFromModel(fsel, prefit=True)

我正在尝试通过ExtraTreesClassifier训练数据集SelectFromModel()函数如何 决定重要性值以及它返回什么?

标签: machine-learningscikit-learnclassificationrandom-forestsupervised-learning

解决方案


如文档中所述SelectFromModel

阈值:字符串,浮点数,可选默认值无

用于特征选择的阈值。保留重要性大于或相等的特征,而丢弃其他特征。如果是“median”(分别为“mean”),则阈值是特征重要性的中值(resp. the mean)。也可以使用比例因子(例如,“1.25*mean”)。如果 None 并且如果估计器将参数惩罚设置为 l1,无论是显式还是隐式(例如 Lasso),使用的阈值是 1e-5。否则,默认使用“均值”。

在您的情况下threshold是默认值,None并且feature_importances_ExtraTreesClassifier 中的平均值将用作阈值。

例子

from sklearn.datasets import load_iris
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.feature_selection import SelectFromModel

iris = load_iris()
X, y  = iris.data, iris.target
clf = ExtraTreesClassifier()
model = SelectFromModel(clf)
SelectFromModel(estimator=ExtraTreesClassifier(bootstrap=False, class_weight=None, criterion='gini',
           max_depth=None, max_features='auto', max_leaf_nodes=None,
           min_impurity_decrease=0.0, min_impurity_split=None,
           min_samples_leaf=1, min_samples_split=2,
           min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
           oob_score=False, random_state=None, verbose=0, warm_start=False),
        norm_order=1, prefit=False, threshold=None)
model.fit(X, y)
model.threshold_
0.25
model.estimator_.feature_importances_
array([0.09790258, 0.02597852, 0.35586554, 0.52025336])
model.estimator_.feature_importances_.mean()
0.25

如您所见,拟合模型是 SelectFromModel 的一个实例,其中 ExtraTreesClassifier 作为估计器。阈值是0.25,它也是拟合估计器的特征重要性的平均值。基于特征重要性和阈值,模型将仅保留输入数据的第 3 和第 4 个特征(重要性大于阈值的特征)。您可以使用transform拟合的 SelectFromModel 类的方法从输入数据中选择这些特征。


推荐阅读