ExamplesOfnn {lazy.nntools}R Documentation

Examples of nntools package

Description

Examples of nntools package: nonlinear regression and supervised classification

Examples

## Not run: 

#
# The following packages are required:
 library(neuralnet), library(NeuralNetTools),  library(nlsr)


#######################################################################
#######################################################################
#  Bivariate Nonlinear Regression Example
#######################################################################
#######################################################################



if(0){

 library(lazy.mat)
 library(neuralnet)
 library(NeuralNetTools)
 library(nlsr)
 library(lazy.nntools)

 rm(list=ls())

}

# get data from lazy.nntools::data_1_2
X=matrix(data_1_2$x1,,1)
Y=as.matrix( data_1_2[,c("y1","y2")] )
Y0=data_1_2[,c("y01","y02")]

# plot of data
matplot(X,Y0, type="l", pch=1:2, main="data", ylim=c(-11,11))
points(X,Y[,1])
points(X,Y[,2], pch=2, col=2)





# # of neurons in the hidden layers as a vector
hidden=7
hidden=c(3,3) # GN fails
hidden=c(2,9) # OK neuralnet fails
hidden=c(2,2,2,2)
hidden=c(4,7,4) # OK GN fails
hidden=c(9) # OK
hidden=c(7,7,7) # OK
hidden=7 # OK


# # of neurons including first and the last layer
n=nrow(Y); np=ncol(Y); nq=ncol(X)
nn=c(nq,hidden,np)
Layer=paste(nn,collapse=":")
nlayer=length(nn)
nparam=0
for( i in 2:nlayer ) nparam=nparam+(nn[i-1]+1)*nn[i]




# Solution by the neuralnet package
# requires neuralnet package
title=paste("Neural Network by neuralnet::neuralnet:  layer =", Layer)
dd <- data.frame(x1=X, Y )
set.seed(1701)
resnn <- neuralnet( y1+y2~x1, dd, hidden=hidden, stepmax=1000000
             , threshold=0.05, rep=1)

# pick up the best result
locbest=which.min(resnn$result.matrix[1,])

# pick up the weight as a list from the result
W=getW_from_neuralnet( resnn$weights[[locbest]] )
rss0=resnn$result.matrix[1,locbest]*2
Yhat=resnn$net.result[[locbest]]

# calculate rss again from W list
temp=summary_nn( W, X, Y, linear=1, softmax=0 )
rss=temp$rss; rmse=temp$rmse; rmse1=temp$rmse1
Yhat=temp$Yhat
maxag=temp$maxag
Print(rss0, rss, rmse, rmse1)
Print(maxag)

title2=paste(title, " rss =", round(rss,4))

# plot of neural net
plot_nn(W, type=1, title=title2)
plot_nn(W, type=2, title=title2)


# plot of X vs Yhat
title3=paste( paste("rmse = ", round(rmse,3),": ", sep="")
             , paste( paste("rmse-",1:ncol(Y)," = ",sep="")
             , round(rmse1,3),collapse=",   "), collapse="" )
matplot(X, Yhat, type="l", pch=1:2, main=title2, sub=title3, ylim=c(-11,11))
points(X,Y[,1])
points(X,Y[,2], pch=2, col=2)




# get initial weight of neuralnet
W0=getW_from_neuralnet( resnn$startweights[[locbest]] )



#
#
# Solution by the Gauss-Nowton Method
#
#




# Solution by nlsr::nlfb
title=paste("Neural Network by nlsr::nlfb:  layer =", Layer)

# initialize the storage
init=initialize_nn( X, nn)
# needs empty O and W
O=init$O
wname=init$wname
W1=init$W

# initial value of W
winit=unlist(W0)
if(0){

 # when W0 is not good enough.
 set.seed(1701)
 winit=runif(nparam)

}



# use nlfb with yhatmy_nn
if(0){
# by nlfb w/o jacobian
resnlsr=nlfb( winit, yhatmy_nn, W=W1, O=O, Y=Y, control=list(femax=1000
            , japprox="jacentral") )
}

resnlsr=nlfb( winit, yhatmy_nn, W=W1, O=O, Y=Y, control=list(femax=1000)
            , jacfn=Jac_nn_a2 )


