Щоб відповісти на моє власне запитання, я написав невеликий пакет у R для RBM: https://github.com/zachmayer/rbm
Цей пакет все ще знаходиться у важкій розробці, і я знаю дуже мало про RBM, тому я вітаю будь-які відгуки (і запити на запитання!), Які у вас є. Ви можете встановити пакет за допомогою devtools :
devtools:::install_github('zachmayer/rbm')
library(rbm)
?rbm
?rbm_gpu
?stacked_rbm
Код схожий на реалізацію Ендрю Ландграфа в R та реалізацію Едвіна Чена в python , але я написав функцію, яка буде схожа на функцію pca в базі R і включає функціональність для складання. Я думаю, що це трохи зручніший користувач, ніж пакет darch , який я ніколи не міг зрозуміти, як користуватися (ще до того, як його було видалено з CRAN).
Якщо у вас встановлений пакет gputools, ви можете використовувати GPU для матричних операцій з функцією rbm_gpu. Це значно пришвидшує справи! Крім того, більша частина роботи в RBM виконується за допомогою матричних операцій, тому просто встановлення хорошого BLAS, наприклад openBLAS , також значно прискорить роботу.
Ось що відбувається під час запуску коду на прикладі набору даних Edwin:
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