GBDT 如何实现特征组合提取? 10
最近刚刚接触GBDT和机器学习,想问下关于GBDT,如何把树的分支提取出来,即通过代码找到树的分支,分类节点。
或者说如何能够列出那些节点,也就是分类的根据
跪求大神_(:_」∠)_ 展开
2018-01-17 · 财富点亮生活
以Python调用sklearn为例,在你建立GBDT对象并作fit之后,可以使用如下代码获得你要的规则代码:
dot_data = tree.export_graphviz(model_tree, out_file=None,
max_depth=5, feature_names=names_list, filled=True, rounded=True) # 将决策树规则生成dot对象
其中tree就是你的数对象,如果你的out_file后面是一个文件名,那么你的规则会输出到文件中;如果是None(就像上面代码),那么值会保存在dot_data中。
无论哪种方法,你都能获得规则文本。然后剩下的就是普通的文本解析的事情了。
在决策树算法对象的tree_属性中,存储了所有有关决策树规则的信息(示例中的决策树规则存储在model_tree.tree_中)。最主要的几个属性:
children_left:子级左侧分类节点
children_right:子级右侧分类节点
feature:子节点上用来做分裂的特征
threshold:子节点上对应特征的分裂阀值
values:子节点中包含正例和负例的样本数量
上述属性配合节点ID、节点层级便迭代能得到如下的规则信息:
1 [label="rfm_score <= 7.8375\ngini = 0.1135\nsamples =
14581\nvalue = [13700, 881]", fillcolor="#e58139ef"] ;
其中规则开始的1代表节点ID,rfm_score是变量名称,rfm_score
<= 7.8375是分裂阀值,gini = 0.1135是在当前规则下的基尼指数,nsamples是当前节点下的总样本量,nvalue为正例和负例的样本数量。
来源:知乎
这和知乎上一样……但是GBDT没有tree这个属性,请问怎么办呢