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)