如何逆转换OneHotEncoding结合sklearn计算线性回归特征系数coef_
解决思路
你不需要用到Pipeline封装的clf对象,直接调用你拆分步骤中自己定义的OneHotEncoder实例即可,操作逻辑和原帖完全一致:
- 首先定位你之前做独热编码时实例化、训练过的
OneHotEncoder对象,示例如下(替换为你自己代码中的变量名即可):
# 你本地拆分预处理时的代码示例,替换为你的实际变量名 from sklearn.preprocessing import OneHotEncoder # 这就是你自己的独热编码实例,下文以变量名ohe指代 ohe = OneHotEncoder(sparse_output=False, drop='first') ohe.fit(你的分类特征数据集)
- 直接调用该实例获取独热编码生成的列名,sklearn 1.0+版本用
get_feature_names_out,旧版本用get_feature_names即可:
onehot_columns = list(ohe.get_feature_names_out(input_features=你的原始分类特征名列表))
- 拼接数值特征和独热特征的全量特征名,这个列表的顺序和你喂给线性回归模型的输入特征顺序完全对应:
all_features = list(你的原始数值特征名列表) all_features.extend(onehot_columns)
- 把特征名和线性回归的系数绑定,即可得到每个特征的对应系数:
import pandas as pd coef_result = pd.DataFrame({ 'feature_name': all_features, 'coefficient': 你训练好的LinearRegression实例名.coef_ })
可选:按原始特征聚合系数
如果你需要计算每个原始分类特征的整体重要性,可以对同一原始特征生成的所有独热列的系数绝对值求和:
# 标记每个特征对应的原始特征名 coef_result['original_feature'] = coef_result['feature_name'].apply( lambda x: x.split('_')[0] if x in onehot_columns else x ) # 聚合得到每个原始特征的总重要性 feature_importance = coef_result.groupby('original_feature')['coefficient'].apply( lambda x: x.abs().sum() ).reset_index()
内容的提问来源于stack exchange,提问作者valskyyy
相关产品推荐
相关产品推荐