# pick up the weight as a list from the result
W1=reshapeW( resnlsr$coefficients, nn )
W1=mapply( function(x,y){dimnames(x)=y; x}, W1, wname)
rssnlfb=resnlsr$ssquares

title2=paste(title, " rss =", round(rssnlfb,4))

# calculate rss again from W list
temp=summary_nn( W1, X, Y, linear=1, softmax=0 )
rss1=temp$rss; rmse1=temp$rmse; rmse11=temp$rmse1
Yhat1=temp$Yhat
maxag1=temp$maxag
Print(rssnlfb, rss1, rmse1, rmse11)
Print(maxag1)

title2=paste(title, " rss =", round(rss1,4))

# plot of neural net
plot_nn(W1, type=1, title=title2)
plot_nn(W1, type=2, title=title2)


# plot of X vs Yhat
title3=paste( paste("rmse = ", round(rmse1,3),": ", sep="")
              , paste( paste("rmse-",1:ncol(Y)," = ",sep="")
                       , round(rmse11,3),collapse=",   "), collapse="" )
matplot(X, Yhat1, type="l", pch=1:2, main=title2, sub=title3, ylim=c(-11,11))
points(X,Y[,1])
points(X,Y[,2], pch=2, col=2)








# Solution by lazy.mat::GN
title=paste("Neural Network by lazy.mat::GN:  layer =", Layer)


# initialize the storage
init=initialize_nn( X, nn)
# needs empty O and W
O=init$O
wname=init$wname
W2=init$W

# initial value of W
winit=unlist(W0)
if(0){

 # when W0 is not good enough.
 set.seed(1701)
 winit=runif(nparam)

}


# resGN=GN( winit, ymyhat_nn, W=W, O=O, k=0, maxiter=1000 )
resGN=GN( winit, ymyhat_nn, W=W2, O=O, Y=Y, linear=1, softmax=0
          , maxiter=1000, jacobian=Jac_nn_a )
W2=reshapeW( resGN$par, nn )
W2=mapply( function(x,y){dimnames(x)=y; x}, W2, wname)

rssGN=resGN$objective

# calculate rss again from W list
temp=summary_nn( W2, X, Y, linear=1, softmax=0 )
rss2=temp$rss; rmse2=temp$rmse; rmse21=temp$rmse1
Yhat2=temp$Yhat
maxag2=temp$maxag
Print(rssGN, rss2, rmse2, rmse21)
Print(maxag2)

title2=paste(title, " rss =", round(rss2,4))

# plot of neural net
plot_nn(W2, type=1, title=title2)
plot_nn(W2, type=2, title=title2)


# plot of X vs Yhat
title3=paste( paste("rmse = ", round(rmse2,3),": ", sep="")
              , paste( paste("rmse-",1:ncol(Y)," = ",sep="")
                       , round(rmse21,3),collapse=",   "), collapse="" )
matplot(X, Yhat2, type="l", pch=1:2, main=title2, sub=title3, ylim=c(-11,11))
points(X,Y[,1])
points(X,Y[,2], pch=2, col=2)






#
#
# Solution by the Newton-Raphson Method
#
#





# Solution by nlminb
title=paste("Neural Network by nlminb:  layer =", Layer)

init=initialize_nn( X, nn)
# needs empty O and W
O=init$O
wname=init$wname
W1=init$W

# initial value
winit=unlist(W0)
if(0){

 # when W0 is not good enough.
 set.seed(1701)
 winit=runif(nparam)

}




# nlminb
resnlminb=nlminb( winit, rss_nn, W=W1, O=O, Y=Y, control=list(iter.max=1000)
              , gradient=drss_nn_aJ )


# pick up the weight as a list from the result
W1=reshapeW( resnlminb$par, nn )
W1=mapply( function(x,y){dimnames(x)=y; x}, W1, wname)
rssnlminb=resnlminb$objective

title2=paste(title, " rss =", round(rssnlminb,4))

# calculate rss again from W list
temp=summary_nn( W1, X, Y, linear=1, softmax=0 )
rss1=temp$rss; rmse1=temp$rmse; rmse11=temp$rmse1
Yhat1=temp$Yhat
maxag1=temp$maxag
Print(rssnlminb, rss1, rmse1, rmse11)
Print(maxag1)

title2=paste(title, " rss =", round(rss1,4))

