ИнтересноеОсновная

RandomForest на GPU…

Posted

В предыдущей статье я забыл рассказать, что еще одна претензия к R это отсутствие реализации GPU-вычислений (вычислений с использованием видеокарт). Но, что-то задумался — так ли это? Полез проверять и нашел очень полезную вещь.
Встречайте — Rborist — реализацию алгоритма RandomForest!
Вот что про него написано в документации: «Tuned for multicore and GPU hardware». То есть использует многопоточность и вычисления на видеокартах.

Решил сравнить по скорости с классическим RandomForest
Вот графики сравнения времени выполнения в секундах от количества данныхrboristvsrandomforest
Как говорится — результат «на лицо».
По хорошему — неплохо было бы сравнить эти два метода по точности — но руки до формального сравнения не дошли (например по RMSE), но быстрый взгляд на предсказание сказал что «похоже на правду».

Код сравнения скорости:
(осторожно, у меня на обычном компьютере с интегрированной видеокартой этот код крутился всю ночь до итератора 13600, дальше ждать не стал)
(Но тормозит именно класический RandomForest)


library(microbenchmark)
library(Rborist)
library(randomForest)
library(ggplot2)
library(reshape2)

df <- data.frame(n=NA, rb=NA, rf=NA)
df <- df[-1,]

for (i in seq(100, 15000, 100))
{
nRow <- i
print(i)
x <- data.frame(replicate(6, rnorm(nRow)))
y <- with(x, X1^2 + sin(X2) + X3 * X4) # courtesy of S. Welling.

z <- microbenchmark(Rborist(x,y), times = 3, unit='s')
a_rb <- summary(z)$median

z <- microbenchmark(randomForest(x,y), times = 3, unit='s')
a_rf <- summary(z)$median

df <- rbind(df, data.frame(n=i, rb=a_rb, rf=a_rf))
}

ndf <- melt(df, id.vars = 'n' )
ggplot(ndf)+
geom_line(aes(x=n, y=value, color=variable), size=1)+
geom_line(aes(x=n, y=value, color=variable), size=1)+
scale_color_discrete(labels=c("Rborist", "RandomForest"))+
theme_bw()

Добавить комментарий