R : Copyright 2003, The R Development Core Team Version 1.6.2 (2003-01-10) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type `license()' or `licence()' for distribution details. R is a collaborative project with many contributors. Type `contributors()' for more information. Type `demo()' for some demos, `help()' for on-line help, or `help.start()' for a HTML browser interface to help. Type `q()' to quit R. > invisible(options(echo = TRUE)) > library(nnet); Loading required package: MASS > > train <- read.table("loans.dat",header=F,col.names=c("x1","x2","y")); > > # Order is bias, wt, wt for input units to hidden units > # followed by bias, wt, wt, wt, wt, wt for hidden units > # to output units. > > parms <- c( + 23.896678, -62.450621, 11.170289, + -3.845333, -6.110258, 42.139228, + -13.430940, -10.640723, 27.986805, + 21.322889, -10.303906, -77.733978, + 9.222935, 37.111371, -31.209375, + 12.395668, 33.377473, -15.457109, -19.592486, 51.958010, -28.515135); > > fit <- nnet.formula(y ~ x1 + x2, data=train, size=5, maxit=500, Wts=parms); # weights: 21 initial value 8.072563 iter 10 value 7.975028 iter 20 value 7.925210 iter 30 value 7.761261 iter 40 value 7.733799 iter 50 value 7.422430 iter 60 value 7.275243 iter 70 value 7.227319 iter 80 value 7.166369 iter 90 value 7.134806 iter 100 value 7.107312 iter 110 value 7.086445 iter 120 value 6.795647 iter 130 value 6.757341 iter 140 value 6.739297 iter 150 value 6.696500 iter 160 value 6.629398 iter 170 value 6.620332 iter 180 value 6.613965 iter 190 value 6.611035 iter 200 value 6.606162 iter 210 value 6.583114 iter 220 value 6.523906 iter 230 value 6.518200 iter 240 value 6.505579 iter 250 value 6.486478 iter 260 value 6.483777 iter 270 value 6.470495 iter 280 value 6.457123 iter 290 value 6.443233 iter 300 value 6.393421 iter 310 value 6.389902 iter 320 value 6.382983 iter 330 value 6.365094 iter 340 value 6.351842 iter 350 value 6.346412 iter 360 value 6.331224 iter 370 value 6.322801 iter 380 value 6.308089 iter 390 value 6.305907 iter 400 value 6.292051 iter 410 value 6.280831 iter 420 value 6.247631 iter 430 value 6.014635 iter 440 value 5.940287 iter 450 value 5.870574 iter 460 value 5.812439 iter 470 value 5.811569 iter 480 value 5.809648 iter 490 value 5.807886 iter 500 value 5.800171 final value 5.800171 stopped after 500 iterations > > print(fit) a 2-5-1 network with 21 weights inputs: x1 x2 output(s): y options were - > print.summary.nnet(fit) a 2-5-1 network with 21 weights options were - b->h1 i1->h1 i2->h1 142.65 -416.24 81.16 b->h2 i1->h2 i2->h2 18.87 -3.11 51.81 b->h3 i1->h3 i2->h3 -89.74 -38.27 180.18 b->h4 i1->h4 i2->h4 12.61 -7.68 -40.95 b->h5 i1->h5 i2->h5 -1.78 94.57 -45.50 b->o h1->o h2->o h3->o h4->o h5->o 29.65 50.19 0.94 -73.24 92.44 -80.44 > > size <- 100; > > grid <- mat.or.vec((size+1)*(size+1),2); > for (i in 0:size) { + for (j in 0:size) { + ij <- (size+1)*j+i+1 + grid[ij,1] <- i; + grid[ij,2] <- j; + } + } > grid <- grid/(size+1); > > Grid <- data.frame(x1=grid[,1],x2=grid[,2]); > > dflt <- predict.nnet(object=fit,newdat=Grid); > dflt <- (dflt > 0.5); > > edge <- mat.or.vec((size+1)*(size+1),1); > edge <- as.logical(edge); > for (i in 1:size) { + for (j in 1:size) { + left <- (size+1)*j+i+1; + rite <- (size+1)*(j-1)+i+1; + top <- left; + bot <- left - 1; + edge[left] <- + ( dflt[left] && !dflt[rite] ) || + ( !dflt[left] && dflt[rite] ) || + ( dflt[top] && !dflt[bot] ) || + ( !dflt[top] && dflt[bot] ) ; + } + } > > X <- cbind(train$x1,train$x2); > y <- (train$y==1); > > source("psopts.r"); > postscript(file="nnet0.eps"); > > plot(X,type='n',xlab="FICO Score",ylab="P-Index"); > points(X[y,],pch='o',col="red"); > points(X[!y,],pch='o',col="green"); > points(grid[dflt,],pch='.',col="red"); > points(grid[!dflt,],pch='.',col="green"); > points(grid[edge,],pch='+',col="black",cex=0.4); > > dev.off(); null device 1 > > test <- read.table("eval.dat",header=F,col.names=c("x1","x2","y")); > > dflt <- predict.nnet(object=fit,newdat=test); > dflt <- (dflt > 0.5); > > dflt <- as.numeric(dflt); > ty <- test$y; > > err <- abs(ty-dflt); > print(mean(err)); [1] 0.09243 > > proc.time() [1] 4.57 0.22 4.92 0.00 0.00 >