# plot of neural net
plot_nn(W1, type=1, title=title2)
plot_nn(W1, type=2, title=title2)


# plot of X vs Yhat
title3=paste( paste("rmse = ", round(rmse1,3),": ", sep="")
              , paste( paste("rmse-",1:ncol(Y)," = ",sep="")
                       , round(rmse11,3),collapse=",   "), collapse="" )
matplot(X, Yhat1, type="l", pch=1:2, main=title2, sub=title3, ylim=c(-11,11))
points(X,Y[,1])
points(X,Y[,2], pch=2, col=2)






# Solution by lazy.mat::NR
title=paste("Neural Network by lazy.mat::NR:  layer =", Layer)


# initialize the storage
init=initialize_nn( X, nn)
# needs empty O and W
O=init$O
wname=init$wname
W2=init$W

# initial value
winit=unlist(W0)
if(0){

 # when W0 is not good enough.
 set.seed(1701)
 winit=runif(nparam)

}

# resNR=NR( winit, ymyhat_nn, W=W, O=O, k=0, maxiter=1000 )
resNR=NR( winit, rss_nn, W=W2, O=O, Y=Y, linear=1, softmax=0
          , maxiter=1000, gradient=drss_nn_a, flipd=1 )
W2=reshapeW( resNR$par, nn )
W2=mapply( function(x,y){dimnames(x)=y; x}, W2, wname)

rssNR=resNR$objective

# calculate rss again from W list
temp=summary_nn( W2, X, Y, linear=1, softmax=0 )
rss2=temp$rss; rmse2=temp$rmse; rmse21=temp$rmse1
Yhat2=temp$Yhat
maxag2=temp$maxag
Print(rssNR, rss2, rmse2, rmse21)
Print(maxag2)

title2=paste(title, " rss =", round(rss2,4))

# plot of neural net
plot_nn(W2, type=1, title=title2)
plot_nn(W2, type=2, title=title2)


# plot of X vs Yhat
title3=paste( paste("rmse = ", round(rmse2,3),": ", sep="")
              , paste( paste("rmse-",1:ncol(Y)," = ",sep="")
                       , round(rmse21,3),collapse=",   "), collapse="" )
matplot(X, Yhat2, type="l", pch=1:2, main=title2, sub=title3, ylim=c(-11,11))
points(X,Y[,1])
points(X,Y[,2], pch=2, col=2)







#######################################################################
#######################################################################
#  Supervised Classification Example
#######################################################################
#######################################################################




if(0){

 library(lazy.mat)
 library(neuralnet)
 library(NeuralNetTools)
 library(nlsr)
 library(lazy.nntools)

 rm(list=ls())

}

###
###       Discriminant analysis or Supervised Classification
###       Multivariate X, Multivariate Y (three classes)
###

# get data from lazy.nntools::data_2_3
X=as.matrix(data_2_3[,c("x1","x2")])
Y=as.matrix( data_2_3[,c("y1","y2","y3")] )
class_true=data_2_3$class

# for plot by image
x1=unique(X[,1])
x2=unique(X[,2])
image(x1, x2, matrix(class_true,length(x1))
      , main="data")




# # of neurons in the hidden layers as a vector
hidden=c(3,3) # NG
hidden=c(3,5,3) # OK, use random for nlfb and GN

hidden=c(4,4) # OK

# # of neurons including first and the last layer
n=nrow(Y); np=ncol(Y); nq=ncol(X)
nn=c(nq,hidden,np)
Layer=paste(nn,collapse=":")
nlayer=length(nn)
nparam=0
for( i in 2:nlayer ) nparam=nparam+(nn[i-1]+1)*nn[i]





# Solution by the neuralnet package
# requires neuralnet package
title=paste("Neural Network by neuralnet::neuralnet:  layer =", Layer)
# neural network  by neuralnet package
# require neuralnet package
dd <- data.frame(X, Y )
set.seed(1701)
resnn <- neuralnet( y1+y2+y3~x1+x2, dd, hidden=hidden, stepmax=1000000
                    , linear.output=FALSE
                    , threshold=0.005, rep=3)
# pick up the best result
locbest=which.min(resnn$result.matrix[1,])

# pick up the weight as a list from the result
W=getW_from_neuralnet( resnn$weights[[locbest]] )
rss0=resnn$result.matrix[1,locbest]*2
Yhat=resnn$net.result[[locbest]]

