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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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')