2015-03-26 3 views
1

Edit 2: Существует в настоящее время прекрасный пример в sklearn documentation по этому вопросу.Scikit Learn Случайный лес классификатор: Как производить график ошибки OOB от числа деревьев


Для того, чтобы увидеть, сколько деревьев необходимы в моем лесу, я хотел бы построить ошибку OOB как количество деревьев, используемых в лесу увеличивается. Я в Python, используя sklearn.ensemble.RandomForestClassifier, но не могу найти, как предсказать использование подмножества деревьев в лесу. Я мог бы сделать это, создав новый случайный лес на каждой итерации с увеличением количества деревьев, но это слишком дорого.

Кажется, аналогичная задача возможна с объектом Gradient Boosting с использованием метода staged_decision_function. См. this example.

Это довольно простая процедура в R и может быть достигнуто путем вызова plot(randomForestObject): Random Forest OOB error against Trees


- Edit - Я вижу теперь RandomForestClassifier объект имеет атрибут estimators_, который возвращает все объекты DecisionTreeClassifier. Чтобы решить эту проблему, я могу перебирать этот список, прогнозируя результаты от каждого дерева и принимая «совокупное среднее». Однако действительно ли нет более простого способа сделать это уже реализовано?

ответ

1

Существует дискуссия и код в этом выпуске: https://github.com/scikit-learn/scikit-learn/issues/4273

Вы можете добавить деревья одно за другим, как это:

n_estimators = 100 
forest = RandomForestClassifier(warm_start=True, oob_score=True) 

for i in range(1, n_estimators + 1): 
    forest.set_params(n_estimators=i) 
    forest.fit(X, y) 
    print i, forest.oob_score_ 

Решение вы предлагаете также необходимо получить индексы OOB для каждого дерева, потому что вы не хотите вычислять оценку по всем данным обучения.

Я все еще чувствую, что это странная вещь, потому что на самом деле нет естественного упорядочения деревьев в лесу. Можете ли вы объяснить, что вы используете? Вы хотите найти минимальное количество деревьев для заданной точности, чтобы сократить время прогнозирования? Если вы хотите быстрое время прогнозирования, я бы предложил использовать GradientBoostingClassifier, который, как правило, намного быстрее.

+0

Хотя количество деревьев не является параметром настройки, вам нужно знать, сколько деревьев вам нужно для стабильного решения. Создание этого участка даст вам представление о том, сколько деревьев вам нужно. Время прогноза не вызывает беспокойства, это время обучения. При поиске большого пространства параметров знание большого количества деревьев для использования может иметь большое значение для времени поиска. 'GradientBoostingClassifiers' не параллельны, поэтому не используются здесь. – kungfujam

+0

Если вы ищете большое пространство параметров, количество оценок, которое вам нужно для стабильного решения, будет отличаться для каждого параметра. Итак, как эта кривая поможет? –

+0

Я бы использовал его перед поиском параметров, чтобы дать смутное представление о настройках дерева для поиска (я пробую несколько настроек настройки сетки и создаю этот график). Затем один раз, оптимальные параметры найдены, я делаю это еще раз, чтобы проверить, не могу ли я больше работать, увеличивая лес немного больше. Также очень полезно проверить, как меняется производительность класса (см. Строки rgb на моем сюжете). – kungfujam

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

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