SelectFromModel() 如何从 from_model.py 工作?
Posted
技术标签:
【中文标题】SelectFromModel() 如何从 from_model.py 工作?【英文标题】:How does SelectFromModel() work from from_model.py? 【发布时间】:2018-12-19 19:12:49 【问题描述】:fsel = ske.ExtraTreesClassifier().fit(X, y)
model = SelectFromModel(fsel, prefit=True)
我正在尝试通过 ExtraTreesClassifier 训练数据集 SelectFromModel() 函数如何确定重要性值以及它返回什么?
【问题讨论】:
【参考方案1】:如SelectFromModel
的文档中所述:
阈值:字符串,浮点数,可选默认无
用于特征选择的阈值。重要性大于或等于的特征被保留,而其他特征被丢弃。如果是“median”(分别为“mean”),则阈值是特征重要性的中值(resp. the mean)。也可以使用比例因子(例如,“1.25*mean”)。如果 None 并且如果估计器的参数惩罚设置为 l1,无论是显式还是隐式(例如 Lasso),使用的阈值是 1e-5。否则,默认使用“均值”。
在您的情况下,threshold
是默认值 None
,您的 ExtraTreesClassifier 中 feature_importances_
的平均值将用作阈值。
示例
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 特征(重要性大于阈值的特征)。您可以使用拟合的 SelectFromModel 类的transform
方法从输入数据中选择这些特征。
【讨论】:
以上是关于SelectFromModel() 如何从 from_model.py 工作?的主要内容,如果未能解决你的问题,请参考以下文章
Python - 带有朴素贝叶斯的 SelectFromModel
ValueError:使用 GridSearchCV 时估计器 SelectFromModel 的参数 C 无效
来自 sklearn 的 SelectFromModel 在随机森林和梯度提升分类器上提供了显着不同的特征