Comment régler un MLPRegressor?

J'ai actuellement un jeu de données avec des variables et des observations. Je tiens à prédire une variable (la demande), qui est continu, donc j'ai besoin d'utiliser un modèle de Régression. J'ai essayé avec Linear Regression, et évalués à l'aide de la R2 métrique, ce qui était autour de 0.85. Je voulais évaluer ses performances avec d'autres modèles, et l'un d'eux était le NNs. Je crois que les Réseaux de Neurones sont plus adaptés dans d'autres tâches comme la classification, néanmoins je voulais leur donner un essai.

J'ai décidé d'utiliser scikit-learn, principalement parce qu'il offre à la fois des modèles de Régression Linéaire et Multi Layer Perceptron), le truc, c'est que le R2 métrique a été trop loin et mauvais par rapport à la Régression Linéaire est une. Donc, j'en conclu que je suis absent de nombreuses configurations importantes. Ci-dessous vous pouvez voir mon code et la façon dont les données proviennent.

Mes données comporte les colonnes suivantes, uniquement demand (ce qui est mon label), population,gdp, day et year numériques sont en continu, le reste sont catégoriques.

['demand','holy','gdp','population', 'day','year', 'f0', 'f1', 'f2', 'f3', 'f4','f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f20', 'f21', 'f22', 'f23', 'g0', 'g1', 'g2', 'g3', 'g4', 'g5', 'g6', 'g7', 'g8', 'g9', 'g10', 'g11']

C'est ce que j'ai réellement faire, j'ai enlevé quelques sorties.

import pandas as pd
import numpy as np
import math as math
from sklearn.linear_model import LinearRegression
from sklearn.neural_network import MLPRegressor
from sklearn.metrics import r2_score
training_data, validation_data = np.split(data.sample(frac=1), [int(.8*len(data))])
linear_model = LinearRegression().fit(training_data[[c for c in data.columns if c != "demand"]], training_data[["demand"]])
validation_data_predictions = linear_model.predict(validation_data[[c for c in training_data.columns if c != "demand"]])
validation_predictions_pd = pd.DataFrame(data=validation_data_predictions, 
index=validation_data.index.values,
columns=["prediction"])
# join both pandas
result_df = validation_data.join(validation_predictions_pd, how="inner")
r2_error = r2_score(y_true=result_df[["demand"]], y_pred=result_df[["prediction"]], multioutput="uniform_average")
print(r2_error) # outputs 0.85
# NN section
clf = MLPRegressor(hidden_layer_sizes=(10,), max_iter=100000)
neural_model = clf.fit(training_data[[c for c in training_data.columns if c != "demand"]], training_data[["demand"]])
validation_data_predictions = neural_model.predict(validation_data[[c for c in training_data.columns if c != "demand"]])
validation_predictions_pd = pd.DataFrame(data=validation_data_predictions, 
index=validation_data.index.values,
columns=["prediction"])
result_df = validation_data.join(validation_predictions_pd, how="inner")
r2_error = r2_score(y_true=result_df[["demand"]], y_pred=result_df[["prediction"]], multioutput="uniform_average")
print(r2_error) # outputs 0.23

Donc, comme vous pouvez le voir le NNs très mauvaises performances. Et je pense que ses performances peuvent être améliorées, tous les indicateurs?

  • Alberto, pourriez-vous s'il vous plaît faire votre exemple reproductible? Définir le data variable de sorte que d'autres peuvent vous apporter une aide tangible. Cheers!