data(iris)
iris$setosa <- iris$Species=="setosa"
iris$virginica <- iris$Species == "virginica"
iris$versicolor <- iris$Species == "versicolor"
iris.train.idx <- sample(x = nrow(iris), size = nrow(iris)*0.5)
iris.train <- iris[iris.train.idx,]
iris.valid <- iris[-iris.train.idx,]
library(neuralnet)
iris.net <- neuralnet(setosa+versicolor+virginica ~ 
                      Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, 
                      data=iris.train, hidden=c(10,10), rep = 5, err.fct = "ce", 
                      linear.output = F, lifesign = "minimal", stepmax = 1000000,
                      threshold = 0.001)
## hidden: 10, 10    thresh: 0.001    rep: 1/5    steps:     163    error: 0.00036  time: 0.04 secs
## hidden: 10, 10    thresh: 0.001    rep: 2/5    steps:     227    error: 0.00013  time: 0.06 secs
## hidden: 10, 10    thresh: 0.001    rep: 3/5    steps:     300    error: 0.00014  time: 0.05 secs
## hidden: 10, 10    thresh: 0.001    rep: 4/5    steps:     238    error: 9e-05    time: 0.05 secs
## hidden: 10, 10    thresh: 0.001    rep: 5/5    steps:     158    error: 0.00017  time: 0.03 secs
plot(iris.net, rep="best")

iris.prediction <- compute(iris.net, iris.valid[-5:-8])
idx <- apply(iris.prediction$net.result, 1, which.max)
predicted <- c('setosa', 'versicolor', 'virginica')[idx]
table(predicted, iris.valid$Species)
##             
## predicted    setosa versicolor virginica
##   setosa         25          0         0
##   versicolor      0         23         8
##   virginica       0          0        19
iris.uci <- read.csv(url("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"), header=FALSE, col.names=c("sepal.length","sepal.width","petal.length","petal.width","species"))

head(iris.uci)
##   sepal.length sepal.width petal.length petal.width     species
## 1          5.1         3.5          1.4         0.2 Iris-setosa
## 2          4.9         3.0          1.4         0.2 Iris-setosa
## 3          4.7         3.2          1.3         0.2 Iris-setosa
## 4          4.6         3.1          1.5         0.2 Iris-setosa
## 5          5.0         3.6          1.4         0.2 Iris-setosa
## 6          5.4         3.9          1.7         0.4 Iris-setosa
set.seed(101)
size.sample <- 50
iristrain <- iris[sample(1:nrow(iris), size.sample),] # get a training sample from iris
nnet_iristrain <- iristrain

# Binarize the categorical output
nnet_iristrain <- cbind(nnet_iristrain, iristrain$Species == 'setosa')
nnet_iristrain <- cbind(nnet_iristrain, iristrain$Species == 'versicolor')
nnet_iristrain <- cbind(nnet_iristrain, iristrain$Species == 'virginica')

names(nnet_iristrain)[6] <- 'setosa'
names(nnet_iristrain)[7] <- 'versicolor'
names(nnet_iristrain)[8] <- 'virginica'

head(nnet_iristrain) 
##     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species setosa
## 73           6.3         2.5          4.9         1.5 versicolor  FALSE
## 57           6.3         3.3          4.7         1.6 versicolor  FALSE
## 95           5.6         2.7          4.2         1.3 versicolor  FALSE
## 148          6.5         3.0          5.2         2.0  virginica  FALSE
## 61           5.0         2.0          3.5         1.0 versicolor  FALSE
## 59           6.6         2.9          4.6         1.3 versicolor  FALSE
##     versicolor virginica iristrain$Species == "setosa"
## 73       FALSE      TRUE                         FALSE
## 57       FALSE      TRUE                         FALSE
## 95       FALSE      TRUE                         FALSE
## 148       TRUE     FALSE                         FALSE
## 61       FALSE      TRUE                         FALSE
## 59       FALSE      TRUE                         FALSE
##     iristrain$Species == "versicolor" iristrain$Species == "virginica"
## 73                               TRUE                            FALSE
## 57                               TRUE                            FALSE
## 95                               TRUE                            FALSE
## 148                             FALSE                             TRUE
## 61                               TRUE                            FALSE
## 59                               TRUE                            FALSE
nn <- neuralnet(setosa+versicolor+virginica ~ Sepal.Length+Sepal.Width+Petal.Length+Petal.Width, data=nnet_iristrain, hidden=c(3))

