1

sklearn.ensemble.GradientBoostingClassifier を使用して GBDT を構築すると、ツリーのセットができます。1 本の木の構造を把握できます。しかし、一連のツリーの場合、どの方法でツリーにアクセスしたかを知るにはどうすればよいでしょうか?

たとえば、次のコードを見てください。

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

    clf = GradientBoostingClassifier(n_estimators=4)
    iris = load_iris()

    clf = clf.fit(iris.data, iris.target)

次に、4 本の木があります。つまり、

    for i in range(4):
        print(clf.estimators_[i,0].tree_)

そして、私は木でこれを行うことができます。

    clf.predict( array([0,1,2,3]).reshape(1, -1) )

しかし、どの順番で、clf.estimators_[0,0].tree_ .. clf.estimators_[3,0].tree_ にアクセスしますか? 結果はどのようにまとめられますか?

マニュアルでは、「各サンプルが各試行の下で終了するリーフ インデックスを取得するための apply メソッドを公開するようになりました」と記載されています。

    clf.apply( array([0,1,2,3]).reshape(1, -1) )

次の配列を取得しました。

[[  1.,   7.,  10.],
 [  1.,   7.,  10.],
 [  4.,   7.,  10.],
 [  1.,   1.,  10.]]

しかし、それを読む方法は?

アップデート: - - -

ここからいくつかのソースコードを読みました: https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/ensemble/gradient_boosting.py#L1247 インデックスは単なるインデックスですが、エンコードされているようです非葉ノードと。これは、葉が 8 枚しかない理由を説明していますが、インシドは 8 枚よりも大きくなる可能性があります。

別の更新: ------

コードhereおよびhereを読んだ後、GBDT の decision_function が返さinit_value+sum_{for each leaf}(learning_rate*leaf_value)れ、予測確率が decision_function の単純な関数であることが最終的にわかりました。

4

0 に答える 0