Python 从xgboost.dump查找二叉树的所有路径
我有许多树的xgboost.dump文本文件。 我想找到所有路径以获得每个路径的值。 这是一棵树Python 从xgboost.dump查找二叉树的所有路径,python,decision-tree,xgboost,Python,Decision Tree,Xgboost,我有许多树的xgboost.dump文本文件。 我想找到所有路径以获得每个路径的值。 这是一棵树 tree[0]: 0:[a<0.966398] yes=1,no=2,missing=1 1:[b<0.323071] yes=3,no=4,missing=3 3:[c<0.461248] yes=7,no=8,missing=7 7:leaf=0.00972768 8:leaf=-0.0179376
tree[0]:
0:[a<0.966398] yes=1,no=2,missing=1
1:[b<0.323071] yes=3,no=4,missing=3
3:[c<0.461248] yes=7,no=8,missing=7
7:leaf=0.00972768
8:leaf=-0.0179376
4:[a<0.379082] yes=9,no=10,missing=9
9:leaf=0.0146003
10:leaf=0.0454369
2:[b<0.322352] yes=5,no=6,missing=5
5:[c<0.674868] yes=11,no=12,missing=11
11:leaf=0.0497964
12:leaf=0.00953781
6:[f<0.598267] yes=13,no=14,missing=13
13:leaf=0.0504545
14:leaf=0.0867654
但这种方法会导致错误,一旦最大深度更高,某些分支将停止生长,路径将错误。
所以我需要解析文本文件中的yes,no来生成真实的、正确的路径。
有什么建议吗?
谢谢大家! 下面是我使用R实现解决这个问题的方法。其他语言的用户可以按照逻辑进行复制 首先,我从xgb.model.dt.tree()生成的模型转储文件开始 然后,我编写了一个函数来解析从任意节点到转储模型的单个树中的最终父节点的有效路径 稍后,我将使用purr::by_row()将此函数应用于模型转储中的所有终端节点“叶”记录,并转换结果 此函数接受两个参数,一个用于测试的树,另一个用于终端节点的标识。它遵循以下一般步骤:
path1, a<0.966398, b<0.323071, c<0.461248, leaf = 0.00097268
path2, a<0.966398, b<0.323071, c>0.461248, leaf = -0.0179376
path3, a<0.966398, b>0.323071, a<0.379082, leaf = 0.0146003
path4, a<0.966398, b>0.323071, a>0.379082, leaf = 0.0454369
path5, a>0.966398, b<0.322352, c<0.674868, leaf = 0.0497964
path6, a>0.966398, b<0.322352, c>0.674868, leaf = 0.00953781
path7, a>0.966398, b>0.322352, f<0.598267, leaf = 0.0504545
path8, a>0.966398, b>0.322352, f>0.598267, leaf = 0.0864654
array([[ 0, 1, 3, 7],
[ 0, 1, 3, 8],
[ 0, 1, 4, 9],
[ 0, 1, 4, 10],
[ 0, 2, 5, 11],
[ 0, 2, 5, 12],
[ 0, 2, 6, 13],
[ 0, 2, 6, 14]])