2015-11-20 8 views
3

Я использую библиотеку gbm в R, и я бы хотел использовать весь мой процессор, чтобы он соответствовал модели.Существует ли параллельная реализация GBM в R?

gbm.fit(x, y, 
     offset = NULL, 
     misc = NULL,... 
+0

'gbm' может использоваться параллельно самостоятельно. Он имеет аргумент 'n.cores', который заставляет его работать параллельно. Проверьте [здесь] (https://cran.r-project.org/web/packages/gbm/gbm.pdf) – LyzandeR

+1

@LyzandeR Аргумент 'n.cores' распараллеливается в перекрестных проверках, а не для подгонки одной модели (что я думаю, о чем просит ОП). – DunderChief

ответ

2

Насколько я знаю, как h2o и xgboost есть это.

Для h2o см., Например, this blog post of theirs from 2013, из которого я цитирую

В 0xdata мы строим состоянии современных распределенных алгоритмов - и недавно мы приступили на строительство GBM, и алгоритм пресловутый за то, что невозможно распараллелить гораздо меньше распространять. Мы построили алгоритм, показанный в Elements of Statistical Learning II, Trevor Hastie, Robert Tibshirani и Jerome Friedman на стр. 387 (показано внизу этого сообщения). Большая часть алгоритма - это простая «малая» математика, но на шаге 2.b.ii говорится: «Установите дерево регрессии на цели ...», то есть установите дерево регрессии в середине внутреннего цикла, для целей, которые изменяются с каждым внешний контур. Именно здесь мы решили распространять/распараллеливать.

Платформа, на которой мы строим, представляет собой H2O, и, как говорилось в предыдущем блоге, имеет API, ориентированный на большие параллельные векторные операции - и для GBM (а также Random Forest) нам нужно выполнять большие параллельные операции дерева.Но на самом деле никакой операции с деревом; GBM (и RF) постоянно строят деревья - и работа всегда находится на листьях дерева, и заключается в том, чтобы найти следующую лучшую точку разделения для подмножества данных обучения, которые попадают в конкретный лист.

Код можно найти на нашем мерзавца: http://0xdata.github.io/h2o/

(Edit:. РЭПО сейчас находится в https://github.com/h2oai/)

Другая параллельная реализация GBM, я думаю, в xgboost. В его описаниях указывается

Extreme Gradient Boosting, которая является эффективной реализацией рамок повышения градиента. Этот пакет является его интерфейсом R. Пакет включает эффективный алгоритм решения линейных моделей и дерева. Пакет может автоматически выполнять параллельные вычисления на одной машине, которая может быть более чем в 10 раз быстрее, чем существующие пакеты повышения градиента. Он поддерживает различные целевые функции, включая регрессию, классификацию и ранжирование. Пакет становится расширяемым, так что пользователям также разрешается легко определять свои собственные цели.

+0

Dirk, из ссылки блога «H2O'' (их кодовая ссылка мертва):« Эффективно тогда мы полностью параллельны и распределены _ в одном уровне дерева_, но не через деревья (деревья GBM имеют последовательные зависимости), ни внутри уровни одного и того же дерева "(их акцент). Согласитесь, можно значительно повысить производительность с помощью таких умных идей, но сами деревья должны быть установлены последовательно. Я предполагаю, что подход '' xgboost' является чем-то похожим ... – desertnaut

+0

Все еще быстрее, чем все работает последовательно ... И их код [по-прежнему находится на GitHub] (https://github.com/h2oai/h2o-3), но я думаю, что РЕПО в движении ... –

+0

Согласитесь, конечно! – desertnaut

2

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

Рассмотрите следующие вопросы: Элементы статистического обучения, гл. 10 (форсированный и Присадка деревья), стр 337-339 (курсив мой):.

Слабый классификатор, чья ошибка скорости лишь немного лучше, чем случайного угадывания. Целью повышения является последовательно применять слабый алгоритм классификации для многократно измененных версий данных, , тем самым создавая последовательность слабых классификаторов Gm (x), m = 1, 2,. , , , M. Прогнозы из всех из них затем объединяются с помощью взвешенного голосов, чтобы произвести окончательное предсказание. [...] Каждый классификатор , последовательный, тем самым вынужден сосредоточиться на тех учебных наблюдениях, которые были пропущены предыдущими в последовательности.

В картине (там же, стр 338).:

enter image description here

На самом деле, это часто отмечается как ключевой недостаток GBM относительно, скажем, Random Forest (РФ), где деревья являются независимыми и поэтому могут быть установлены на парарелле (см. пакет bigrf R).

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