LightGBM(分类)中的叶子分数是多少?

Posted

技术标签:

【中文标题】LightGBM(分类)中的叶子分数是多少?【英文标题】:What is the leaf-score in LightGBM (classification)? 【发布时间】:2021-02-25 09:54:57 【问题描述】:

我已经在二元分类问题上训练了 LightGBM,在绘制树时,我得到了一些像这样的叶子

我很难找到分类树的损失函数 - LightGBM 是否会最小化二进制情况下的交叉熵,这是否是叶分数?

【问题讨论】:

【参考方案1】:

我很难找到分类树的损失函数 - LightGBM 是否最小化二元情况下的交叉熵

是的,如果您不指定目标,那么LGBMClassifier 将默认使用交叉熵。 https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.LGBMClassifier.html#lightgbm.LGBMClassifier 中的文档说objective 的默认值是"binary",然后https://lightgbm.readthedocs.io/en/latest/Parameters.html#objective 指出binary 是交叉熵损失。

那是叶子分数吗?

leaf 33: -2.209(“叶子分数”)之类的值表示将为该叶子节点 multiplied by the learning rate 中的实例预测的目标值。

由于提升过程的工作方式,负值是可能的。每棵树都在模型的残差上进行训练,直到该树。通过对所有树的输出求和来获得来自模型的预测。 XGBoost 文档对此有很好的解释:"Introduction to Boosted Trees"。

以后,请尝试提供一个可重复的小示例,说明您如何创建一个您提出问题的图形。我假设使用lightgbm 3.1.0 类似于以下Python 代码。您可以更改tree_index 的值以查看模型中的不同树。

import lightgbm as lgb
from sklearn.datasets import load_breast_cancer

X, y = load_breast_cancer(return_X_y=True)

gbm = lgb.LGBMClassifier(
    n_estimators=10,
    num_leaves=3,
    max_depth=8,
    min_data_in_leaf=3,
)

gbm.fit(X, y)

# visualize tree structure as a directed graph
ax = lgb.plot_tree(
    gbm,
    tree_index=0,
    figsize=(15, 8),
    show_info=[
        'data_percentage',
    ]
)

# visualize tree structure in a dataframe
gbm.booster_.trees_to_dataframe()

【讨论】:

我关于叶子分数的问题是(我应该写得更清楚)是;这是对数优势比还是..? 由于它执行逻辑回归,我假设它建模: log(p(c1)/p(c2))= T0+T1+T2+T3..+TK 其中 Ti 是输出来自第 i 棵树,即第 i 棵树中的叶子分数

以上是关于LightGBM(分类)中的叶子分数是多少?的主要内容,如果未能解决你的问题,请参考以下文章

LightGBM 如何调参

机器学习集成学习进阶LightGBM算法和案例

使用 LightGBM 进行多类分类

LightGBM-分类指标不能处理二进制和连续目标的混合

对于分类回归树和lightgbm的理解

sklearn多分类模型评测(LR, linearSVC, lightgbm)