R/Machine-Learning

R을 이용한 머신러닝 알고리즘 -인공신경망-

씩2 2022. 3. 12. 19:16

신경망은 인간이 가진 생물학적 특징인 뉴런을 의미합니다. 이러한 신경망모양을 본떠 만든 것을 인공 신경망이라고 합니다.

이러한 신경망 구조를 3개 이상 가진것을 딥러닝이라고 합니다.

우선 R에서 인공신경망을 사용하기 위해서 패키지 설치를 해보도록 하겠습니다.

코드는 다음과 같습니다.

install.packages('nnet')
library(nnet)

 

데이터는 내장 데이터셋인 iris데이터를 사용 하도록 하겠습니다.

data(iris)
idx = sample(1:nrow(iris), 0.7*nrow(iris))
training = iris[idx,]
testing = iris[-idx,]
nrow(training); nrow(testing)

train셋의 비율은 70% test셋의 비율은 30%로 지정해 주었습니다.

헹길이로 데이터셋이 잘 나누어 졌는지 확인을 해보도록 하겠습니다.

> nrow(training); nrow(testing)
[1] 105
[1] 45

총 105개의행 45개의 행으로 나뉜것을확인 할 수 있습니다.

 

트레이닝, 테스트 셋을 분리 시켰으니 이제 모델 생성을 해보도록 하겠습니다.

model_net_iris1 = nnet(Species ~ ., training, size = 1)
model_net_iris1
model_net_iris3 = nnet(Species ~ ., training, size = 3)
model_net_iris3

model_net_iris1 의 경우는 1개의 노드를 가진 인공신경망,

model_net_iris3의 경우는 3개의 노드를 가진 인공신경망 모델로 생성을 해보도록 하겠습니다.

 

이제 모델을 생성했으니 예측값과 그 결과를 해보겠습니다.

pred1 <- predict(model_net_iris1, testing, type = 'class')
pred3 <- predict(model_net_iris3, testing, type = 'class')
table(predict(model_net_iris1, testing, type = 'class'), testing$Species)
table(predict(model_net_iris3, testing, type = 'class'), testing$Species)

모델을 생성습니다 하지만 결과값이 데이터로 나열이 되어있으니 보기에 어려움이 있습니다.

때문에 plotnet()코드를 이용하여 생성된 모델의 플롯화 해줍니다.

코드는 다음과 같습니다.

plotnet(model_net_iris1)
plotnet(model_net_iris3)

한개의 히든 노드를 가진 모델과 3개의 히든 노드를 가지는 모델임을 눈으로 쉽게 확인 할 수있습니다.

 

 

 

생성된 각각의 신경망 모델과, 테스팅 결과를 교차 테이블로 만들어 확인을 해는 코드입니다.

결과 값은 다음과 같습니다.

 

> table(predict(model_net_iris1, testing, type = 'class'), testing$Species)
           
            setosa versicolor virginica
  setosa        13          0         0
  virginica      0         17        15

은닉층이 하나의 노드를 가진 인공신경망의 테이블 값입니다.

setosa, vesicolor, viginica 총 3개의 종류의 붓꽃이 있지만 분류는 2가지로만 된것을 볼수있습니다.

은닉층이 노드하나만 가지게되면 이진적인 분류밖에 할 수 없기 때문에 위와같은 결과값이 나온것을 볼수있습니다.

다음은 은닉층이 3개의 노드를 가진 인공신경망의 테이블을 확인해 보도록 하겠습니다.

 

> table(predict(model_net_iris3, testing, type = 'class'), testing$Species)
            
             setosa versicolor virginica
  setosa         13          0         0
  versicolor      0         17         0
  virginica       0          0        15

은닉층이 3개인 모델은 데이터 분류를 3개의 종류 모두 잘 분류해 놓은 것을 알 수 있습니다.