XGBoost多输出模型特征重要性获取问题咨询
XGBoost多输出模型中feature_importances_的含义解析
直接使用XGBRegressor(XGBoost 1.6+)训练多输出模型时,feature_importances_返回的是所有目标任务的特征重要性的加权平均值,权重由各任务在训练过程中的损失贡献(梯度与二阶统计量的累积值)决定,并非对应单个目标(第一个/最后一个),也不是简单的算术平均。
原理说明
XGBoost的多输出回归实现逻辑是:
- 在训练时,每棵树的每个叶子节点会为所有目标预测对应的值,模型同时最小化所有目标的损失总和。
- 特征重要性的计算基于特征在所有树中分裂带来的总增益,这里的增益是该分裂对所有目标任务损失降低的总和。最终的
feature_importances_是将每个特征的总增益做归一化处理后的结果,本质是各目标任务特征重要性的加权组合,权重与各任务的训练损失贡献正相关。
与MultiOutputRegressor的区别
scikit-learn的MultiOutputRegressor是为每个目标单独训练一个独立的XGBRegressor,每个子模型各自计算自身目标的特征重要性,因此可以通过estimators_[i].feature_importances_获取单个目标的结果,这和循环训练单目标模型的逻辑完全一致。
而直接使用XGBRegressor训练多输出模型是联合优化所有目标,训练过程中特征的分裂决策会同时考虑所有目标的损失,因此特征重要性是全局加权后的结果。在你的测试代码中,虽然两种方式的预测结果几乎一致(因为make_regression生成的目标相互独立),但特征重要性的计算逻辑不同,所以结果存在差异。
验证思路
你可以通过以下方式验证上述结论:
- 提取每个单目标模型的
feature_importances_。 - 获取XGBoost多输出模型训练时各目标的损失权重(可通过模型的
get_booster().get_score()或内部统计量推导)。 - 计算单目标重要性的加权平均,对比是否与多输出模型的
feature_importances_一致。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

