【问题标题】:How to get variance explained of features for lightgbm model?如何获得 lightgbm 模型特征的方差解释?
【发布时间】:2020-05-18 04:43:46
【问题描述】:

我使用 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()

【问题讨论】:

    标签: python machine-learning feature-selection hyperparameters lightgbm


    【解决方案1】:

    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_})

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-05
      • 2021-02-03
      • 1970-01-01
      • 2018-06-18
      • 2017-09-24
      • 2020-01-10
      • 1970-01-01
      • 2014-02-11
      相关资源
      最近更新 更多