Para responder a mi propia pregunta, escribí un pequeño paquete en R para RBM: https://github.com/zachmayer/rbm
Este paquete está todavía en fase de desarrollo, y sé muy poco acerca de los RBMs, por lo que agradecería cualquier comentario (¡y petición de pull!) que tengas. Puedes instalar el paquete usando devtools :
devtools:::install_github('zachmayer/rbm')
library(rbm)
?rbm
?rbm_gpu
?stacked_rbm
El código es similar a Implementación de Andrew Landgraf en R y Implementación de Edwin Chen en python pero escribí la función para que fuera similar a la función pca en R base e incluyera la funcionalidad para el apilamiento. Creo que es un poco más fácil de usar que la función paquete darch que nunca pude averiguar cómo utilizar (incluso antes de que fuera retirado de CRAN).
Si tiene el paquete gputools instalado puedes usar tu GPU para las operaciones matriciales con la función rbm_gpu. Esto acelera mucho las cosas. Además, la mayor parte del trabajo en un RBM se realiza con operaciones matriciales, por lo que basta con instalar un buen BLAS, como openBLAS también acelerará mucho las cosas.
Esto es lo que ocurre cuando se ejecuta el código en el conjunto de datos de ejemplo de 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
1 votos
Relacionado: stats.stackexchange.com/questions/40598/ Que yo sepa, estos métodos no están disponibles (públicamente) en R.
0 votos
@Momo: Gracias por el enlace. Hay algún código público en C, C++, o fortran que pueda ser llamado desde R?
4 votos
Consulta la biblioteca de CUV o Eblearn (más información aquí deeplearning.net/software_links ) Las librerías de Python podrían ser una buena alternativa a R.
0 votos
Ver también didericksen.github.io/deeplearning-r-h2o
0 votos
Véase la aplicación de R en aquí .