Pour répondre à ma propre question, j'ai écrit un petit paquetage dans R pour RBM: https://github.com/zachmayer/rbm
Ce paquet est encore en plein développement, et je connais très peu de RBM, alors je serais ravi de recevoir vos commentaires (et demandes de pull!). Vous pouvez installer le paquet en utilisant devtools :
devtools:::install_github('zachmayer/rbm')
library(rbm)
?rbm
?rbm_gpu
?stacked_rbm
Le code est similaire à l'implémentation d'Andrew Landgraf dans R et à l'implémentation d'Edwin Chen en python , mais j'ai écrit que la fonction était similaire à la fonction pca dans la base R et incluait une fonctionnalité d'empilage. Je pense que c'est un peu plus convivial que le paquet darch , que je ne saurais jamais utiliser (même avant sa suppression de CRAN).
Si le paquet gputools est installé, vous pouvez utiliser votre GPU pour les opérations de matrice avec la fonction rbm_gpu. Cela accélère beaucoup les choses! En outre, la majeure partie du travail dans un RBM se fait avec des opérations matricielles. Il ne suffit donc pas d’installer un bon BLAS, tel que openBLAS, pour que les choses s’éclatent .
Voici ce qui se passe lorsque vous exécutez le code sur l'exemple de jeu de données d'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