def compare_models(): simulations_number = 30 weight_limit = 0.5 error_margin = 0.3 dataset = get_dataset(noise_data_number=5, unipolar=False) powers = np.arange(-2, -5, -1) learning_rates = np.concatenate([np.power([10.] * len(powers), powers), 5 * np.power([10.] * len(powers[1:]), powers[1:])]) learning_rates = np.sort(learning_rates)[1:] perceptron_avg_epochs_numbers = [] adaline_avg_epochs_numbers = [] for lr in learning_rates: lr_epochs_num = [] for _ in range(simulations_number): perceptron = Perceptron(2, weight_limit=weight_limit, activation_fn=bipolar_activation) epoch_num, _ = train_model(perceptron, dataset, lr, verbose=False) lr_epochs_num.append(epoch_num) perceptron_avg_epochs_numbers.append(lr_epochs_num) lr_epochs_num = [] for _ in range(simulations_number): adaline = Adaline(2, weight_limit=weight_limit, error_margin=error_margin) epoch_num, mse = train_model(adaline, dataset, lr, verbose=False) print(f'MSE: {mse[-1]}') lr_epochs_num.append(epoch_num) adaline_avg_epochs_numbers.append(lr_epochs_num) plot_result(learning_rates, perceptron_avg_epochs_numbers, adaline_avg_epochs_numbers)
def analyze(simulations_num: int = 10): powers = np.arange(-1, -5, -1) w_limit = 0.5 l_rates = np.concatenate([[0.9, 0.5, 0.25], np.power([10.] * len(powers), powers), 5 * np.power([10.] * len(powers[1:]), powers[1:]) ]) l_rates = np.sort(l_rates)[1:] dataset = get_dataset(noise_data_number=5, unipolar=True) epochs_numbers = [] for lr in l_rates: lr_epochs_num = [] for _ in range(simulations_num): perceptron = Perceptron(2, weight_limit=w_limit, activation_fn=unipolar_activation) epoch_num, _ = train_model(perceptron, dataset, lr, verbose=False) lr_epochs_num.append(epoch_num) epochs_numbers.append(lr_epochs_num) plot_results(l_rates, epochs_numbers)
def run_training(weight_limit: float, unipolar: bool = True): learning_rate = 0.01 dataset = get_dataset(noise_data_number=10, unipolar=unipolar) if unipolar: print('UNIPOLAR training') else: print('BIPOLAR training') if unipolar: perceptron = Perceptron(2, weight_limit=weight_limit, activation_fn=unipolar_activation) else: perceptron = Perceptron(2, weight_limit=weight_limit, activation_fn=bipolar_activation) train_model(perceptron, dataset, learning_rate) evaluate_model(perceptron, get_dataset(noise_data_number=2, unipolar=unipolar), unipolar=unipolar)
def run_training(): weight_limit = 1.0 learning_rate = 0.01 error_margin = 0.3 max_epoch = 500 dataset = get_dataset(noise_data_number=20, unipolar=False) adaline = Adaline(2, weight_limit=weight_limit, error_margin=error_margin) epoch_num, mean_squared_errors = train_model(adaline, dataset, learning_rate, max_epoch=max_epoch) plot_mean_square_errors(epoch_num, mean_squared_errors, error_margin) evaluate_model(adaline, get_dataset(noise_data_number=2, unipolar=False), unipolar=False)
def analyze(simulations_num: int = 10): lr = 0.01 weight_limit = np.array([0.1, 0.3, 0.5, 0.8, 1.0]) dataset = get_dataset(noise_data_number=5, unipolar=True) epochs_numbers = [] for w_limit in weight_limit: w_epochs_num = [] for _ in range(simulations_num): perceptron = Perceptron(2, weight_limit=w_limit, activation_fn=unipolar_activation) epoch_num, _ = train_model(perceptron, dataset, lr, verbose=False) w_epochs_num.append(epoch_num) epochs_numbers.append(w_epochs_num) plot_results(weight_limit, epochs_numbers)
unipolar_dataset = get_dataset(noise_data_number=5, unipolar=True) bipolar_dataset = get_dataset(noise_data_number=5, unipolar=False) simulations_num = 50 lr = 0.01 weight_limit = 0.5 unipolar_epochs_num = [] bipolar_epochs_num = [] for i in range(simulations_num): unipolar_perceptron = Perceptron(2, weight_limit=weight_limit, activation_fn=unipolar_activation) epoch_num, _ = train_model(unipolar_perceptron, unipolar_dataset, lr, verbose=False) unipolar_epochs_num.append(epoch_num) unipolar_perceptron = Perceptron(2, weight_limit=weight_limit, activation_fn=bipolar_activation) epoch_num, _ = train_model(unipolar_perceptron, bipolar_dataset, lr, verbose=False) bipolar_epochs_num.append(epoch_num) plt.boxplot([unipolar_epochs_num, bipolar_epochs_num], labels=['Aktywacja unipolarna', 'Aktywacja bipolarna']) plt.ylabel('Liczba epok')