Зависит ли оптимальное количество деревьев в случайном лесу от количества предикторов?


46

Может кто-нибудь объяснить, почему нам нужно большое количество деревьев в случайном лесу, когда количество предикторов велико? Как мы можем определить оптимальное количество деревьев?

Ответы:


70

В случайном лесу для создания дерева используется пакетирование (выборка наблюдений, а не всех) и метод случайного подпространства (выборка признаков, а не всех, иными словами - набор атрибутов ). Если количество наблюдений велико, но количество деревьев слишком мало, то некоторые наблюдения будут предсказаны только один раз или даже вовсе не будут. Если количество предикторов велико, но количество деревьев слишком мало, то некоторые функции (теоретически) могут быть пропущены во всех используемых подпространствах. Оба случая приводят к снижению прогнозирующей способности случайных лесов. Но последнее является довольно экстремальным случаем, поскольку выбор подпространства выполняется на каждом узле.

При классификации размерность подпространства равна (довольно мало,p- общее количество предикторов) по умолчанию, но дерево содержит много узлов. Во время регрессии размерность подпространствапо умолчаниюравнаp/3(достаточно большая), хотя дерево содержит меньше узлов. Таким образом, оптимальное количество деревьев в случайном лесу зависит от количества предикторов только в крайних случаях.ppp/3

ntreekeep.inbagnn1ntree


-2

Согласно этой статье

Они предполагают, что случайный лес должен иметь количество деревьев от 64 до 128 деревьев . При этом вы должны иметь хороший баланс между ROC AUC и временем обработки.


10
Кажется странным, что в их результатах нет зависимости от количества объектов в наборе данных ...
naught101

-5

Я хочу добавить что-то, если у вас есть более 1000 объектов и 1000 строк, вы не можете просто взять номер дерева.

Я предлагаю вам сначала определить количество процессоров и оперативной памяти, прежде чем пытаться запустить перекрестную проверку, чтобы найти соотношение между ними и числом деревьев.

если вы используете sikit learn в python, у вас есть возможность n_jobs=-1использовать весь процесс, но за каждую базовую копию данных потребуется стоимость, после чего вы можете воспользоваться этой формулой

ntree = sqrt (количество строк * количество столбцов) / numberofcpu


6
Я думаю, что вам нужно отредактировать это, чтобы предоставить доказательства и обоснование ваших заявлений.
Mdewey
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.