내 자신의 질문에 대답하기 위해 RBM 용 R에 작은 패키지를 작성했습니다. 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 구현 과 비슷하지만 기본 R의 pca 함수와 유사한 함수를 작성했으며 스태킹 기능을 포함했습니다. 나는 그것이 dach 패키지 보다 조금 더 사용자 친화적이라고 생각합니다.이 패키지 는 사용 방법을 알 수 없었습니다 (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