Random Forest
по природе ставит огромные нагрузки на CPU
и RAM
, и это один из его очень известных недостатков!Так что в вашем вопросе нет ничего необычного.
Кроме того, в частности, есть несколько факторов, которые способствуют этому вопросу, если назвать несколько:
- Количество атрибутов (функции) в наборе данных.
- Количество деревьев (
n_estimators
). - Максимальная глубина дерева (
max_depth
). - Требуемое минимальное количество образцовнаходиться на листовом узле (
min_samples_leaf
).
Более того, Scikit-learn
четко указывает на эту проблему, и я цитирую здесь:
Значения по умолчанию для параметров, управляющих размером деревьев (например, max_depth
, min_samples_leaf
и т. д.), приводят к полностью выращенным и необрезанным деревьям, которые потенциально могут быть очень большими в некоторых наборах данных.Чтобы уменьшить потребление памяти, нужно управлять сложностью и размером деревьев, задавая значения этих параметров.
Что делать?
Не так уж много, что вы можетеdo особенно Scikit-learn
не добавлял опцию для управления проблемой хранения на лету (насколько я знаю).
Скорее вам нужно изменить значение вышеупомянутогопараметры, например:
Старайтесь сохранять наиболее важные функции, только если количество функций уже велико (см. Выбор функций в Scikit-learn и Значения признаков с лесами деревьев ).
Попробуйте уменьшить количество оценок.
max_depth
равно None
по умолчанию, что означает, что узлы расширяются до тех пор, пока все листья не станут чистыми или пока все листья не будут содержать менее min_samples_split
выборок.
min_samples_leaf
по умолчанию 1
: разделениеточка на любой глубине будет рассматриваться только если она уходит ввосточные min_samples_leaf
тренировочные образцы в каждой из левой и правой ветвей.Это может привести к сглаживанию модели, особенно в регрессии.
Поэтому попробуйте изменить параметры, понимая их влияние на производительность. Справочная информация: .
Последний и последний вариант, который у вас есть, - это создать свой собственный настроенный
Random Forest
с нуля и загрузить метаданные на жесткий диск ... и т. Д. Или выполнить любую оптимизацию, это неудобно, но просто упомянуть такой вариант,
здесь является примером базовой реализации!
Примечание:
Практически я испытывал на своем Core i7
ноутбуке, что настройкаПараметр от n_jobs
до -1
перегружает машину, я всегда считаю более эффективным сохранение значения по умолчанию, равного n_jobs=None
!Хотя теоретически это должно быть наоборот!