Чтобы ответить на мой собственный вопрос, я написал небольшой пакет в R для RBM: https://github.com/zachmayer/rbm
Этот пакет все еще находится в стадии разработки, и я очень мало знаю о RBM, так что я буду рад любым отзывам (и запросам!), Которые у вас есть. Вы можете установить пакет, используя devtools :
devtools:::install_github('zachmayer/rbm')
library(rbm)
?rbm
?rbm_gpu
?stacked_rbm
Код похож на реализацию Эндрю Лэндграфа в R и реализацию Эдвина Чена на python , но я написал функцию, которая будет похожа на функцию pca в base R и включает в себя функциональность для стекирования. Я думаю, что это немного более удобно для пользователя, чем пакет darch , который я никогда не мог понять, как использовать (даже до того, как он был удален из CRAN).
Если у вас установлен пакет gputools, вы можете использовать свой графический процессор для матричных операций с функцией rbm_gpu. Это сильно ускоряет процесс! Кроме того, большая часть работы в RBM выполняется с матричными операциями, поэтому простая установка хорошего BLAS, такого как openBLAS , также значительно ускорит процесс.
Вот что происходит, когда вы запускаете код на примере набора данных Эдвина:
set.seed(10)
print('Data from: https://github.com/echen/restricted-boltzmann-machines')
Alice <- c('Harry_Potter' = 1, Avatar = 1, 'LOTR3' = 1, Gladiator = 0, Titanic = 0, Glitter = 0) #Big SF/fantasy fan.
Bob <- c('Harry_Potter' = 1, Avatar = 0, 'LOTR3' = 1, Gladiator = 0, Titanic = 0, Glitter = 0) #SF/fantasy fan, but doesn't like Avatar.
Carol <- c('Harry_Potter' = 1, Avatar = 1, 'LOTR3' = 1, Gladiator = 0, Titanic = 0, Glitter = 0) #Big SF/fantasy fan.
David <- c('Harry_Potter' = 0, Avatar = 0, 'LOTR3' = 1, Gladiator = 1, Titanic = 1, Glitter = 0) #Big Oscar winners fan.
Eric <- c('Harry_Potter' = 0, Avatar = 0, 'LOTR3' = 1, Gladiator = 1, Titanic = 0, Glitter = 0) #Oscar winners fan, except for Titanic.
Fred <- c('Harry_Potter' = 0, Avatar = 0, 'LOTR3' = 1, Gladiator = 1, Titanic = 1, Glitter = 0) #Big Oscar winners fan.
dat <- rbind(Alice, Bob, Carol, David, Eric, Fred)
#Fit a PCA model and an RBM model
PCA <- prcomp(dat, retx=TRUE)
RBM <- rbm_gpu(dat, retx=TRUE, num_hidden=2)
#Examine the 2 models
round(PCA$rotation, 2) #PCA weights
round(RBM$rotation, 2) #RBM weights