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

46

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

З Хан
источник

Ответы:

70

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

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

ntreekeep.inbagnn1ntree

O_Devinyak
источник
-2

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

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

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

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

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

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

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

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