如何获取基学习器为线性回归的AdaBoostRegressor特征重要性
结论
基学习器为线性回归的AdaBoostRegressor可以提取等效特征重要性,不存在无法提取的问题。sklearn自带的feature_importances_属性仅适配决策树类基学习器,不会自动聚合线性模型的系数,才会出现你遇到的报错。
实现原理
AdaBoost回归的预测逻辑是对所有基学习器的输出按模型权重加权求和得到最终结果,因此整个集成模型的特征系数,等价于所有基线性回归模型的系数按对应基模型的集成权重加权累加的结果,对累加后的系数做归一化即可得到可对比的特征重要性。
计算时直接调用训练完成模型的两个内置属性即可:
estimators_:存储所有训练完成的基学习器实例,即每轮迭代训练得到的LinearRegression对象estimator_weights_:存储每个基学习器对应的集成权重,即最终预测时给每个基模型输出分配的权重
参考代码
import numpy as np # 初始化特征系数数组,长度与输入特征数一致 integrated_coef = np.zeros(X_train.shape[1]) # 按基模型权重累加所有线性回归的系数 for base_lr, model_weight in zip(modelClf.estimators_, modelClf.estimator_weights_): integrated_coef += model_weight * base_lr.coef_ # 计算特征重要性(仅看影响强度时取绝对值,再归一化到和为1) feature_importance = np.abs(integrated_coef) / np.sum(np.abs(integrated_coef))
注意事项
- 如果需要保留特征对预测结果的影响方向(正向/负向影响),计算重要性时不要对
integrated_coef取绝对值,直接做归一化即可 - 不要直接使用单个基学习器的
coef_作为整体模型的特征重要性:AdaBoost每轮迭代会调整样本权重,单个基模型的系数偏差较大,按集成权重聚合后的结果才代表整个集成模型的特征效应 - 直接调用
modelClf.coef_报错是正常现象:coef_是线性模型的自有属性,AdaBoost作为集成框架没有顶层的该属性,必须遍历内部存储的基学习器提取
内容的提问来源于stack exchange,提问作者nongremlin
相关产品推荐
相关产品推荐

