Python根据给定模型进行特征权值计算

陆景行
陆景行
发布时间:2026-10-11| 2人浏览过
原创

本文详细演示如何使用 Python 结合 scikit-learn 框架计算机器学习模型的特征权重。文章涵盖线性回归与逻辑回归的权重提取流程,讲解数据预处理、模型训练与 coef_ 属性可视化方法,并对比前向选择、过滤法与嵌入法等特征筛选策略,旨在协助开发者优化特征工程并增强模型业务可解释性。

一、特征权重的作用与模型匹配原则

特征权重反映了输入变量对模型输出结果的贡献程度。通过量化权重,可以:

  • 优化特征选择:剔除低贡献或冗余特征,降低过拟合风险并加速推理。
  • 提升模型解释性:明确哪些业务指标(如面积、收入等)驱动了预测方向。
  • 指导特征工程:依据权重分布调整缩放比例或进行非线性变换。

获取权重的核心前提是模型类型必须与目标变量相匹配。对于连续值预测(回归问题),通常使用线性回归;对于离散分类任务(如是否违约),则应选用逻辑回归。直接套用单一模型处理不同数据形态会导致权重物理意义失真。

二、线性回归:连续值预测的权重提取

第1步:准备环境与构建基础数据集

目的:引入数据处理库,定义明确的特征矩阵与连续目标变量。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

data = {
    '房间数': [1, 2, 3, 4, 5],
    '面积': [40, 60, 80, 100, 120],
    '位置': [1, 2, 3, 1, 2],
    '房价': [100, 150, 200, 250, 300]
}
df = pd.DataFrame(data)

X = df[['房间数', '面积', '位置']]
y = df['房价']

第2步:划分数据与训练模型

目的:将样本切分为训练集与测试集,验证模型拟合效果并获取系数。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LinearRegression()
model.fit(X_train, y_train)

第3步:提取权重并可视化

目的:通过 coef_ 属性读取数值,直观对比特征贡献度。

weights = model.coef_
features = X.columns

plt.bar(features, weights)
plt.ylabel('权重')
plt.xlabel('特征')
plt.title('特征权重可视化')
plt.axhline(0, color='grey', lw=0.8)
plt.show()

运行上述代码后,图表横轴显示特征名称,纵轴高度代表该特征在模型中的系数绝对值。正值表示正相关,负值表示负相关,绝对值越大说明对预测结果的影响越显著。

三、二分类实战:信用违约预测权重分析

在实际业务中,预测“是否违约”属于典型的二分类问题。此时若继续使用线性回归会违反概率分布假设,导致预测值超出 [0, 1] 区间。因此需切换至逻辑回归,其系数仍可解释为特征重要性指标。

第1步:加载数据与清洗异常值

目的:过滤缺失值与极端离群点,保证权重计算的稳定性。

# 示例路径,实际使用时请替换为真实 CSV 文件路径
loan = pd.read_csv('lending_club_data.csv', compression='gzip', low_memory=True)

select_cols = ['id', 'loan_amnt', 'term', 'int_rate', 'sub_grade', 
               'emp_length', 'grade', 'annual_inc', 'dti', 
               'mths_since_recent_inq', 'revol_util', 'bc_open_to_buy', 
               'bc_util', 'num_op_rev_tl']
loans = loan[select_cols].dropna()

q_low = loans["annual_inc"].quantile(0.08)
q_hi = loans["annual_inc"].quantile(0.92)
loans = loans[(loans["annual_inc"] < q_hi) & (loans["annual_inc"] > q_low)]
loans = loans[loans['dti'] <= 45]

第2步:标签编码与模型训练

目的:将文本状态转换为二元数值,并使用逻辑回归拟合权重。

X = loans[select_cols[1:]] # 移除 id 列
y = loans['loan_status'].apply(lambda x: 1 if x == 'Charged Off' else 0)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

from sklearn.linear_model import LogisticRegression
model = LogisticRegression(solver='liblinear')
model.fit(X_train, y_train)

weights = model.coef_[0]
features = X.columns

第3步:权重绘图与业务解读

目的:定位高影响因子,指导风控策略调整。

plt.bar(features, weights)
plt.ylabel('权重系数')
plt.xlabel('特征')
plt.title('逻辑回归特征权重分布')
plt.axhline(0, color='grey', lw=0.8)
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

完成绘制后,可通过横轴旋转查看密集特征名。关注正方向大幅波动的特征(如 int_rate、dti),这些通常是触发高风险预警的关键指标。

四、常见特征筛选方法对比

当原始特征维度较高时,仅依赖单一模型的权重可能受到多重共线性干扰。可结合以下策略进一步提纯特征子集:

  • 过滤法(Filter):独立于模型,基于皮尔逊相关系数或卡方检验打分。计算最快,适合预处理阶段快速降噪。
  • 包裹法(Wrapper):以模型性能指标(如 AUC 或 R²)作为评分标准,采用前向添加或后向剔除迭代搜索。精度高但计算开销大,易陷入局部最优。
  • 嵌入法(Embedded):在训练过程中自动执行选择。典型代表包括 LASSO 回归的稀疏约束与树模型的特征重要性(Feature Importance)。兼顾效率与集成学习优势。

实务中建议先通过过滤法剔除低方差与弱相关列,再使用嵌入法锁定最终输入集,最后用包裹法微调边界特征。

五、总结

利用 Python 提取模型特征权重是打通数据分析闭环的关键环节。掌握 coef_ 属性的调用逻辑,并根据连续目标或分类目标正确匹配回归器,能够准确还原业务因果链条。配合科学的特征筛选流程,可有效压缩模型体积并提升决策透明度。以上就是基于 Scikit-learn 进行特征权值计算与可视化的详细内容,更多关于机器学习模型解释性与特征工程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。