앞서 사용한 neuralnet과 nnet 패키지 이외에도 R에는 다양한 머신 러닝 관련 패키지와 인공 신경망/딥러닝 패키지가 존재합니다. 모두 다 사용법을 익힐 수는 없고 RSNNS 패키지 하나 더 소개한 후 좀 더 전문적인 딥러닝 도구를 소개해볼까 합니다.
RSNNS 패키지는 Stuttgart Neural Network Simulator (SNNS)을 R에서 사용할 수 있게 한 것으로 이름처럼 슈트트가르트 대학에서 개발했으며 다층 퍼셉트론(multi-layer perceptrons, MLP) 기능을 포함해 여러 가지 다양한 신경망 및 시각화 기능을 제공합니다. 본래는 C++로 작성된 패키지로 R은 물론 파이선에서도 사용이 가능합니다.
우선 R에 RSNNS 패키지를 설치하고 보스턴 집값 예제를 같이 불러옵니다.
library(RSNNS)
library(MASS)
library(Metrics)
data("Boston", package = "MASS")
data<-boston span="">-boston>
data<-scale data="" span="">-scale>
set.seed(1234)
n = nrow(data)
train <- 400="" n="" sample="" span="">->
test <- data="" span="" train="">->
train <- data="" span="" train="">->
여기까지는 앞서 했던 예제로 데이터를 400개의 학습 데이터와 106개의 테스트 데이터로 나눈 것입니다. 정규화를 위해 데이터를 scale 함수로 처리했습니다. RSNNS의 mlp 함수에 넣기 위해 다시 train 데이터와 test 데이터를 input과 output 데이터로 나눕니다. 이는 앞서 봤던 뉴럴넷 및 nnet 패키지의 함수 기능과 동일합니다.
input_train=train[,c("lstat","rm","ptratio","dis","nox","chas","black","zn","crim","tax")]
output_train=train[,c("medv")]
input_test=test[,c("lstat","rm","ptratio","dis","nox","chas","black","zn","crim","tax")]
output_test=test[,c("medv")]
이제 mlp 함수에 값을 넣고 학습을 시킵니다. 참고로 디폴트 상태에서는 학습 횟수인 maxit가 100회로 정해져 있어 이를 1000회로 늘렸습니다.
mod<-mlp input_train="" maxit="1000)</span" output_train="" size="c(10,10,10),">-mlp>
summary(mod)
mod
predictions <- input_test="" mod="" predict="" span="">->
predictions
여러 가지 파라미터들이 나오지만 핵심은 예측을 하는 predict 함수입니다. 이 결과값을 앞서 했던 것과 같은 방식으로 비교해 보겠습니다.
data("Boston", package = "MASS")
data<-boston span="">-boston>
set.seed(1234)
n = nrow(data)
train <- 400="" n="" sample="" span="">->
test <- data="" span="" train="">->
train <- data="" span="" train="">->
test$medv2=predictions*sd(train$medv)+mean(train$medv)
test
test$medv3=test$medv-test$medv2
mean(test$medv3);sd(test$medv3)
result<-data .frame="" span="" test="">-data>
round(cor(result[,15], result$medv)^2,6)
mse(result[,15], result$medv)
rmse(result[,15], result$medv)
> test$medv3=test$medv-test$medv2
> mean(test$medv3);sd(test$medv3)
[1] -1.880373
[1] 7.232846
>
> result<-data .frame="" span="" test="">-data>
>
> round(cor(result[,15], result$medv)^2,6)
[,1]
[1,] 0.61133
> mse(result[,15], result$medv)
[1] 55.35634
> rmse(result[,15], result$medv)
[1] 7.440184
예측 결과는 사실 아주 좋다고 보기는 어려울 것 같습니다. 데이터의 특성과 패키지의 알고리즘에 따라 서로 다른 결과가 나올 수 있어 몇 가지의 패키지를 비교해 분석하는 것이 가장 좋은 결과를 얻을 수 있는 방법일 것입니다. 참고로 RSNNS 역시 시각화 툴이 있습니다.
#import the function from Github - https://beckmw.wordpress.com/tag/rsnns/
library(devtools)
source_url('https://gist.githubusercontent.com/fawda123/7471137/raw/466c1474d0a505ff044412703516c34f1a4684a5/nnet_plot_update.r')
plot.nnet(mod)
참고로 링크는 이 플롯 기능을 설명한 페이지 입니다.
다음에 좀 더 이야기를 해보겠습니다.
참고로 번역기를 돌린 듯 하지만, 이 패키지를 설명한 Journal of Statistical Software에 실린 Neural Networks in R Using the Stuttgart Neural Network Simulator: RSNNS에 대한 설명
물론 구글 검색을 돌리면 원본 PDF 파일도 쉽게 구할 수 있습니다.
댓글
댓글 쓰기