NNbenchmark was created during the Google Summer of Code program of 2019 and 2020 as a part of open-source organization - The R Project for Statistical Computing. To goal was to verify the convergence of the training algorithms provided in all Neural Network R packages available on CRAN to date. Neural networks must be trained with second order algorithms and not with first order algorithms as many packages seem to do.
The purpose of this project is to verify the quality of the training algorithms in R packages that provide neural network of perceptron type (one input layer, one normalized layer, one hidden layer with non-linear activation function usually tanh(), one normalized layer, one output output layer) for regression purpose i.e. \(NN(X1, ..., Xn) = E[Y]\).
This project has conducted a comprehensive survey of all packages that have the “neural network” keyword in the package title or in the package description.
We test the neural-network packages on 13 datasets based on the following criteria.
Following are the datasets
Dataset | Rows | Input | Neurons | Parameters |
---|---|---|---|---|
Multivariate | ||||
mDette | 500 | 3 | 5 | 26 |
mFriedman | 500 | 5 | 5 | 36 |
mIshigami | 500 | 3 | 10 | 51 |
mRef153 | 153 | 5 | 3 | 22 |
Univariate | ||||
uDmod1 | 51 | 1 | 6 | 19 |
uDmod2 | 51 | 1 | 5 | 16 |
uDreyfus1 | 51 | 1 | 3 | 10 |
uDreyfus2 | 51 | 1 | 3 | 10 |
uGauss1 | 250 | 1 | 5 | 16 |
uGauss2 | 250 | 1 | 4 | 13 |
uGauss3 | 250 | 1 | 4 | 13 |
uNeuroOne | 51 | 1 | 2 | 7 |
Package | Util | Doc | Call | Algorithm | Time | RMSE |
---|---|---|---|---|---|---|
nlsr | * | **** | ** |
|
18 | 1 |
rminer | ** | *** | ** |
|
12 | 2 |
nnet | * | *** | ** |
|
3 | 3 |
validann | * | **** | ** |
|
35 | 4 |
* | **** | ** |
|
60 | 8 | |
* | **** | ** |
|
36 | 15 | |
* | **** | ** |
|
55 | 45 | |
* | **** | ** |
|
20 | 55 | |
MachineShop | * | *** | * |
|
6 | 5 |
traineR | * | ** | ** |
|
4 | 6 |
radiant.model | ** | ** | ** |
|
10 | 7 |
monmlp | ** | *** | ** |
|
26 | 9 |
** | *** | ** |
|
32 | 47 | |
CaDENCE | ** | *** | ** |
|
46 | 10 |
** | *** | ** |
|
56 | 51 | |
** | *** | ** |
|
54 | 54 | |
h2o | ** | ** |
|
51 | 11 | |
EnsembleBase | * | * | ** |
|
5 | 12 |
caret | ** | *** | ** |
|
17 | 13 |
brnn | ** | **** | ** |
|
8 | 14 |
qrnn | ** | *** | ** |
|
28 | 16 |
RSNNS | ** | *** | ** |
|
24 | 17 |
** | *** | ** |
|
30 | 18 | |
** | *** | ** |
|
22 | 27 | |
** | *** | ** |
|
26 | 29 | |
** | *** | ** |
|
25 | 30 | |
** | *** | ** |
|
29 | 31 | |
** | *** | ** |
|
43 | 49 | |
** | *** | ** |
|
45 | 57 | |
automl | * | *** | ** |
|
50 | 18 |
* | *** | ** |
|
47 | 26 | |
* | *** | ** |
|
57 | 43 | |
deepnet | * | *** | ** |
|
23 | 18 |
neuralnet | * | *** | ** |
|
19 | 21 |
* | *** | ** |
|
21 | 22 | |
* | *** | ** |
|
31 | 31 | |
* | *** | ** |
|
41 | 38 | |
* | *** | ** |
|
37 | 50 | |
keras | ** | * |
|
48 | 23 | |
** | * |
|
42 | 34 | ||
** | * |
|
44 | 36 | ||
** | * |
|
58 | 37 | ||
** | * |
|
59 | 40 | ||
** | * |
|
48 | 44 | ||
** | * |
|
37 | 52 | ||
AMORE | * | *** | * |
|
16 | 24 |
* | *** | * |
|
9 | 35 | |
* | *** | * |
|
40 | 39 | |
* | *** | * |
|
39 | 41 | |
minpack.lm | * | *** | ** |
|
15 | 24 |
ANN2 | ** | *** | * |
|
14 | 28 |
** | *** | * |
|
13 | 33 | |
** | *** | * |
|
11 | 42 | |
deepdive | ** | *** | ** |
|
32 | 46 |
** | *** | ** |
|
34 | 53 | |
** | *** | ** |
|
53 | 56 | |
** | *** | ** |
|
52 | 58 | |
snnR | ** | ** | ** |
|
7 | 48 |
elmNNRcpp | ** | *** | ** |
|
1 | 59 |
ELMR | ** | *** | ** |
|
2 | 60 |