Kendi sorumu cevaplamak için RBM'ler için R'de küçük bir paket yazdım: https://github.com/zachmayer/rbm
Bu paket hala yoğun bir gelişim aşamasında ve RBM'ler hakkında çok az şey biliyorum. Paketi devtools kullanarak yükleyebilirsiniz :
devtools:::install_github('zachmayer/rbm')
library(rbm)
?rbm
?rbm_gpu
?stacked_rbm
Bu kod Andrew Landgraf'ın R ve Edwin Chen'in python'daki uygulamasına benziyor , ancak işlevi R üssündeki pca işlevine benzeyen ve istifleme için işlevsellik içeren yazdım. Sanırım , nasıl kullanılacağını asla çözemediğim (CRAN'dan çıkarılmadan önce bile) dach paketinden biraz daha kullanıcı dostu olduğunu düşünüyorum .
Eğer varsa gputools paketi yüklü Eğer rbm_gpu fonksiyonu ile matris işlemleri için GPU kullanabilirsiniz. Bu işleri çok hızlandırıyor! Ayrıca, bir RBM'deki işlerin çoğu matris işlemleriyle yapılır, bu yüzden sadece OpenBLAS gibi iyi bir BLAS kurmak da işleri çok hızlandıracaktır.
İşte Edwin’in örnek veri setindeki kodu çalıştırdığınızda ne olacak:
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