XGBClassifier中plot_importance与feature_importances_的差异及降维选择
XGBoost特征重要性:plot_importance与feature_importances_的差异及降维选择
两者结果不一致的原因
这俩指标计算的是完全不同的特征重要性维度:
model.feature_importances_:返回的是归一化后的增益(Gain)。计算逻辑是把所有特征在所有决策树中分裂时带来的总损失减少量(总增益)求和,然后取每个特征的增益占总增益的比例,所以结果总和为1(百分比形式)。这个指标反映的是特征对模型降低预测损失的实际贡献程度。xgboost.plot_importance():默认展示的是分裂次数(Weight),也就是该特征在所有决策树里被用来划分节点的总次数。如果你想让它和feature_importances_结果匹配,调用时可以指定参数importance_type='gain',此时图中数值会对应未归一化的增益,自行归一化后就和feature_importances_完全一致。
简单来说,一个看的是“特征帮模型减少了多少损失”,一个默认看的是“特征被模型用了多少次”,结果自然存在差异。
降维时该选哪类结果
降维的核心目标是保留对模型预测最有价值的特征,所以优先选model.feature_importances_对应的增益占比结果。
因为增益占比直接衡量了每个特征对提升模型性能的贡献,去掉那些占比极低的特征,对模型预测效果的影响最小。如果用plot_importance默认的分裂次数指标,可能会留下那些被频繁使用但实际对降低损失没多大帮助的特征,反而达不到高效降维的目的。
当然如果你的场景更关注模型的解释性(比如想知道模型最“依赖”哪些特征),分裂次数可以作为参考,但降维场景下还是增益占比更靠谱。
内容的提问来源于stack exchange,提问作者Farah Amirah
相关产品推荐
相关产品推荐

