如何解决如何计算lightgbm中的权重和值?
我们可以使用tree_to_dataframe
或lgb.create_tree_digraph
来展示lightgbm模型的结构。内部节点和叶节点都有 weight
和 value
。
文档说:
value
: float64,这个叶节点的预测值,乘以学习率。
weight
:float64 或 int64,hessian 的总和(目标的二阶导数),对落入该节点的观察求和。
这两个值是如何计算的?
- $H$ 不会是 $0$,因为我们在创建第一棵树之前有一个
base value
,但是为什么在下面的例子中每棵树的根节点的权重都是 $0$? - 内部节点的
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'])
lgb.create_tree_digraph(model,'data_percentage'])
解决方法
简单的问题:您是否研究过 scikitlearn 库中的普通极端梯度树是如何工作的?
您正在使用 LightGBM,这是一种非常棒但先进的算法。也许先了解一般概念、算法背后的数学、论文……然后你就可以自己回答了。
文章引用Light GBM:
https://papers.nips.cc/paper/2017/file/6449f44a102fde848669bdd9eb6b76fa-Paper.pdf
github中的repo代码,你可以探索你需要的一切:
https://github.com/microsoft/LightGBM
和文档:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。