Actualmente tengo un conjunto de datos con las variables y observaciones. Quiero predecir una variable (la demanda), que es continua, por lo tanto necesito para utilizar un modelo de Regresión. He probado con Linear Regression, y evaluó que el uso de la R2 métrica, que fue de alrededor de 0.85. Quería evaluar su rendimiento con el de otros modelos, y uno de ellos fue el NNs. Creo que las Redes Neuronales son más adecuados en otras tareas como la clasificación, sin embargo, yo quería darles una oportunidad.

Decidí usar scikit-learn principalmente porque ofrece tanto a los modelos de Regresión Lineal y de tipo perceptrón multicapa), la cosa es que el R2 métrica fue demasiado lejos y mal en comparación con el de Regresión Lineal de uno. Por lo tanto, llegué a la conclusión de que me estoy perdiendo muchas configuraciones importantes. A continuación puedes ver mi código y cómo los datos viene.

Mis datos tiene las siguientes columnas, sólo demand (que es mi etiqueta), population,gdp, day y year son numéricas continuas, el resto son categóricos.

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

Esto es lo que en realidad hago, he quitado algunas salidas.

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

Así, como se puede ver el NNs el rendimiento es muy pobre. Y creo que su rendimiento puede ser mejorado, las sugerencias?

  • Alberto, podrías por favor hacer su ejemplo reproducible? Definir el data variable, por lo que otros pueden proporcionar una ayuda tangible. Saludos!

2 Comentarios

  1. 4
    1. MLP es sensible a la función de escalado. Tiene usted normalzied sus datos?

    2. Modificar la estructura de la red: añadir más capas ocultas y el número de cambio de perceptrones de cada capa

    3. cambio de función de activación para sigmod/tanh/relu etc.

    • 4. Cambio de la tasa de aprendizaje: learning_rate, learning_rate_init. 5. Alternar early_stopping
  2. 1

    Tal vez no es que el NN rendimiento es malo, tal vez usted está usando sólo el mal métrica para la comparación entre ellas. Generalmente no es una buena idea para tener confianza en el R2 de puntuación para la evaluación de los modelos de regresión lineal con muchos de los regresores: de hecho, el más regresores que pone en su modelo más alto su R cuadrado (vea este vídeo para obtener una explicación rápida).

    De todos modos creo que esta pregunta es más apropiado para https://stats.stackexchange.com/

Dejar respuesta

Please enter your comment!
Please enter your name here