2015-12-11 8 views
12

私はscikit-学ぶランダムフォレストを作成することを使用しています。しかし、私はそれぞれのツリーの個々の深さを探したい。文書によれば、(http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html)それにアクセスする方法はないという単純な属性のようです。Pythonのscikit-learnでツリーの深さにどのようにアクセスしますか?

これが不可能な場合は、ディシジョン・ツリー・モデルから木の深さにアクセスする方法はありますか?

ご協力いただければ幸いです。ありがとうございました。

答えて

15

RandomForestClassifierの各インスタンスには、DecisionTreeClassifierインスタンスのリストであるestimators_属性があります。ドキュメントはDecisionTreeClassifierのインスタンスは(私は信じて、文書化されていない)Treeクラスのインスタンスであるtree_属性を持っていることを示しています。再び、それは文書化されていないです - インタプリタのいくつかの探査は、各Treeインスタンスは、あなたが探しているものであることをを思わmax_depthパラメータを持っていることを示しています。

>>> [estimator.tree_.max_depth for estimator in forest.estimators_] 
[9, 10, 9, 11, 9, 9, 11, 7, 13, 10] 

はトリックを行う必要があります。forestRandomForestClassifierのインスタンスである場合は、いずれの場合においても

、。

+0

ありがとう!!これはまさに私が探していたものです。同様に、ランダムフォレストから特定のツリーを手動で削除する方法があるかどうかを知っていますか?私は一定の深さ未満の木を削除しようとしています。 – iltp38

+0

リストから見積もりを削除するのは簡単かもしれません。つまり、最初のツリー、 'del forest.estimators_ [0]'を削除します。のみ上記深さ10又は有する木を維持する: 'forest.estimators_ = [ならe.tree.max_depth> = 10 forest.estimators_におけるEのE]。しかし、 'RandomForestClassifier'がこのように動作するように構築されているのではなく、' forest.estimators_'を変更することで、事態が壊れる可能性があります。あなたはそれを試して、結果が合理的かどうかを見ることができます。もしそうであれば、 'forest.n_estimators = len(forest.estimators_)'を適切に更新することができます。 – jme

+0

この回答は間違っています。これは、実際の深度ではなく、フォレスト内の各ツリーの最大_allowed_深度を示しています。たとえば、 'max_depth = 10'で訓練されたランダムなフォレストは' '' [10、10、10、...] '' –

関連する問題