Оптимізовані реалізації алгоритму Random Forest


44

Я помітив, що є кілька реалізацій випадкових лісів, таких як ALGLIB, Waffles і деякі подібні R-пакети randomForest. Хтось може сказати мені, чи ці бібліотеки високо оптимізовані? Вони в основному еквівалентні випадковим лісам, як це детально описано в «Елементах статистичного навчання», або було додано багато зайвих хитрощів?

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


Випадкові джунглі можуть працювати на багатьох серверах паралельно. Див .: Schwarz, et al (2010). Від safari до Random Jungle: швидка реалізація випадкових лісів для об'ємних даних. Біоінформатика, 26 , 14, pp. 1752–8, doi.org/10.1093/bioinformatics/btq257 . код: 1 ; 2 ; 3 ; 4 .
Користувач128525

Відповіді:


31

(Оновлено 6 IX 2015 з пропозиціями коментарів, також зроблено CW)

Доступні два нові, приємні пакети для R, які досить добре оптимізовані для певних умов:

  • ranger - пакет C ++, R, оптимізований для проблем , паралельна, спеціальна обробка даних GWAS.p>>n
  • Лісівник - C ++, R і Python прив'язка, оптимізована для крупно- проблем, по- видимому планів GPGPU.n

Інші реалізації РФ:

  • Оригінальний - окремий код Fortran, а не паралельний, досить важкий у використанні.
  • randomForest - пакет C, R, мабуть, найпопулярніший, а не паралельний, насправді досить швидкий у порівнянні з одноядерною швидкістю, особливо для невеликих даних.
  • randomForestSRC - пакет C, R, клон randomForest, що підтримує паралельну обробку та проблеми виживання.
  • сторона - пакет C, R, досить повільний, але розроблений як площина для експериментів з РФ.
  • bigrf - пакет C + / R, R, створений для роботи над великими даними в рамках bigmemory ; досить далеко не повною.
  • scikit learn Ансамбль лісу - Python, частина рамки scikit-learn, паралельна, реалізує багато варіантів РФ.
  • Milk «сек РФ - Python, частина рамок молока.
  • Вафлі - C ++, частина більшого набору інструментів ML, паралельна і досить швидка.
  • так званий WEKA rf - Java / WEKA, паралельний.
  • АЛГЛІБ
  • Випадкові джунглі - покинуті?
  • rt-ранг - покинутий?
  • PARF - покинутий?

Папір Ranger має деякі порівняння швидкості та пам’яті, але ретельного орієнтиру немає.


6
Тепер можна додати sklearn.ensemble з панелі інструментів Python scikit-learn.
chl

1
Молоко в Python також має реалізацію Random Forest.
JEquihua

3
Випадкові джунглі витіснили Рейнджер. Я спробував R ver (є ще одна версія C ++), і це помітно швидше, ніж randomForest (я не встиг його). Автор провів тестування в окремому документі ( arxiv.org/abs/1508.04409 ).
NoviceProg

11

Наскільки я знаю, версія R randomForest називає той же код Fortran, що і оригінальна версія. Крім того, тривіально паралелізувати функцію randomForest. Це фактично один із прикладів, наведених у документації foreach .

library(foreach)
library(randomForest)
rf <- foreach(ntree = rep(250, 4), .combine = combine, .packages = "randomForest") %dopar% 
randomForest(x, y, ntree = ntree)

Зважаючи на те, що випадкові ліси бентежно паралельні, найбільша оптимізація, яку ви можете зробити, - це запустити їх паралельно. Після цього, я не думаю, що в алгоритмі немає інших низько висячих фруктів, але я можу помилитися.

Єдине питання полягає в тому, що ви втрачаєте оцінку помилок, що знаходяться в кошику, у комбінованому лісі, але, мабуть, існує простий спосіб її обчислити (я насправді хотів би дізнатися, як це зробити).


7

ELSII використовується RandomForest (дивись , наприклад, виноска 3 p.591), який є реалізацією R від Breiman і Катлер Fortran код з Salford. Код Енді Лія знаходиться в C.

У пакеті партії (в С) запропонована ще одна реалізація РФ , яка покладається на R / Lapack, яка має певні залежності від BLAS (див. /include/R_ext/Lapack.hУ базовому каталозі R).

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


5

Команда, що стоїть за randomJungle, стверджує, що на порядок швидше, ніж реалізація R randomForest, і використовує на порядок менше пам'яті. Пакет для randomJungle розробляється для R, але поки не можу приступити до створення.

https://r-forge.r-project.org/projects/rjungler/


Не впевнений, чи це все ще цікавить вас через 4 роки, але автор (и) randomJungle витіснив його з Ranger. Я спробував версію R, і це справді помітно швидше, ніж randomForest з деякими зразковими даними (я не встиг).
NoviceProg

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.