# calculate rss again from W list
temp=summary_nn( W, X, Y, linear=0, softmax=0 )
rss=temp$rss; rmse=temp$rmse; rmse1=temp$rmse1
Yhat=temp$Yhat
class=apply(Yhat,1,which.max)
maxag=temp$maxag
Print(rss0, rss, rmse, rmse1)
Print(maxag)

title2=paste(title, " rss =", round(rss,4))

# plot of neural net
plot_nn(W, type=1, title=title2)
plot_nn(W, type=2, title=title2)


# plot the result
title3=paste( paste("rmse = ", round(rmse,3),": ", sep="")
              , paste( paste("rmse-",1:ncol(Y)," = ",sep="")
                       , round(rmse1,3),collapse=",   "), collapse="" )
image(x1, x2, matrix(class,length(x1)), main=title2, sub=title3)




# get initial weight of neuralnet
W0=getW_from_neuralnet( resnn$startweights[[locbest]] )




#
#
# Solution by the Gauss-Newton Method
#
#


# Solution by nlsr::nlfb
title=paste("Neural Network by nlsr::nlfb:  layer =", Layer)

# initialize the storage
init=initialize_nn( X, nn)
# needs empty O and W
O=init$O
wname=init$wname
W1=init$W

# initial value of W
winit=unlist(W0)
if(0){

 # when W0 is not good enough.
 set.seed(1701)
 winit=runif(nparam)

}


 if(0){
 resnlsr=nlfb( winit, yhatmy_nn, W=W1, O=O, Y=Y, linear=0
               , control=list(femax=1000, japprox="jacentral") )
 }

 resnlsr=nlfb( winit, yhatmy_nn, W=W1, O=O, Y=Y, linear=0
               , control=list(femax=1000)
               , jacfn=Jac_nn_a2 )


 # pick up the weight as a list from the result
 W1=reshapeW( resnlsr$coefficients, nn )
 W1=mapply( function(x,y){dimnames(x)=y; x}, W1, wname)
 rssnlfb=resnlsr$ssquares


# calculate rss again from W list
 temp=summary_nn( W1, X, Y, linear=0, softmax=0 )
 rss1=temp$rss; rmse1=temp$rmse; rmse11=temp$rmse1
 Yhat1=temp$Yhat
 class1=apply(Yhat1,1,which.max)
 maxag1=temp$maxag
 Print(rssnlfb, rss1, rmse1, rmse11)
 Print(maxag1)

 title2=paste(title, " rss =", round(rss1,4))

 # plot of neural net
 plot_nn(W1, type=1, title=title2)
 plot_nn(W1, type=2, title=title2)


 title3=paste( paste("rmse = ", round(rmse1,3),": ", sep="")
               , paste( paste("rmse-",1:ncol(Y)," = ",sep="")
                        , round(rmse11,3),collapse=",   "), collapse="" )
 image(x1, x2, matrix(class1,length(x1)), main=title2, sub=title3)




 # Solution by lazy.mat::GN
 title=paste("Neural Network by lazy.mat::GN:  layer =", Layer)


# initialize the storage
 init=initialize_nn( X, nn)
 # needs empty O and W
 O=init$O
 wname=init$wname
 W2=init$W

# initial value of W
winit=unlist(W0)
if(0){

 # when W0 is not good enough.
 set.seed(1701)
 winit=runif(nparam)

}

 # resGN=GN( winit, ymyhat_nn, W=W, O=O, k=0, maxiter=1000 )
 resGN=GN( winit, ymyhat_nn, W=W2, O=O, Y=Y, linear=0, softmax=0
           , maxiter=1000, jacobian=Jac_nn_a )
 W2=reshapeW( resGN$par, nn )
 W2=mapply( function(x,y){dimnames(x)=y; x}, W2, wname)

 rssGN=resGN$objective

