library(nnet)
data(iris)
head(iris)
attach(iris)
# iris  data.frame ɂȂĂ̂ŁÂ܂܎gpB
iris.nn <- nnet( Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, iris, 
                size=3, maxit=1000)
# Species  Species ȊOׂĂ̑Ő悤ƂȂ, 
# iris.nn <- nnet( Species ~ ., iris,  size=3, maxit=1000)
## wKf[^̕ތ
# apply( predict(iris.nn), 1, which.max )

# confusion matrix
table( Species, apply(predict(iris.nn),1,which.max) )


# o͑fq 1 ɂĂ݂悤BeSpecies  1,2,3 ɊU邱ƂɂB
#   as.integer(iris$Species) Ƃ΂悢
# ܘ_ Species ̂܂ܗplogisitc function ł͕\łȂB
# o͑fq`ɂĂ݂悤
# ԑfqĂ݂悤i̕Kv́ÁAȂj
set.seed(100)
iris.nn <- nnet(iris[-5],as.integer(iris$Species),linout=T,size=9, maxit=1000,decay=0.01) 
# \l predict(iris.nn) œ邪A͎lłB
# ľܓāiA1,2,3 ƂȂ邾낤jAތʂƂB
table( Species, round(predict(iris.nn)) )

# o͒l 1/3, 2/3,1 ƂĊwKĂ݂悤
set.seed(100)
iris.nn <- nnet(iris[-5],as.integer(iris$Species)/max(as.integer(iris$Species)),
    linout=T,size=9, maxit=1000,decay=0.01) 
table(Species,round(predict(iris.nn)*max(as.integer(iris$Species))))

# vbg
plot(as.integer(Species), predict(iris.nn))

# \덷vZł. 傫ȈӖ͂Ȃ
# ϓ덷̕
sqrt( sum((as.integer(Species) - predict(iris.nn))^2)/length(Species) )
# ϐΌ덷
sum( abs(as.integer(Species) - predict(iris.nn)))/length(Species)


