## SK-Learn Neural Network

SK-Learn supports some form of basic neural network. This is good as an initial go to approach. However, it is advised to look into packages such as Keras and Tensorflow for more complex neural networks.

### Parameters

= a tuple defining the number of neurons per hidden layer. default is (100,) which means one hidden layer of 100 neurons. (100, 100) would mean two hidden layers of 100 neurons.*hidden_layers*= the activation function used in the neurons. Default is "relu". Other activation functions include: {‘identity’, ‘logistic’, ‘tanh’, ‘relu’}*activation_fn*= This is the type of algorithm used for the gradient descent. Default is "adam", other choices include: {‘lbfgs’, ‘sgd’, ‘adam’}*solver*= The L2 regularization penalty, default is: 0.0001*alpha*= default: "constant", choices: {‘constant’, ‘invscaling’, ‘adaptive’}*learning_rate*= default: 0.001*learning_rate_init*= momentum of the gradient descent, default: 0.9*momentum*

### Attributes

: set to "Neural Network" for deployment package*model_title*: Initially None, gets defined to the matrix dimensions when the define_structure method is fired. Whilst hard coding algorithms is not recomended, this gives the user a high-level blueprint of what structure the neural network should undergo*structure*

### Methods

The neural network has the following methods:

#### define activation function

This method takes an activation function arguement, defining it for the neural network. This enables the user to try and compare multiple activation functions without having to create new model classes.

```
neural = NeuralNetworkBase()
neural.define_activation_function("logistic")
```

#### define network structure

This method takes no arguements. When fired is defines the ** structure** atribute with a list of shapes of the matrices of the neural network model. Useful for reference.

### Practical Example

```
from deployml.sklearn import NeuralNetworkBase
# We define the model
NN = NeuralNetworkBase(hidden_layers=(4, 4))
# We define the data (pandas data frame)
NN.data = input_data
# We define the key of the column we are trying to predict
NN.outcome_pointer = 'attended'
# Now we've defined the network we produce a training curve and show it
# with scaled data using a standard scaler
NN.plot_learning_curve(scale=True, batch_size=100)
NN.show_learning_curve()
# We then print out the precision, recall and F-1 score
NN.evaluate_outcome()
# And show the ROC curve
NN.show_roc_curve()
```

## Not Enough?

It's understandable that you might want a more custom model. Whilst we are always working on making Deploy-ML more versatile, you can define your own SK-Learn model and import it into the Deploy-ML learning and packaging framework!