基于线性模型系数绝对值的特征重要性条形图可视化
线性模型特征重要性可视化:系数绝对值条形图
需求说明
我正在开展一个机器学习项目,希望通过绘制训练完成的线性模型(如线性回归、逻辑回归等)的系数绝对值,实现特征重要性的可视化。
实现代码
import matplotlib.pyplot as plt import seaborn as sns import pandas as pd import numpy as np # 从各模型中提取系数 coefs_model1 = model1.coef_[0] coefs_model2 = model2.coef_[0] coefs_model3 = model3.coef_[0] # 创建存储系数绝对值的DataFrame abs_coefs = pd.DataFrame({ '特征': feature_names, '模型A(C=1e6,无正则化)': np.abs(coefs_model1), '模型B(L2正则化,C=0.01)': np.abs(coefs_model2), '模型C(L1正则化,C=0.01)': np.abs(coefs_model3) }) # 设置matplotlib画布和子图坐标轴 fig, axes = plt.subplots(3, 1, figsize=(18, 20), sharex=True) fig.suptitle('3个模型下30个特征的系数绝对值对比', fontsize=16) # 绘制模型A的条形图 sns.barplot(x='特征', y='模型A(C=1e6,无正则化)', data=abs_coefs, ax=axes[0], color='skyblue') axes[0].set_title('模型A(无正则化,C=1e6)') axes[0].set_ylabel('系数绝对值') # 绘制模型B的条形图 sns.barplot(x='特征', y='模型B(L2正则化,C=0.01)', data=abs_coefs, ax=axes[1], color='lightcoral') axes[1].set_title('模型B(L2正则化,C=0.01)') axes[1].set_ylabel('系数绝对值') # 绘制模型C的条形图 sns.barplot(x='特征', y='模型C(L1正则化,C=0.01)', data=abs_coefs, ax=axes[2], color='lightgreen') axes[2].set_title('模型C(L1正则化,C=0.01)') axes[2].set_ylabel('系数绝对值') # 旋转x轴标签提升可读性并设置公共x轴标签 plt.xticks(rotation=90) plt.xlabel('特征名称') plt.tight_layout(rect=[0, 0.03, 1, 0.95]) # 调整布局避免总标题重叠 plt.show()
代码说明
- 从训练完成的三个模型中提取系数(针对单类别逻辑回归等模型,
coef_为二维数组,取第一维度即可得到特征对应系数) - 将特征名称与各模型的系数绝对值存入DataFrame,统一管理可视化所需数据
- 创建3行1列的子图布局并共享x轴,便于横向对比不同模型的特征系数分布
- 用Seaborn绘制条形图,通过不同颜色区分三个模型,直观展示每个特征的系数绝对值大小
- 旋转x轴标签避免文本重叠,调整画布布局防止总标题被子图遮挡
内容的提问来源于stack exchange,提问作者Saiking
相关产品推荐
相关产品推荐

