私自身の質問に答えるために、RBM用のRで小さなパッケージを作成しました:https : //github.com/zachmayer/rbm
このパッケージはまだ開発中です。RBMについてはほとんど知らないので、フィードバック(およびプルリクエスト)を歓迎します。devtoolsを使用してパッケージをインストールできます:
devtools:::install_github('zachmayer/rbm')
library(rbm)
?rbm
?rbm_gpu
?stacked_rbm
このコードは、RでのAndrew Landgrafの実装とpythonでのエドウィン・チェンの実装に似ていますが、ベースRのpca関数に似た関数を記述し、スタック用の機能を含めました。darchパッケージよりもユーザーフレンドリだと思います。使用方法がわかりません(CRANから削除される前でも)。
あなたが持っている場合はgputoolsパッケージがインストールされますがrbm_gpu機能付き行列演算のためのあなたのGPUを使用することができます。これは物事を大幅にスピードアップします!さらに、RBMのほとんどの作業はマトリックス操作で行われるため、openBLASなどの優れたBLASをインストールするだけでも、処理速度が大幅に向上します。
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