Neural Network

Neural Network은 인간 두뇌의 신경망을 흉내 내어 확보한 데이터로부터 반복적인 학습 과정을 거쳐 데이터에 숨어 있는 패턴을 찾아내는 모델링 기법이다.

1. 특징

1.1. 장점

1.2. 단점

3. 예제

party package example by Zhao

## nnet package를 이용하여 iris 데이터를 Neural Network 분석기법으로
## 분류해 본다.
library(nnet)
## iris 데이터에 대하여 알아본다.
data(iris)
str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
## iris 데이터를 7:3의 비율로 trainData와 testData로 샘플링한다.
set.seed(1234)
ind <- sample(2, nrow(iris), replace = TRUE, prob = c(0.7, 0.3))
trainData <- iris[ind == 1, ]
testData <- iris[ind == 2, ]
## iris 데이터를 NeuralNetwork 방법을 이용하여 분석한다.
iris.nn <- nnet(Species ~ ., data = trainData, size = 2, rang = 0.1, decay = 5e-04, 
    maxit = 200)
## # weights:  19
## initial  value 123.260878 
## iter  10 value 66.197847
## iter  20 value 51.290637
## iter  30 value 50.506591
## iter  40 value 50.176652
## iter  50 value 50.075896
## iter  60 value 43.167218
## iter  70 value 12.527819
## iter  80 value 8.006959
## iter  90 value 7.880312
## iter 100 value 7.819341
## iter 110 value 7.715604
## iter 120 value 7.279501
## iter 130 value 6.822335
## iter 140 value 6.437068
## iter 150 value 6.342601
## iter 160 value 6.126644
## iter 170 value 6.070501
## iter 180 value 6.058934
## iter 190 value 6.052817
## iter 200 value 6.042796
## final  value 6.042796 
## stopped after 200 iterations
summary(iris.nn)
## a 4-2-3 network with 19 weights
## options were - softmax modelling  decay=5e-04
##  b->h1 i1->h1 i2->h1 i3->h1 i4->h1 
##   8.13   0.48   1.11  -1.70  -3.47 
##  b->h2 i1->h2 i2->h2 i3->h2 i4->h2 
##   0.34   0.57   1.84  -3.05  -1.54 
##  b->o1 h1->o1 h2->o1 
##  -5.35   2.13   9.75 
##  b->o2 h1->o2 h2->o2 
##  -2.30   8.64  -8.79 
##  b->o3 h1->o3 h2->o3 
##   7.65 -10.78  -0.96
## trainData에 대하여 설정한 Neural Network을 이용하여 예측한 값을
## 출력한다.
train.pred <- predict(iris.nn, newdata = trainData, type = "class")
train.pred
##   [1] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
##   [6] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
##  [11] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
##  [16] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
##  [21] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
##  [26] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
##  [31] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
##  [36] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
##  [41] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
##  [46] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
##  [51] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
##  [56] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
##  [61] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
##  [66] "virginica"  "versicolor" "versicolor" "versicolor" "versicolor"
##  [71] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
##  [76] "versicolor" "versicolor" "versicolor" "virginica"  "virginica" 
##  [81] "virginica"  "virginica"  "virginica"  "virginica"  "virginica" 
##  [86] "virginica"  "virginica"  "virginica"  "virginica"  "virginica" 
##  [91] "virginica"  "virginica"  "virginica"  "virginica"  "virginica" 
##  [96] "virginica"  "virginica"  "virginica"  "virginica"  "virginica" 
## [101] "virginica"  "versicolor" "virginica"  "virginica"  "virginica" 
## [106] "virginica"  "virginica"  "virginica"  "virginica"  "virginica" 
## [111] "virginica"  "virginica"
## 실제 trainData값과 예측값을 비교하는 교차표를 출력한다.
table(train.pred, trainData$Species)
##             
## train.pred   setosa versicolor virginica
##   setosa         40          0         0
##   versicolor      0         37         1
##   virginica       0          1        33
## testData에 대하여 설정한 Neural Network을 이용하여 예측한 값을
## 출력한다.
test.pred <- predict(iris.nn, newdata = testData, type = "class")
test.pred
##  [1] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
##  [6] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
## [11] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [16] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [21] "versicolor" "versicolor" "virginica"  "virginica"  "virginica" 
## [26] "virginica"  "virginica"  "virginica"  "virginica"  "virginica" 
## [31] "virginica"  "virginica"  "virginica"  "virginica"  "virginica" 
## [36] "virginica"  "virginica"  "virginica"
## 실제 testData값과 예측값을 비교하는 교차표를 출력한다.
table(test.pred, testData$Species)
##             
## test.pred    setosa versicolor virginica
##   setosa         10          0         0
##   versicolor      0         12         0
##   virginica       0          0        16