अपने प्रश्न का उत्तर देने के लिए, मैंने RBM के लिए R में एक छोटा पैकेज लिखा: https://github.com/zachmayer/rbm
यह पैकेज अभी भी भारी विकास के अधीन है, और मैं आरबीएम के बारे में बहुत कम जानता हूं, इसलिए मैं आपके पास किसी भी प्रतिक्रिया (और पुल:) का स्वागत करूंगा। आप devtools का उपयोग करके पैकेज स्थापित कर सकते हैं :
devtools:::install_github('zachmayer/rbm')
library(rbm)
?rbm
?rbm_gpu
?stacked_rbm
कोड आर और एडविन चेन के अजगर में एंड्रयू लैंडग्राफ के कार्यान्वयन के समान है , लेकिन मैंने फ़ंक्शन को बेस आर में pca फ़ंक्शन के समान होने और स्टैकिंग के लिए कार्यक्षमता शामिल करने के लिए लिखा था। मुझे लगता है कि यह प्रिंट पैकेज की तुलना में थोड़ा अधिक उपयोगकर्ता के अनुकूल है , जिसे मैं कभी भी समझ नहीं पा रहा था कि कैसे उपयोग करें (सीआरएएन से हटाए जाने से पहले भी)।
यदि आपके पास gputools पैकेज स्थापित है, तो आप rbm_gpu फ़ंक्शन के साथ मैट्रिक्स संचालन के लिए अपने GPU का उपयोग कर सकते हैं। यह चीजों को बहुत गति देता है! इसके अलावा, आरबीएम में अधिकांश कार्य मैट्रिक्स के संचालन के साथ किया जाता है, इसलिए बस एक अच्छा बीएलएएस स्थापित करना, जैसे कि ओपनबीएलएएस भी चीजों को बहुत गति देगा।
जब आप एडविन के उदाहरण डेटासेट पर कोड चलाते हैं तो ऐसा होता है:
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