如何在Pipeline与GridSearchCV场景下获取LinearRegression的特征系数
问题原因排查
- 第一个报错原因:
cv_results_是GridSearchCV存储所有交叉验证结果的字典类型属性,本身不包含best_estimator_,best_estimator_是GridSearchCV实例拟合后直接挂载的属性,不需要通过cv_results_访问。 - 第二个报错原因:scikit-learn中所有拟合后才生成的属性都会以下划线结尾,
TransformedTargetRegressor初始化时传入的regressor是未拟合的原始模型实例,拟合完成后的训练好的模型存储在regressor_属性中,访问未拟合的LinearRegression自然不存在coef_属性。
正确获取系数的代码
# 从Pipeline中取出GridSearchCV实例 grid_search = mlr_co2.named_steps['gridsearchcv_lr'] # 取出最优的TransformedTargetRegressor实例 best_ttr = grid_search.best_estimator_ # 取出拟合完成的LinearRegression实例,获取系数 lr_coef = best_ttr.regressor_.coef_ print(lr_coef)
如果需要将系数和原始特征对应,可补充以下代码从预处理步骤获取特征名:
import pandas as pd # 从Pipeline中取出预处理器实例 preprocessor = mlr_co2.named_steps['preprocessor'] # 获取预处理后的特征名称 feature_names = preprocessor.get_feature_names_out() # 组合生成特征-系数对应表 coef_df = pd.DataFrame({ 'feature': feature_names, 'coefficient': lr_coef }) print(coef_df)
内容的提问来源于stack exchange,提问作者Rococo
相关产品推荐
相关产品推荐

