เพื่อตอบคำถามของตัวเองฉันได้เขียนแพ็คเกจเล็ก ๆ ใน R สำหรับ RBMs: https://github.com/zachmayer/rbm
แพ็คเกจนี้ยังอยู่ในระหว่างการพัฒนาอย่างหนักและฉันรู้น้อยมากเกี่ยวกับ RBM ดังนั้นฉันจึงยินดีรับข้อเสนอแนะ (และดึงคำขอ!) ที่คุณมี คุณสามารถติดตั้งแพ็คเกจโดยใช้devtools :
devtools:::install_github('zachmayer/rbm')
library(rbm)
?rbm
?rbm_gpu
?stacked_rbm
รหัสนี้คล้ายกับการนำไปใช้ของ Andrew Landgraf ในการนำไปใช้ของ RและEdwin Chen ใน pythonแต่ฉันเขียนฟังก์ชันนี้คล้ายกับฟังก์ชัน pca ใน base R และรวมถึงฟังก์ชันการซ้อน ฉันคิดว่ามันใช้งานง่ายกว่าแพ็คเกจ darch เล็กน้อยซึ่งฉันไม่สามารถหาวิธีใช้ได้ (ก่อนที่จะถูกลบออกจาก CRAN)
หากคุณมีแพ็คเกจ gputoolsติดตั้งอยู่คุณสามารถใช้ GPU ของคุณในการดำเนินการเมทริกซ์ด้วยฟังก์ชั่น rbm_gpu สิ่งนี้ความเร็วสูงขึ้นมาก! นอกจากนี้งานส่วนใหญ่ใน RBM นั้นทำกับการดำเนินการของเมทริกซ์ดังนั้นการติดตั้ง BLAS ที่ดีเช่นopenBLASจะช่วยเพิ่มความเร็วให้มากขึ้น
นี่คือสิ่งที่เกิดขึ้นเมื่อคุณเรียกใช้รหัสในชุดข้อมูลตัวอย่างของ 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