Я мог бы настроить это так:
Один класс, который выполняет изучение и построение персептрона, которые вы начинаете с эпохой, learning_rate, target_accuracy и data. Затем отдельные модули могут определить свои конкретные значения и создать экземпляр класса.
Вот довольно простое завершение вашей реализации. Я возвращаю кортеж (веса, точности, точности_последовательности), чтобы вы могли при желании обработать его в ваших отдельных модулях. Можно конечно, рефакторинг дальше:
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import Perceptron as nn
class PPlotter:
def __init__(self, epochs, learning_rate, target_accuracy, data):
self.epochs = epochs
self.learning_rate = learning_rate
self.target_accuracy = target_accuracy
self.data = data
def plot_accuracy_progression(self):
(weights, accuracy, accuracy_progression) = nn.perceptronLearning(self.data, self.epochs, self.learning_rate, self.target_accuracy)
(tp,tn,fp,fn) = p.confusionMatrix(weigths,self.data)
print('weights: ', weights)
print('accuracy: ', accuracy)
print('true positive: %d true negative: %d',(tp,tn))
print('false positive: %d false negative: %d',(fp,fn))
title = "%d_iterations_lambda=%f" % (len(accuracy_progression),learning_rate)
path = "./Plots/%s.png" %(title)
plt.title(title)
plt.ylabel('accuracy (%)')
plt.xlabel('iteration')
plt.plot(accuracy_progression)
plt.show()
return (weights, accuracy, accuracy_progression)
Тогда вот пример того, как может выглядеть train_Lion.py:
import numpy as np
import PPlotter
def Lion (cat):
if cat == b'Cat-lion':
return 1
else:
return 0
filename = 'cat.data'
data = np.loadtxt(filename,delimiter=',',converters={4:lion})
np.random.shuffle(data)
epochs = 30
learning_rate = 0.1
target_accuracy = 100
plotter = PPlotter(epochs, learning_rate, target_accuracy, data)
(weights, accuracy, accuracy_progression) = plotter.plot_accuracy_progression()