2017-11-24 13 views
0

나는 the tree.export_graphviz function와 이미지에 GBDT의 구조를 내보낼 수 있습니다sklearn 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']) 

```

궁금

This is the obtained image.

가에 value을 무엇인가 leafs? 어떻게 얻을 수 있습니까?

나는 applydecision_function 함수를 시도했지만 어느 것도 작동하지 않습니다.

+0

값은 그 또는 그 하위 노드에 속한 샘플의 수입니다. –

+0

@VivekKumar 'samples'대신에 'negative'가 될 수있는 'value'를 의미합니다. 위의 이미지를 확인하십시오. – user5594832

+0

오크. 'export_graphviz (..., proportion = True)'를 할 때 당신은 무엇을 얻는가? 그 표본의 무게와 같습니다. –

답변

0

내부 개체 tree_ 및 해당 특성을 사용하여 각 트리의 휴가 속성에 액세스 할 수 있습니다. export_graphviz은이 접근 방식을 정확하게 사용합니다.

이 코드를 고려하십시오. 당신의 나무가 3 개 노드가, 출력은

[ 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] 

될 것

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.452의 값

루트 노드의 값을 좌우 각각 리프 3e-16, 2-1이다.

트리는 GBDT 손실 함수의 그래디언트를 예측하려고했기 때문에이 값은 해석하기가 명확하지 않지만 이러한 값입니다.

+0

'tree_'의 모든 속성을 어떻게 얻을 수 있습니까? – user5594832

+0

'''dir (tree_)'''은 모든 속성의 목록을 생성합니다. https://docs.python.org/3/library/functions.html#dir 문서를 참조하십시오. –