微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何计算lightgbm中的权重和值?

如何解决如何计算lightgbm中的权重和值?

我们可以使用tree_to_dataframelgb.create_tree_digraph来展示lightgbm模型的结构。内部节点和叶节点都有 weightvalue

文档说:

value : float64,这个叶节点的预测值,乘以学习率。

weight :float64 或 int64,hessian 的总和(目标的二阶导数),对落入该节点的观察求和。 这两个值是如何计算的?

我们知道,在二进制 logloss 中:

$$
\begin{aligned}
G &= \hat{y}-y \
H &= \hat{y}(1-\hat{y})
\end{aligned}
$$

  1. $H$ 不会是 $0$,因为我们在创建第一棵树之前有一个 base value,但是为什么在下面的例子中每棵树的根节点的权重都是 $0$?
  2. 内部节点的 value 是如何计算的?
import lightgbm as lgb
import numpy as np
import pandas as pd
import sklearn

X,y = sklearn.datasets.load_breast_cancer(return_X_y=True)
model = lgb.LGBMClassifier(random_state=1,n_estimators=2,max_depth=1,min_child_weight=15,objective='binary'
                          )
model.fit(X,y)
model.booster_.trees_to_dataframe()
tree_index node_depth node_index left_child right_child parent_index split_feature split_gain 阈值 decision_type missing_direction missing_type value 权重 计数
0 0 1 0-S0 0-L0 0-L1 Column_23 392.505 868.2 0.52115 0 569
1 0 2 0-L0 0-S0 nan nan 0.641339 89.2982 382
2 0 2 0-L1 0-S0 nan nan 0.275629 43.7141 187
3 1 1 1-S0 1-L0 1-L1 Column_7 327.362 0.05142 0 0 569
4 1 2 1-L0 1-S0 nan nan 0.128938 79.2656 349
5 1 2 1-L1 1-S0 nan nan -0.19224 52.9234 220
lgb.create_tree_digraph(model,tree_index=0,show_info=['split_gain','internal_value','internal_count','internal_weight','leaf_count','leaf_weight','data_percentage'])

enter image description here

lgb.create_tree_digraph(model,'data_percentage'])

enter image description here

解决方法

简单的问题:您是否研究过 scikitlearn 库中的普通极端梯度树是如何工作的?

您正在使用 LightGBM,这是一种非常棒但先进的算法。也许先了解一般概念、算法背后的数学、论文……然后你就可以自己回答了。

文章引用Light GBM:

https://papers.nips.cc/paper/2017/file/6449f44a102fde848669bdd9eb6b76fa-Paper.pdf

github中的repo代码,你可以探索你需要的一切:

https://github.com/microsoft/LightGBM

和文档:

https://lightgbm.readthedocs.io/en/latest/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。