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

如何获取LGBM Classifier模型的重要特征列表而非仅绘图

获取LGBM分类器特征重要性列表的实现方法

LightGBM训练完成的分类器内置了特征重要性的原生属性,不需要依赖绘图接口即可直接拿到结构化的列表数据,以下是两种常用实现方案:

方法1:调用模型内置属性获取(推荐)

该方法依赖sklearn接口规范的内置属性,实现最简便:

from lightgbm import LGBMClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import pandas as pd

# 示例:训练LGBM分类器(替换为你自己的训练逻辑即可)
data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, random_state=42)
clf = LGBMClassifier(random_state=42, verbose=-1)
clf.fit(X_train, y_train)

# 核心逻辑:获取特征重要性+特征名,拼接成排序后的列表
feature_importance = clf.feature_importances_
feature_names = data.feature_names # 替换为你自己的特征名列表

# 转成DataFrame按重要性降序排序,也可以直接转成列表格式
importance_df = pd.DataFrame({
    '特征名称': feature_names,
    '重要性得分': feature_importance
}).sort_values(by='重要性得分', ascending=False)

# 转纯嵌套列表的写法
importance_list = importance_df.values.tolist()

如果你用的是原生lightgbm的train()接口训练模型,把上述代码的clf.feature_importances_替换为model.feature_importance()即可。

方法2:从plot_importance接口直接提取数据

如果不想修改现有绘图逻辑,也可以直接从绘图接口返回的对象里提取数据:

import lightgbm as lgb
import matplotlib.pyplot as plt

# 你原本的绘图代码
ax = lgb.plot_importance(clf, importance_type='split') # 保持你绘图时的importance_type参数不变
plt.close() # 不需要显示图可直接关闭

# 从ax对象提取重要性数据
y_ticks = ax.get_yticklabels()
feature_names = [tick.get_text() for tick in y_ticks]
importance_scores = ax.patches[::-1] # 绘图时y轴默认倒序,需要反转匹配
importance_scores = [patch.get_width() for patch in importance_scores]

# 拼接为列表
importance_list = list(zip(feature_names, importance_scores))

补充说明

  • 重要性计算支持两种规则:split按特征被用于节点分裂的次数统计,gain按特征分裂带来的总增益统计,你可以根据需求调整importance_type参数,上述两种方法都支持该参数配置。
  • 如需筛选Top N重要特征,直接取排序后结果的前N行即可,比如取Top5可写importance_df.head(5)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:39:00