Để trả lời câu hỏi của riêng tôi, tôi đã viết một gói nhỏ bằng R cho RBM: https://github.com/zachmayer/rbm
Gói này vẫn đang được phát triển mạnh mẽ và tôi biết rất ít về RBM, vì vậy tôi hoan nghênh mọi phản hồi (và yêu cầu kéo!) Bạn có. Bạn có thể cài đặt gói bằng devtools :
devtools:::install_github('zachmayer/rbm')
library(rbm)
?rbm
?rbm_gpu
?stacked_rbm
Mã này tương tự như triển khai của Andrew Landgraf trong triển khai R và Edwin Chen trong python , nhưng tôi đã viết hàm này tương tự như hàm pca trong cơ sở R và bao gồm chức năng để xếp chồng. Tôi nghĩ rằng nó thân thiện với người dùng hơn một chút so với gói darch , điều mà tôi không bao giờ có thể tìm ra cách sử dụng (ngay cả trước khi nó bị xóa khỏi CRAN).
Nếu bạn đã cài đặt gói gputools, bạn có thể sử dụng GPU của mình cho các hoạt động ma trận với chức năng rbm_gpu. Điều này tăng tốc mọi thứ lên rất nhiều! Hơn nữa, hầu hết các công việc trong RBM đều được thực hiện với các hoạt động ma trận, vì vậy chỉ cần cài đặt BLAS tốt, chẳng hạn như openBLAS cũng sẽ tăng tốc mọi thứ lên rất nhiều.
Đây là những gì xảy ra khi bạn chạy mã trên tập dữ liệu mẫu của 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