0

我可以使用tree.export_graphviz 函数将 GBDT的结构导出到图像:

```Python3

from sklearn.datasets import load_iris
from sklearn import tree
from sklearn.ensemble import GradientBoostingClassifier

clf = GradientBoostingClassifier(n_estimators=1) # set to 1 for the sake of simplicity
iris = load_iris()

clf = clf.fit(iris.data, iris.target)
tree.export_graphviz(clf.estimators_[0,0], out_file='tree.dot')
check_call(['dot','-Tpng','tree.dot','-o','tree.png'])

```

这是获得的图像。

我想知道value叶子上有什么?我怎样才能获得它们?

我已经尝试过applyanddecision_function功能,但都不起作用。

4

1 回答 1

0

tree_您可以使用其内部对象及其属性访问每棵树的休假属性。export_graphviz正是使用这种方法。

考虑这段代码。对于每个属性,它给出了一个包含所有树节点的值的数组:

print(clf.estimators_[0,0].tree_.feature)
print(clf.estimators_[0,0].tree_.threshold)
print(clf.estimators_[0,0].tree_.children_left)
print(clf.estimators_[0,0].tree_.children_right)
print(clf.estimators_[0,0].tree_.n_node_samples)
print(clf.estimators_[0,0].tree_.value.ravel())

输出将是

[ 2 -2 -2]
[ 2.45000005 -2.         -2.        ]
[ 1 -1 -1]
[ 2 -1 -1]
[150  50 100]
[  3.51570624e-16   2.00000000e+00  -1.00000000e+00]

也就是说,你的树有 3 个节点,第一个节点将 feature 的值22.45等进行比较。

根节点、左叶和右叶中的值分别为3e-162-1

但是,这些值并不容易解释,因为树已经尝试预测 GBDT 损失函数的梯度。

于 2017-11-26T19:19:56.330 回答