setwd("D:/R/Sample")

library(nnet)
banknote <- read.csv ("08banknote.csv", header=TRUE)  
head(banknote)
attach(banknote)

# ڕW Y ̒l̎ނ݂
table(banknote[,length(banknote)])
# 2li0,1jȂ̂ŁAo͑fq1łA01o͖ڕWlɂȂB

# banknote  data.frame ɂȂĂ̂ŁÂ܂܎gpB
# ԑfq3ŎĂ݂悤
set.seed(100)
banknote.nn <- nnet( Y ~ ., banknote, size=3, maxit=1000)

## wKf[^̕ތ
#round(predict(banknote.nn))

# confusion matrix
table( Y, round(predict(banknote.nn)) )

set.seed(100)
banknote.nn <- nnet( Y ~ ., banknote, size=5, maxit=1000)
table( Y, round(predict(banknote.nn)) )

# ܂Ȃł傤B
# ͍ŏɌׂł̂łAe̒l̕z݂Ă݂悤
# summary Ă悢
summary(banknote)
# ςƕU
mean(banknote)
sd(banknote)
# U͏Ĉ₷Aϒl啪0͂Ă̂B
# ŁAeƁA0AU1ɐK悤B
# AŌ̑iސȀꍇYj͐KȂ悳iĂ悢ˁj
# Ɩʓ|ɂȂB
# SĂ̑𐳋KĂ悢ȂA 
#    normalize <- function (x) (x - mean(x))/sd(x)
#    normalizedBanknote <- apply(banknote, 2, normalize)
# ł悢B
# ́AR ɕWœĂ scale p̂悢B̏ꍇA
# normalize ֐`ȂŁAnormalize ̑ scale pB
normalize <- function (x) (x - mean(x))/sd(x)
tmp <- apply(banknote[,1:length(banknote)-1], 2, normalize)
normalizedBanknote <- cbind(data.frame(tmp), Y=banknote[,length(banknote)])

# ŊwK
banknote.nn <- nnet( Y ~ ., normalizedBanknote, size=2, maxit=1000)
table( Y, round(predict(banknote.nn)) )

# ǂˁB
# ߊwKȂBł́A10-fold cross validation ŒׂĂ݂悤

library(bootstrap)               # crossval gp邽߂

# ֐ crossval ɕKvȊ֐`
# ȂA nnet ̒ 2 ͒ԑfq̎wB
theta.fit <- function (x,y) { 
  return( nnet( x, y, ,2  ) )
}
theta.predict <- function( fit, x) {predict( fit, data.frame(x)) }

# ł crossval gĂ݂悤
#
xy <- normalizedBanknote   # just for abbreviation
results <- crossval(xy[,-length(xy)], xy[,length(xy)], theta.fit, theta.predict, ngroup=10) 

# confusion matrix ƕސx
(cm <- table( xy[,length(xy)], round( results$cv.fit )  ))
(accuracy10CV <- sum(diag(cm))/sum(cm))



