ml-finance-python

python scripts for finance machine learning

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

particle_swarm_optimization.py

(2569B)


      1 
      2 from __future__ import print_function
      3 from sklearn import datasets
      4 import matplotlib.pyplot as plt
      5 import numpy as np
      6 
      7 from mlfromscratch.supervised_learning import ParticleSwarmOptimizedNN
      8 from mlfromscratch.utils import train_test_split, to_categorical, normalize, Plot
      9 from mlfromscratch.deep_learning import NeuralNetwork
     10 from mlfromscratch.deep_learning.layers import Activation, Dense
     11 from mlfromscratch.deep_learning.loss_functions import CrossEntropy
     12 from mlfromscratch.deep_learning.optimizers import Adam
     13 
     14 def main():
     15 
     16     X, y = datasets.make_classification(n_samples=1000, n_features=10, n_classes=4, n_clusters_per_class=1, n_informative=2)
     17 
     18     data = datasets.load_iris()
     19     X = normalize(data.data)
     20     y = data.target
     21     y = to_categorical(y.astype("int"))
     22 
     23     # Model builder
     24     def model_builder(n_inputs, n_outputs):    
     25         model = NeuralNetwork(optimizer=Adam(), loss=CrossEntropy)
     26         model.add(Dense(16, input_shape=(n_inputs,)))
     27         model.add(Activation('relu'))
     28         model.add(Dense(n_outputs))
     29         model.add(Activation('softmax'))
     30 
     31         return model
     32 
     33     # Print the model summary of a individual in the population
     34     print ("")
     35     model_builder(n_inputs=X.shape[1], n_outputs=y.shape[1]).summary()
     36 
     37     population_size = 100
     38     n_generations = 10
     39 
     40     X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, seed=1)
     41 
     42     inertia_weight = 0.8
     43     cognitive_weight = 0.8
     44     social_weight = 0.8
     45 
     46     print ("Population Size: %d" % population_size)
     47     print ("Generations: %d" % n_generations)
     48     print ("")
     49     print ("Inertia Weight: %.2f" % inertia_weight)
     50     print ("Cognitive Weight: %.2f" % cognitive_weight)
     51     print ("Social Weight: %.2f" % social_weight)
     52     print ("")
     53 
     54     model = ParticleSwarmOptimizedNN(population_size=population_size, 
     55                         inertia_weight=inertia_weight,
     56                         cognitive_weight=cognitive_weight,
     57                         social_weight=social_weight,
     58                         max_velocity=5,
     59                         model_builder=model_builder)
     60     
     61     model = model.evolve(X_train, y_train, n_generations=n_generations)
     62 
     63     loss, accuracy = model.test_on_batch(X_test, y_test)
     64 
     65     print ("Accuracy: %.1f%%" % float(100*accuracy))
     66 
     67     # Reduce dimension to 2D using PCA and plot the results
     68     y_pred = np.argmax(model.predict(X_test), axis=1)
     69     Plot().plot_in_2d(X_test, y_pred, title="Particle Swarm Optimized Neural Network", accuracy=accuracy, legend_labels=range(y.shape[1]))
     70 
     71 
     72 if __name__ == "__main__":
     73     main()