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

如何绘制逻辑回归生成的高方差特征重要性?请求检查代码

逻辑回归特征重要性计算与绘图优化方案

一、你代码里的核心问题

当前计算和绘图的代码存在两个关键问题:

  1. 用pow(math.e, np.array(w))对逻辑回归系数取指数,这会极端放大系数差异——指数函数的特性就是让大数值变得更大,小数值相对被压得更小,这直接导致了你看到的最高值132、次高仅17的悬殊差距。
  2. 排序代码feature_importance.sort_values(...).reset_index()没有赋值回变量,所以你的feature_importance其实还是未排序的状态,绘图时取前7个可能根本不是真正的Top7特征。

另外补充:逻辑回归的特征重要性一般不用指数转换后的优势比衡量,更合理的是用系数的绝对值——系数正负代表影响方向,绝对值代表影响程度,不会放大数值差异。

二、修正特征重要性计算代码

方案1:用系数绝对值计算(推荐)

import pandas as pd
import numpy as np

# 注意:sklearn的LogisticRegression.coef_是二维数组,需要用flatten转成一维
feature_importance = pd.DataFrame({
    'feature': xtest.columns,
    'importance': np.abs(w.flatten())  # 取系数绝对值作为重要性
})
# 排序后必须赋值回变量,否则排序不生效
feature_importance = feature_importance.sort_values(by='importance', ascending=False).reset_index(drop=True)

方案2:如果一定要用优势比(需处理差异)

如果需要展示优势比,建议对其取对数来缩小数值差距:

import pandas as pd
import numpy as np

feature_importance = pd.DataFrame({
    'feature': xtest.columns,
    'odds_ratio': np.exp(w.flatten()),  # 计算优势比
    'log_odds_ratio': np.log(np.exp(w.flatten()))  # 对优势比取对数,缩小差异
})
feature_importance = feature_importance.sort_values(by='odds_ratio', ascending=False).reset_index(drop=True)

三、优化绘图代码

针对数值差异大的情况,给你两种实用的绘图优化方式:

方式1:用对数坐标轴(最直接解决差距问题)

把y轴改成对数刻度,小数值的特征也能清晰展示:

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(25,10))
# 取Top7特征
top7_features = feature_importance.iloc[:7, :]
sns.barplot(data=top7_features, x='feature', y='importance')
plt.yscale('log')  # 设置y轴为对数刻度
plt.title('Top7 特征重要性(对数刻度)')
plt.xlabel('特征')
plt.ylabel('重要性(系数绝对值)')
plt.show()

方式2:添加数值标签(保留原始刻度,提升可读性)

如果不想用对数轴,可以给每个柱子加上具体数值,让小数值的特征也能看到具体大小:

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(25,10))
ax = sns.barplot(data=top7_features, x='feature', y='importance')
# 给每个柱子添加数值标签
for p in ax.patches:
    height = p.get_height()
    ax.text(p.get_x() + p.get_width()/2., height,
            f'{height:.2f}',
            ha='center', va='bottom')
plt.title('Top7 特征重要性')
plt.xlabel('特征')
plt.ylabel('重要性(系数绝对值)')
plt.show()

四、关键提醒

  • 逻辑回归特征重要性优先用系数绝对值,避免指数转换放大差异
  • 排序后一定要赋值回变量,否则排序操作等于白做
  • 数值差异过大时,对数坐标轴或数值标签能有效提升图表可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:37:01