2015-12-11 8 views
12

Я использую scikit-learn для создания случайного леса. Однако я хочу найти индивидуальные глубины каждого дерева. Это похоже на простой атрибут, но в соответствии с документацией (http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html) доступ к нему отсутствует.Как вы получаете доступ к глубине дерева в Python's scikit-learn?

Если это невозможно, есть ли способ доступа к глубине дерева из дерева дерева решений?

Любая помощь будет оценена по достоинству. Спасибо.

ответ

15

Каждый экземпляр RandomForestClassifier имеет атрибут estimators_, который представляет собой список DecisionTreeClassifier экземпляров. Документация показывает, что экземпляр DecisionTreeClassifier имеет атрибут tree_, который является экземпляром класса (недокументированный, я считаю) Tree. Некоторые исследования в интерпретаторе показывают, что каждый экземпляр Tree имеет параметр max_depth, который появляется, чтобы быть тем, что вы ищете - опять же, это недокументировано.

В любом случае, если forest ваш экземпляр RandomForestClassifier, то:

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

должен сделать трюк.

+0

спасибо !! Это именно то, что я искал. Аналогичным образом, знаете ли вы, есть ли способ вручную удалить определенное дерево из случайного леса? Я пытаюсь удалить деревья с меньшей глубиной. – iltp38

+0

Это может быть так же просто, как удаление оценок из списка. То есть, чтобы удалить первое дерево, 'del forest.estimators_ [0]'. Или сохранить деревья с глубиной 10 или выше: 'forest.estimators_ = [e для e в forest.estimators_, если e.tree.max_depth> = 10]'. Но это не похоже на то, что «RandomForestClassifier» был создан таким образом, и, изменив «forest.estimators_», вы можете сломать вещи. Вы можете попробовать и посмотреть, если результаты кажутся разумными. Если вы это сделаете, вы можете обновить 'forest.n_estimators = len (forest.estimators_)' для хорошей оценки. – jme

+0

Этот ответ неверен, это говорит о том, что максимальная _allowed_ глубина каждого дерева в лесу, а не фактическая глубина. Например, случайный лес, обученный с помощью 'max_depth = 10', вернется:' '' [10, 10, 10, ...] '' ' –

 Смежные вопросы

  • Нет связанных вопросов^_^