Untuk menjawab pertanyaan saya sendiri, saya menulis sebuah paket kecil dalam R untuk RBM: https://github.com/zachmayer/rbm
Paket ini masih dalam pengembangan, dan saya tahu sedikit tentang RBM, jadi saya akan menyambut umpan balik (dan menarik permintaan!) Yang Anda miliki. Anda dapat menginstal paket menggunakan devtools :
devtools:::install_github('zachmayer/rbm')
library(rbm)
?rbm
?rbm_gpu
?stacked_rbm
Kode ini mirip dengan implementasi Andrew Landgraf di R dan implementasi Edwin Chen di python , tapi saya menulis fungsi agar mirip dengan fungsi pca di basis R dan menyertakan fungsionalitas untuk susun. Saya pikir ini sedikit lebih ramah pengguna daripada paket darch , yang saya tidak pernah tahu cara menggunakannya (bahkan sebelum dihapus dari CRAN).
Jika Anda menginstal paket gputools, Anda dapat menggunakan GPU untuk operasi matriks dengan fungsi rbm_gpu. Ini mempercepat banyak hal! Selain itu, sebagian besar pekerjaan dalam RBM dilakukan dengan operasi matriks, jadi hanya memasang BLAS yang bagus, seperti openBLAS juga akan mempercepat banyak hal.
Inilah yang terjadi ketika Anda menjalankan kode pada contoh dataset 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