从 LightGBM 模型访问树和节点

Posted

技术标签:

【中文标题】从 LightGBM 模型访问树和节点【英文标题】:Access trees and nodes from LightGBM model 【发布时间】:2019-04-16 06:38:37 【问题描述】:

在 sci-kit learn 中,可以访问整个树结构,即树的每个节点。这允许探索在树的每个拆分处使用的属性以及用于测试的值

The binary tree structure has 5 nodes and has the following tree structure:
node=0 test node: go to node 1 if X[:, 3] <= 0.800000011920929 else to node 2.
    node=1 leaf node.
    node=2 test node: go to node 3 if X[:, 2] <= 4.950000047683716 else to node 4.
            node=3 leaf node.
            node=4 leaf node.

Rules used to predict sample 0:
decision id node 0 : (X_test[0, 3] (= 2.4) > 0.800000011920929)
decision id node 2 : (X_test[0, 2] (= 5.1) > 4.950000047683716)

对于随机森林,你可以通过遍历所有决策树来获得相同的信息

for tree in model.estimators_:
    # extract info from tree

是否可以从 LightGBM 模型中提取相同的信息?也就是说,您可以访问:a) 每棵树和 b) 树的每个节点吗?

【问题讨论】:

【参考方案1】:

还有model._Booster.num_trees()。它返回一个 Pandas DataFrame,其中包含有关所有树的所有节点的信息。

该DataFrame中包含的列列表及其含义可以在the official docs中找到。

【讨论】:

【参考方案2】:

是的,这是可能的

model._Booster.dump_model()["tree_info"]

例如用于lightgbm.plot_tree()。我必须承认,虽然我自己没有使用过它,也不知道返回结构的详细信息。

【讨论】:

【参考方案3】:

LightGBM 的功能与 XGBoost 几乎相同;有时我什至会去 XGBoost 文档查找 LightGBM 的功能。你可以搜索一下XGBoost是怎么做的,也可以直接参考:https://github.com/Microsoft/LightGBM/issues/845

此外,LightGBM 有一个 sklearn 包装器,可能可以在您训练的模型上使用 sklearn 结构作为您共享的方式。你可能想看看:https://lightgbm.readthedocs.io/en/latest/_modules/lightgbm/sklearn.html

希望我能帮上忙,如果没有解决,请不要犹豫写信;我将更深入地了解细节。

【讨论】:

以上是关于从 LightGBM 模型访问树和节点的主要内容,如果未能解决你的问题,请参考以下文章

LightGBM

白话梳理树模型——从决策树到lightGBM

DOM文档树和节点操作

R树和R*树的范围搜索复杂度

B树和B+树

推荐算法与量化交易-A-5-5:XGBoost-lightGBM“集成提升树模型”算法-基于模型算法