# calculate rss again from W list
 temp=summary_nn( W2, X, Y, linear=0, softmax=0 )
 rss2=temp$rss; rmse2=temp$rmse; rmse21=temp$rmse1
 Yhat2=temp$Yhat
 class2=apply(Yhat2,1,which.max)
 maxag2=temp$maxag
 Print(rssGN, rss2, rmse2, rmse21)
 Print(maxag2)

 title2=paste(title, " rss =", round(rss2,4))

 # plot of neural net
 plot_nn(W2, type=1, title=title2)
 plot_nn(W2, type=2, title=title2)


 # plot of X vs Yhat
 title3=paste( paste("rmse = ", round(rmse2,3),": ", sep="")
               , paste( paste("rmse-",1:ncol(Y)," = ",sep="")
                        , round(rmse21,3),collapse=",   "), collapse="" )

 image(x1, x2, matrix(class2,length(x1)), main=title2)







#
#
# Newton Raphson Method
#
#





# neural network  by nlminb
title=paste("Neural Network by nlminb:  layer =", Layer)

# initialization of storage
init=initialize_nn( X, nn)
# needs empty O and W
O=init$O
wname=init$wname
W1=init$W

# initial value of W
winit=unlist(W0)
if(0){
 
 # replace W0 by random numbers
 set.seed(1701)
 winit=runif(nparam)
 
}


# Solution by nlminb
if(0){
 # by nlminb w/o jacobian
 resnlminb=nlminb( winit, rss_nn, W=W1, O=O, Y=Y, control=list(iter.max=1000) )
}

resnlminb=nlminb( winit, rss_nn, W=W1, O=O, Y=Y, control=list(iter.max=1000)
                  , gradient=drss_nn_aJ )


# pick up the weight as a list from the result
W1=reshapeW( resnlminb$par, nn )
W1=mapply( function(x,y){dimnames(x)=y; x}, W1, wname)
rssnlminb=resnlminb$objective

title2=paste(title, " rss =", round(rssnlminb,4))

# calculate rss again from W list
temp=summary_nn( W1, X, Y, linear=1, softmax=0 )
rss1=temp$rss; rmse1=temp$rmse; rmse11=temp$rmse1
Yhat1=temp$Yhat
maxag1=temp$maxag
Print(rssnlminb, rss1, rmse1, rmse11)
Print(maxag1)

title2=paste(title, " rss =", round(rss1,4))

# plot of neural net
plot_nn(W1, type=1, title=title2)
plot_nn(W1, type=2, title=title2)


# plot of X vs Yhat
title3=paste( paste("rmse = ", round(rmse1,3),": ", sep="")
              , paste( paste("rmse-",1:ncol(Y)," = ",sep="")
                       , round(rmse11,3),collapse=",   "), collapse="" )
image(x1, x2, matrix(class1,length(x1)), main=title2, sub=title3)









# Solution by  lazy.mat::NR
title=paste("Neural Network by lazy.mat::NR:  layer =", Layer)


# initialize storage
init=initialize_nn( X, nn)
# needs empty O and W
O=init$O
wname=init$wname
W2=init$W

# initial value of W
winit=unlist(W0)
if(0){
 
 # when W0 is not good enough
 set.seed(1701)
 winit=runif(nparam)
 
}


# resNR=NR( winit, ymyhat_nn, W=W, O=O, k=0, maxiter=1000 )
resNR=NR( winit, rss_nn, W=W2, O=O, Y=Y, linear=1, softmax=0
          , maxiter=1000, gradient=drss_nn_a, flipd=1 )
W2=reshapeW( resNR$par, nn )
W2=mapply( function(x,y){dimnames(x)=y; x}, W2, wname)

rssNR=resNR$objective

# calculate rss again from W list
temp=summary_nn( W2, X, Y, linear=1, softmax=0 )
rss2=temp$rss; rmse2=temp$rmse; rmse21=temp$rmse1
Yhat2=temp$Yhat
maxag2=temp$maxag
Print(rssNR, rss2, rmse2, rmse21)
Print(maxag2)

title2=paste(title, " rss =", round(rss2,4))

# plot of neural net
plot_nn(W2, type=1, title=title2)
plot_nn(W2, type=2, title=title2)



# plot of X vs Yhat
title3=paste( paste("rmse = ", round(rmse1,3),": ", sep="")
              , paste( paste("rmse-",1:ncol(Y)," = ",sep="")
                       , round(rmse11,3),collapse=",   "), collapse="" )
image(x1, x2, matrix(class1,length(x1)), main=title2, sub=title3)



## End(Not run)






[Package lazy.nntools version 0.0.1 Index]