You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pandas DataFrame中展示分类自变量的回归系数

实现方法

核心逻辑

你遇到的问题本质是编码后的分类变量特征名没有对应到原始分类取值,只要拿到编码后的完整特征名列表,再和model.coef_匹配即可实现需求。

具体操作

  • 如果你用scikit-learn的OneHotEncoder做分类编码,调用get_feature_names_out()方法即可直接获取带分类取值的完整特征名
  • 如果你用pandas的get_dummies做编码,编码后DataFrame的columns本身就已经包含分类取值的名称,直接使用即可

完整代码示例

import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer

# 1. 定义特征分类
cat_cols = ['gender'] # 分类特征列
num_cols = ['age', 'salary'] # 数值特征列

# 2. 构造预处理器,注意OneHotEncoder不要设置drop参数,才能生成所有分类取值的特征
preprocessor = ColumnTransformer(
    transformers=[
        ('num', 'passthrough', num_cols),
        ('cat', OneHotEncoder(), cat_cols)
    ])

# 3. 预处理数据+训练模型
x_processed = preprocessor.fit_transform(原始特征数据集x)
feature_names = preprocessor.get_feature_names_out() # 获取所有特征名,包含分类的每个取值
model = LinearRegression()
model.fit(x_processed, 目标变量y)

# 4. 生成系数表
coef_df = pd.DataFrame({
    'coef': model.coef_
}, index=feature_names).sort_values(by='coef', ascending=False)

# 可选:去掉特征名前面的前缀,直接显示分类取值
coef_df.index = coef_df.index.str.replace(r'.*gender_', '', regex=True)

输出效果

运行后coef_df的展示效果和你要求的完全一致:

coef
Female0.3
Male0.2

get_dummies编码场景简化代码

如果你是手动用pandas的get_dummies做编码,不需要预处理器,直接用编码后的列名即可:

x_encoded = pd.get_dummies(x, columns=cat_cols)
model.fit(x_encoded, y)
coef_df = pd.DataFrame(model.coef_, x_encoded.columns, columns=['coef']).sort_values(by='coef', ascending=False)

内容的提问来源于stack exchange,提问作者Sona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:15:02