首页 > 解决方案 > 如何获得 lightgbm 模型特征的方差解释?

问题描述

我使用 lightgbm 来获得特征重要性。但是,输出是某个度量的绘图分数。我的问题是:

  1. x 轴上的度量是什么?这是F分数还是其他?
  2. 我怎样才能得到特征的输出,它向我展示了每个特征对模型方差的影响(类似于 PCA)?
  3. 如何提取数据框格式中所有重要特征的指标?

这是我的代码:

import lightgbm as lgb
import matplotlib.pyplot as plt

lgb_params = {
    'boosting_type': 'gbdt',
    'objective': 'binary',
    'num_leaves': 30,
    'num_round': 360,
    'max_depth':8,
    'learning_rate': 0.01,
    'feature_fraction': 0.5,
    'bagging_fraction': 0.8,
    'bagging_freq': 12
}

lgb_train = lgb.Dataset(X, y)
model = lgb.train(lgb_params, lgb_train)

plt.figure(figsize=(12,6))
lgb.plot_importance(model, max_num_features=30)
plt.title("Feature importances")
plt.show()

在此处输入图像描述

标签: pythonmachine-learningfeature-selectionhyperparameterslightgbm

解决方案


1)在您的情况下,x 轴上的度量是使用“拆分”类型(默认情况下)获得的特征重要性。正如您在lgm doc中看到的那样:重要性可以使用“拆分”或“增益”方法计算。如果“拆分”,则结果包含该特征在模型中使用的次数。如果为“增益”,则结果包含使用该特征的分割的总增益。

第一个度量是基于拆分的,它不考虑样本数量。第二个措施是基于增益的。与 scikit-learn 中的方法基本相同,只是将 Gini 杂质替换为梯度提升模型使用的目标

这些度量纯粹是使用训练数据计算的,因此拆分可能不会对测试集中的目标产生任何改进

2)与 sklearn pca 最相似explained_variance_ratio_的度量(不是在含义上,而是在它可以使用的方式上)正是feature_importances基于树的方法。如果你更有信心,你可以像 sklearn 随机森林那样以 % 来缩放这个数字,其中特征重要性总和为 1。你可以这样做model.feature_importances_/model.feature_importances_.sum()。否则,还有其他类似的方法,例如排列重要性

3)将您可以执行的所有重要性存储在 df 中:pd.DataFrame({'name':model.feature_name_,'importance':model.feature_importances_})


推荐阅读