Wie tune eine MLPRegressor?

Moment habe ich einen Datensatz mit Variablen und Beobachtungen. Ich möchte, um vorherzusagen, eine variable (Nachfrage), die einen kontinuierlichen, damit ich eine Regression-Modell. Ich habe versucht, mit Linear Regression, und bewertet es mit der R2 Metrik, etwa 0.85. Ich wollte seine Leistung zu bewerten, mit anderen Modellen, und einer von Ihnen war der NNs. Ich glaube, dass Neuronale Netze geeignet sind, in andere Aufgaben wie Klassifizierung, dennoch wollte ich Sie auszuprobieren.

Entschied ich mich für scikit-learn vor allem, weil es bietet beide Modelle (Lineare Regression-und Multi-Layer-Perzeptron), die Sache ist die, dass die R2 Metrische war der Weg zu weit und schlecht im Vergleich zu der Linearen Regression ein. So kam ich zu dem Schluss, dass ich bin, fehlen viele wichtige Konfigurationen. Unten seht Ihr meinen code, und wie die Daten kommt.

Meine Daten hat die folgenden Spalten, nur demand (das ist meine Bezeichnung), population,gdp, day und year sind numerische kontinuierliche, der rest sind kategorisch.

['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']

Dies ist, was ich wirklich tun, ich entfernt einige Ausgänge.

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

So, wie Sie sehen können, die NNs die performance ist sehr schlecht. Und ich denke, seine performance verbessert werden kann, irgendwelche Tipps?

  • Alberto, könnten Sie bitte machen Sie Ihr Beispiel reproduzierbar? Definieren Sie die data Variablen, so dass andere kann Ihnen eine spürbare Hilfe. Prost!
Schreibe einen Kommentar