728x90

이번 시간은 R응용 머신러닝 실습 시간입니다.

딥러닝 공부를 하기 전에, 또는 딥러닝을 조금 보다 보면 간단한 실습이라도 먼저 해보고 싶은

생각이 들곤 합니다.

머신러닝의 마지막인 신경망에 관한 간단한 실습을 합니다.

데이터는 그동안 많이 사용하여 왔고, 우리에게 익숙한 붓꽃 데이터입니다.

 

install.packages("neuralnet")   # 패키지 neurlanet 설치

library(neuralnet)                 # 패키지 neuralnet 로드

# iris 데이터를 이용하여 Species 예측을 하는데 hidden layer=1 로 지정

model_neu <- neuralnet(Species~.,data=iris,hidden=1) 

plot(model_neu)

 

첫 그림은 은닉층(hidden layer)가 1개인 경우입니다.

layer=1 인 경우

신경망을 실행하는 프로그램은 너무 간단합니다. 결과도 멋있게 나옵니다.

아직 모형 평가는 안 했지만 모형 성능도 대단히 좋게 나옵니다.

 

(1) 우선 입력층에 붓꽃의 변수가 4개가 보기 좋게 들어가고

(2) bias 가 (1) 이 있고

(3) 가중치들이 보기 좋게 결정되고

(4) 이렇게 하여 붓꽃이 어느 종류에 속하게 되는지 예측하는 모형이 구해지는 것을

 

쉽게 이해할 수 있습니다. 물론 예측능력도 뛰어나고요...

근데 문제는 해석입니다. 가중치들의 의미, 왜 그렇게 나왔는지를 모릅니다.

암튼 "신경망을 이용하여 그렇게 나왔다" 하면 답변이 되기는 하지만

"그러니까 신경망을 이용했는데 그 가중치의 의미가 뭐냐? 어떤 것은 음수이고..."

이 가중치의 의미, 이 모형의 의미를 해석하고자 노력하는 것이 신경망의 새로운 분야입니다.

 

# iris 데이터를 이용하여 Species 예측을 하는데 hidden layer=3 로 지정

model_neu2 <- neuralnet(Species~.,data=iris,hidden=3)

plot(model_neu2)

 

다음 그림은 은닉층(hidden layer)가 3개인 경우입니다.

layer=3 인 경우

 

 

예측(Predict)

predict(model_neu,newdata=iris)

m <- unlist(model_neu$net.result)

m1 <-matrix(m,ncol=3,byrow = F)

idx <- apply(m1,1,which.max)

predicted <- c('setosa', 'versicolor', 'virginica')[idx]

table(predicted, iris$Species)

 

+ Recent posts