Search code examples
pythonpython-3.xscikit-learnneural-networkbackpropagation

Plot mean absolute error (MAE) in MLPRegression sklearn


How to plotting MSE over epoch, i want to visualization convergence rate in traning dataset

from sklearn.neural_network import MLPRegressor 
from sklearn.metrics import mean_absolute_error

dataset = open_dataset("forex.csv")
dataset_vector = [float(i[-1]) for i in dataset]
normalized_dataset_vector = normalize_vector(dataset_vector)
training_vector, validation_vector, testing_vector = split_dataset(training_size, validation_size, testing_size, normalized_dataset_vector)
training_features = get_features(training_vector)
training_fact = get_fact(training_vector)
validation_features = get_features(validation_vector)
validation_fact = get_fact(validation_vector)

model = MLPRegressor(activation=activation, alpha=alpha, hidden_layer_sizes=(neural_net_structure[1],), max_iter=number_of_iteration, random_state=seed)
model.fit(training_features, training_fact)

pred = model.predict(training_features)
err = mean_absolute_error(pred, validation_fact)

print(err)

Solution

  • Calculate the training and testing error across your folds and then use lists to append the results. Finally, plot the results.


    Do something like the following:

    from sklearn.neural_network import MLPRegressor 
    from sklearn.metrics import mean_absolute_error
    import numpy as np
    from sklearn.model_selection import validation_curve
    from sklearn.datasets import load_iris
    import matplotlib.pyplot as plt
    from sklearn.model_selection import KFold
    np.random.seed(0)
    
    iris = load_iris()
    X, y = iris.data, iris.target
    
    kf = KFold(n_splits=5)
    list_training_error = []
    list_testing_error = []
    
    for train_index, test_index in kf.split(X):
       X_train, X_test = X[train_index], X[test_index]
       y_train, y_test = y[train_index], y[test_index]
       model = MLPRegressor()
       model.fit(X_train, y_train)
       y_train_data_pred = model.predict(X_train)
       y_test_data_pred = model.predict(X_test) 
    
       fold_training_error = mean_absolute_error(y_train, y_train_data_pred)        
       fold_testing_error = mean_absolute_error(y_test, y_test_data_pred)
       list_training_error.append(fold_training_error)
       list_testing_error.append(fold_testing_error)
    
    plt.subplot(1,2,1)
    plt.plot(range(1, kf.get_n_splits() + 1), np.array(list_training_error).ravel(), 'o-')
    plt.xlabel('number of fold')
    plt.ylabel('training error')
    plt.title('Training error across folds')
    plt.tight_layout()
    
    plt.subplot(1,2,2)
    plt.plot(range(1, kf.get_n_splits() + 1), np.array(list_testing_error).ravel(), 'o-')
    plt.xlabel('number of fold')
    plt.ylabel('testing error')
    plt.title('Testing error across folds')
    plt.tight_layout()
    plt.show()
    

    enter image description here