plot(nn) 
set.seed(102)
size.sample <- 100
iristrain <- iris[sample(1:nrow(iris), size.sample),] # get a training sample from iris
nnet_iristrain <- iristrain

# Binarize the categorical output
nnet_iristrain <- cbind(nnet_iristrain, iristrain$Species == 'setosa')
nnet_iristrain <- cbind(nnet_iristrain, iristrain$Species == 'versicolor')
nnet_iristrain <- cbind(nnet_iristrain, iristrain$Species == 'virginica')

names(nnet_iristrain)[6] <- 'setosa'
names(nnet_iristrain)[7] <- 'versicolor'
names(nnet_iristrain)[8] <- 'virginica'

head(nnet_iristrain) 
##     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species setosa
## 87           6.7         3.1          4.7         1.5 versicolor  FALSE
## 46           4.8         3.0          1.4         0.3     setosa   TRUE
## 84           6.0         2.7          5.1         1.6 versicolor  FALSE
## 136          7.7         3.0          6.1         2.3  virginica  FALSE
## 144          6.8         3.2          5.9         2.3  virginica  FALSE
## 106          7.6         3.0          6.6         2.1  virginica  FALSE
##     versicolor virginica iristrain$Species == "setosa"
## 87       FALSE      TRUE                         FALSE
## 46       FALSE     FALSE                          TRUE
## 84       FALSE      TRUE                         FALSE
## 136       TRUE     FALSE                         FALSE
## 144       TRUE     FALSE                         FALSE
## 106       TRUE     FALSE                         FALSE
##     iristrain$Species == "versicolor" iristrain$Species == "virginica"
## 87                               TRUE                            FALSE
## 46                              FALSE                            FALSE
## 84                               TRUE                            FALSE
## 136                             FALSE                             TRUE
## 144                             FALSE                             TRUE
## 106                             FALSE                             TRUE
nn <- neuralnet(setosa+versicolor+virginica ~ Sepal.Length+Sepal.Width+Petal.Length+Petal.Width, data=nnet_iristrain, hidden=c(3))

plot(nn) 
set.seed(103)
size.sample <- 150
iristrain <- iris[sample(1:nrow(iris), size.sample),] # get a training sample from iris
nnet_iristrain <- iristrain

# Binarize the categorical output
nnet_iristrain <- cbind(nnet_iristrain, iristrain$Species == 'setosa')
nnet_iristrain <- cbind(nnet_iristrain, iristrain$Species == 'versicolor')
nnet_iristrain <- cbind(nnet_iristrain, iristrain$Species == 'virginica')

names(nnet_iristrain)[6] <- 'setosa'
names(nnet_iristrain)[7] <- 'versicolor'
names(nnet_iristrain)[8] <- 'virginica'

head(nnet_iristrain) 
##     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species setosa
## 72           6.1         2.8          4.0         1.3 versicolor  FALSE
## 44           5.0         3.5          1.6         0.6     setosa   TRUE
## 88           6.3         2.3          4.4         1.3 versicolor  FALSE
## 110          7.2         3.6          6.1         2.5  virginica  FALSE
## 89           5.6         3.0          4.1         1.3 versicolor  FALSE
## 77           6.8         2.8          4.8         1.4 versicolor  FALSE
##     versicolor virginica iristrain$Species == "setosa"
## 72       FALSE      TRUE                         FALSE
## 44       FALSE     FALSE                          TRUE
## 88       FALSE      TRUE                         FALSE
## 110       TRUE     FALSE                         FALSE
## 89       FALSE      TRUE                         FALSE
## 77       FALSE      TRUE                         FALSE
##     iristrain$Species == "versicolor" iristrain$Species == "virginica"
## 72                               TRUE                            FALSE
## 44                              FALSE                            FALSE
## 88                               TRUE                            FALSE
## 110                             FALSE                             TRUE
## 89                               TRUE                            FALSE
## 77                               TRUE                            FALSE
nn <- neuralnet(setosa+versicolor+virginica ~ Sepal.Length+Sepal.Width+Petal.Length+Petal.Width, data=nnet_iristrain, hidden=c(3))

plot(nn)