ml-finance-python

python scripts for finance machine learning

git clone https://9o.is/git/ml-finance-python.git

convolutional_neural_network.py

(2904B)


      1 
      2 from __future__ import print_function
      3 from sklearn import datasets
      4 import matplotlib.pyplot as plt
      5 import math
      6 import numpy as np
      7 
      8 # Import helper functions
      9 from mlfromscratch.deep_learning import NeuralNetwork
     10 from mlfromscratch.utils import train_test_split, to_categorical, normalize
     11 from mlfromscratch.utils import get_random_subsets, shuffle_data, Plot
     12 from mlfromscratch.utils.data_operation import accuracy_score
     13 from mlfromscratch.deep_learning.optimizers import StochasticGradientDescent, Adam, RMSprop, Adagrad, Adadelta
     14 from mlfromscratch.deep_learning.loss_functions import CrossEntropy
     15 from mlfromscratch.utils.misc import bar_widgets
     16 from mlfromscratch.deep_learning.layers import Dense, Dropout, Conv2D, Flatten, Activation, MaxPooling2D
     17 from mlfromscratch.deep_learning.layers import AveragePooling2D, ZeroPadding2D, BatchNormalization, RNN
     18 
     19 
     20 
     21 def main():
     22 
     23     #----------
     24     # Conv Net
     25     #----------
     26 
     27     optimizer = Adam()
     28 
     29     data = datasets.load_digits()
     30     X = data.data
     31     y = data.target
     32 
     33     # Convert to one-hot encoding
     34     y = to_categorical(y.astype("int"))
     35 
     36     X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, seed=1)
     37 
     38     # Reshape X to (n_samples, channels, height, width)
     39     X_train = X_train.reshape((-1,1,8,8))
     40     X_test = X_test.reshape((-1,1,8,8))
     41 
     42     clf = NeuralNetwork(optimizer=optimizer,
     43                         loss=CrossEntropy,
     44                         validation_data=(X_test, y_test))
     45 
     46     clf.add(Conv2D(n_filters=16, filter_shape=(3,3), stride=1, input_shape=(1,8,8), padding='same'))
     47     clf.add(Activation('relu'))
     48     clf.add(Dropout(0.25))
     49     clf.add(BatchNormalization())
     50     clf.add(Conv2D(n_filters=32, filter_shape=(3,3), stride=1, padding='same'))
     51     clf.add(Activation('relu'))
     52     clf.add(Dropout(0.25))
     53     clf.add(BatchNormalization())
     54     clf.add(Flatten())
     55     clf.add(Dense(256))
     56     clf.add(Activation('relu'))
     57     clf.add(Dropout(0.4))
     58     clf.add(BatchNormalization())
     59     clf.add(Dense(10))
     60     clf.add(Activation('softmax'))
     61 
     62     print ()
     63     clf.summary(name="ConvNet")
     64 
     65     train_err, val_err = clf.fit(X_train, y_train, n_epochs=50, batch_size=256)
     66 
     67     # Training and validation error plot
     68     n = len(train_err)
     69     training, = plt.plot(range(n), train_err, label="Training Error")
     70     validation, = plt.plot(range(n), val_err, label="Validation Error")
     71     plt.legend(handles=[training, validation])
     72     plt.title("Error Plot")
     73     plt.ylabel('Error')
     74     plt.xlabel('Iterations')
     75     plt.show()
     76 
     77     _, accuracy = clf.test_on_batch(X_test, y_test)
     78     print ("Accuracy:", accuracy)
     79 
     80 
     81     y_pred = np.argmax(clf.predict(X_test), axis=1)
     82     X_test = X_test.reshape(-1, 8*8)
     83     # Reduce dimension to 2D using PCA and plot the results
     84     Plot().plot_in_2d(X_test, y_pred, title="Convolutional Neural Network", accuracy=accuracy, legend_labels=range(10))
     85 
     86 if __name__ == "__main__":
     87     main()