来自 sklearn 的 SelectFromModel 在随机森林和梯度提升分类器上提供了显着不同的特征
Posted
技术标签:
【中文标题】来自 sklearn 的 SelectFromModel 在随机森林和梯度提升分类器上提供了显着不同的特征【英文标题】:SelectFromModel from sklearn gives significantly different features on random forest and gradient boosting classifier 【发布时间】:2021-07-31 15:26:40 【问题描述】:如标题中所述,我使用 sklearn 中的 SelectFromModel 为我的随机森林和梯度提升分类模型选择特征。
#feature selection performed on training dataset to prevent overfitting
sel = SelectFromModel(GradientBoostingClassifier(n_estimators=10, learning_rate=0.25,max_depth=1, max_features = 15, random_state=0).fit(X_train_bin, y_train))
sel.fit(X_train_bin, y_train)
#returns a boolean array to indicate which features are of importance (above the mean threshold)
sel.get_support()
#shows the names of the selected features
selected_feat= X_train_bin.columns[(sel.get_support())]
selected_feat
为随机森林和梯度提升模型返回的布尔数组完全不同。随机森林特征选择告诉我要删除额外的 4 列(从 25 个特征中),梯度提升模型上的特征选择告诉我要删除几乎所有内容。这里发生了什么?
编辑:我正在尝试比较这两个模型在我的数据集上的性能。我是否应该移动阈值,以便我至少拥有大致相同数量的要训练的特征?
【问题讨论】:
绝对没有理由它们应该相同,甚至相似。这种特征选择方法背后也没有任何理论,它们只是有时似乎有效的启发式技巧。 您能否详细说明它们的启发式性质? 恐怕在 SO 中的 cmets 不适合这样做。请注意machine-learning
tag info 中的介绍和NOTE(实际上也适用于此处,尽管您没有标记您的问题)。
【参考方案1】:
他们没有理由选择相同的变量。 GradientBoostingClassifier
构建每棵树以改进上一步的错误,而RandomForestClassifier
训练与彼此的错误无关的独立树。
他们可能选择不同特征的另一个原因是criterion
,这是随机森林的熵和梯度提升的弗里德曼 MSE。最后,这可能是因为两种算法在每次拆分时都会选择随机的特征子集。因此,他们并没有按照相同的顺序比较相同的变量,这自然会产生不同的重要性。
【讨论】:
以上是关于来自 sklearn 的 SelectFromModel 在随机森林和梯度提升分类器上提供了显着不同的特征的主要内容,如果未能解决你的问题,请参考以下文章
来自 sklearn.metrics.silhouette_samples 的 MemoryError
sklearn 中的 RFECV,来自 grid_scores_ 的分数
F_Regression 来自 sklearn.feature_selection