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!
Vous devez vous connecter pour publier un commentaire.
MLP est sensible à la fonction de mise à l'échelle. Avez-vous normalzied vos données?
Modifier votre structure de réseau: ajouter plus de couches cachées et le nombre de changement de perceptrons de chaque couche
changement de fonction d'activation de sigmod/tanh/relu etc.
learning_rate
,learning_rate_init
. 5. Basculeearly_stopping
Est peut-être pas que la NN du rendement est mauvais, peut-être vous êtes juste en utilisant le mauvais métrique pour comparer. Habituellement, il n'est pas une bonne idée de faire confiance à la R2 score pour l'évaluation des modèles de régression linéaire avec le nombre de régresseurs: en fait, le plus régresseurs que vous mettez dans votre modèle le plus vos R carré (voir cette vidéo pour une explication rapide).
De toute façon je pense que cette question est plus approprié pour https://stats.stackexchange.com/