从LightGBM模型访问树和节点

时间:2018-11-13 12:17:20

标签: nodes random-forest decision-tree lightgbm

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

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)一棵树的每个节点吗?

3 个答案:

答案 0 :(得分:0)

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

希望我能帮上忙,如果解决不了,请不要犹豫;我会更详细。

答案 1 :(得分:0)

是的,这可以通过

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

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

答案 2 :(得分:0)

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

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