'How using scoring = 'neg_mean_squared_error' to get the Y axis from 0 to a minus values?

When I am using scoring 'neg_mean_squared_error',the Y axis is going from -3.5 to 0. However, since the purpose is to maximize 'neg_mean_squared_error', I would to go from 0 to -3.5. Indeed, lower is the MSE value and better it is. What do you think the I should modify in the code?

Here is the code:

# Import Needed Libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from math import sqrt
from sklearn.metrics import \
    r2_score, get_scorer, make_scorer, mean_squared_error
from sklearn.linear_model import \
    Lasso, Ridge, LassoCV,LinearRegression
from sklearn.preprocessing import \
    StandardScaler, PolynomialFeatures
from sklearn.model_selection import \
    KFold, RepeatedKFold, GridSearchCV, \
    cross_validate, train_test_split

# Features
x1 = np.linspace(-20,20,100)
x1 = np.array(x1).reshape(-1,1)
x2 = pow(x1,2)
x3 = pow(x1,3)
x4 = pow(x1,4)
x5 = pow(x1,5)

# Parameters
beta_0 = 1.75
beta_1 = 5
beta_3 = 0.05
beta_5 = -10.3

eps_mu = 0     # epsilon mean
eps_sigma = sqrt(4)    # epsilon standard deviation
eps_size = 100     # epsilon size

np.random.seed(1)     # Fixing a seed
eps = np.random.normal(eps_mu, eps_sigma, eps_size)
eps = np.array(eps).reshape(-1,1)

y = beta_0 + beta_1*x1 + beta_3*x3 + beta_5*x5 + eps


data = np.concatenate((y,x1,x2,x3,x4,x5), axis = 1)
X = data[:,1:6]
y = data[:,0]

alphas_to_try = np.linspace(0.00000000000000000000001,100000000,10) ########  To modify  #######
scoring = 'neg_mean_squared_error'
#scoring = (mean_squared_error, greater_is_better=False)
scorer = get_scorer(scoring)

k = 5
cv = KFold(n_splits = k)
for train_index, test_index in cv.split(data):
        X_train, X_test = X[train_index], X[test_index]
        y_train, y_test = y[train_index], y[test_index]

sc = StandardScaler()
X_train_scaled = sc.fit_transform(X_train)
X_test_scaled = sc.transform(X_test)
    
validation_scores = []
train_scores = []
results_list = []
test_scores = []

        
for curr_alpha in alphas_to_try:
        regmodel = Lasso(alpha = curr_alpha)

        results = cross_validate(
            regmodel, X_train_scaled, y_train, scoring=scoring, cv=cv, 
            return_train_score = True)

        validation_scores.append(np.mean(results['test_score']))
        train_scores.append(np.mean(results['train_score']))
        results_list.append(results)

        regmodel.fit(X_train_scaled,y_train)
        y_pred = regmodel.predict(X_test_scaled)
        test_scores.append(scorer(regmodel, X_test_scaled, y_test))
        
        chosen_alpha_id = np.argmax(validation_scores)
        chosen_alpha = alphas_to_try[chosen_alpha_id]
        max_validation_score = np.max(validation_scores)
        test_score_at_chosen_alpha = test_scores[chosen_alpha_id]
        
    
print('chosen_alpha:', chosen_alpha) 
print('max_validation_score:', max_validation_score)
print('test_score_at_chosen_alpha:', test_score_at_chosen_alpha)
 
    
_ =  plt.figure(figsize = (8,8))
_ =  sns.lineplot(y = validation_scores, x = alphas_to_try, label = 'validation_data')
_ =  sns.lineplot(y = train_scores, x = alphas_to_try, label = 'training_data')
_ =  plt.axvline(x=chosen_alpha, linestyle='--')

_ = sns.lineplot(y = test_scores, x = alphas_to_try, label = 'test_data')
_ = plt.xlabel('alpha_parameter')
_ = plt.ylabel(scoring)
_ = plt.title('LASSO Regularisation')
_ = plt.legend()
_ = plt.show()

Here is the output:

enter image description here

How to goes from 0 to 3.5?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source