Я использую пакет party в R с 10 000 строк и 34 функциями, а некоторые факторные функции имеют более 300 уровней. Время вычислений слишком велико. (Это заняло 3 часа и еще не закончено.)
Я хочу знать, какие элементы оказывают большое влияние на время вычислений случайного леса. Есть ли факторы со слишком большим количеством уровней? Существуют ли какие-либо оптимизированные методы для улучшения ВЧ вычислительного времени?
r
random-forest
Ченгау Лю
источник
источник
Так как randomForest - это набор независимых тележек, обученных случайному подмножеству функций и записей, он пригоден для распараллеливания.
combine()
Функция в RandomForest пакет будет склеивать самостоятельно подготовленные леса. Вот игрушечный пример. Как говорится в ответе @mpq, вы не должны использовать формульную нотацию, а передавать данные / матрицу переменных и вектор результатов. Я бесстыдно снял их с документов.Я передал функцию объединения randomForest параметру с одноименным названием .combine (который управляет функцией на выходе цикла. Обратной стороной является то, что вы не получаете частоту ошибок OOB или более важную для трагического значения важность).
Редактировать:
Перечитав пост, я понимаю, что ничего не говорю о проблеме 34+. Весьма не продуманный ответ мог бы представлять их как двоичные переменные. Это каждый фактор столбец, который закодирован с коэффициентом 0/1 относительно его наличия / отсутствия. Сделав некоторый выбор переменных для неважных факторов и удалив их, вы можете не допустить, чтобы пространство объектов стало слишком большим.
источник
Я бы предложил пару ссылок:
1) Сокращение количества уровней факторной переменной - это ссылка на вопрос о том,
stackoverflow
как решить аналогичную проблему при использованииrandomForest
пакета. В частности, речь идет об использовании только наиболее часто встречающихся уровней и назначении нового уровня всем другим, менее часто встречающимся уровням.Идея для этого пришла отсюда: Кубок KDD 2009 Slow Challenge . Данные для этого конкурса имели множество факторов с множеством уровней, и в нем обсуждаются некоторые методы, которые они использовали для сокращения данных с 50000 строк на 15000 столбцов для работы на 2-ядерном / 2 ГБ ОЗУ.
Последним моим предложением было бы посмотреть на параллельное выполнение проблемы, как предложено выше, на экземпляре Amazon EC2 с высоким процессором.
источник
Я не могу говорить о скорости конкретных алгоритмов в R, но должно быть очевидно, что вызывает длительное время вычислений. Для каждого дерева в каждой ветви CART ищет форму наилучшего двоичного разбиения. Таким образом, для каждой из 34 функций наиболее подробно рассматриваются расщепления, заданные каждым из уровней переменных. Умножьте время выполнения каждого разбиения в дереве на количество веток в дереве, а затем умножьте его на количество деревьев в лесу, и у вас будет длительное время выполнения. Кто знает? Может быть, даже с быстрым компьютером это может занять годы, чтобы закончить?
Я думаю, что лучший способ ускорить процесс состоит в том, чтобы объединить некоторые уровни вместе, чтобы каждая переменная снизилась до 3–5 уровней, а не до 300. Конечно, это зависит от возможности сделать это без потери важных информация в ваших данных.
После этого, возможно, вы могли бы посмотреть, есть ли какой-нибудь умный алгоритм, который может ускорить время поиска для разделения на каждом узле отдельных деревьев. может случиться так, что в определенном дереве разделенный поиск - это повторение поиска, уже выполненного для предыдущего дерева. Так что, если вы можете сохранить решения предыдущих разделенных решений и определить, когда вы повторяете, возможно, эта стратегия может немного сэкономить на вычислительном времени.
источник