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()