Saltar al contenido

Regresión con Keras

A continuación se detallan los pasos que se suelen seguir al implementar los modelos de regresión con Keras.

Paso 1 – Cargando las bibliotecas y módulos necesarios.

Regresión con Keras
Regresión con Keras

Paso 2 – Cargar los datos y realizar comprobaciones de datos básicos.

Paso 3 – Crear arreglos para las características y la variable de respuesta.

Paso 4 – Creación de los conjuntos de datos de entrenamiento y pruebas.

Paso 5 – Definir, compilar y ajustar el modelo de regresión de Keras.

Paso 6 – Predecir sobre los datos de la prueba y calcular las métricas de evaluación.

Las siguientes secciones cubrirán estos pasos.

Paso 1 – Carga de las bibliotecas y módulos requeridos

123456789101112131415# Importar bibliotecas necesariasimportar pandas como pdimport numpy como np import matplotlib.pyplot como pltimport sklearn# Importar módulos necesarios de sklearn. model_selection importar train_test_splitfrom sklearn.metrics importar mean_squared_errorfrom math importar sqrt# Keras specificimport kerasfrom keras.models import Sequentialfrom keras.layers import Dense

pitón

Paso 2 – Lectura de los datos y realización de comprobaciones de datos básicos

La primera línea de código se lee en los datos como cuadro de datos de pandas, mientras que la segunda línea de código imprime la forma – 574 observaciones de 5 variables. La tercera línea da estadísticas resumidas de las variables numéricas. Podemos ver que todas las variables tienen 574 como «recuento» que es igual al número de registros en el conjunto de datos. Eso significa que no tenemos valores perdidos.

123df = pd.read_csv($0027regressionexample.csv$0027)print(df.shape)df.describe()

pitón

1(574, 5)

pcepoppsavertuempmeddesempleo574574574574574media4,8442,57,189897,772std3,57936,731342,642min5071,98,712242,68525%1,5822,24,896666,28450%3,9542,53,060887,49475%7,6672,90,2911198,691máximo12,1623,20,887172515,352

Paso 3 – Creación de arreglos para las características y la variable de respuesta

La primera línea de código crea un objeto de la variable objetivo, mientras que la segunda línea de código nos da la lista de todas las características, excluyendo la variable objetivo «unemploy».

La tercera línea normaliza los pronosticadores. Esto es importante porque las unidades de las variables difieren significativamente y pueden influir en el proceso de modelación. Para evitarlo, haremos la normalización mediante el escalado de los predictores entre 0 y 1.

La cuarta línea muestra el resumen de los datos normalizados. Podemos ver que todas las variables independientes se han escalado ahora entre 0 y 1. La variable objetivo permanece sin cambios.

1234target_column =[$0027unemploy$0027] predictores =list(set(list(df.columns))-set(target_column))df[predictores]= df[predictores]/df[predictores].max()df.describe()

pythonpcepoppsavertuempmedunemploymentcount574574574574574mean0.400.800.470.347,772std0.290.110.180.162,642min0.040.620.110.162,68525%0.130.700.320.246,28450%0.330.790.450.307,49475%0.630.900.620.368,691max111115,352

Paso 4 – Creación de los conjuntos de datos de entrenamiento y prueba

El primer par de líneas crea matrices de variables independientes (X) y dependientes (y), respectivamente. La tercera línea divide los datos en conjunto de datos de entrenamiento y de prueba, mientras que la cuarta línea imprime la forma del conjunto de entrenamiento (401 observaciones de 4 variables) y del conjunto de prueba (173 observaciones de 4 variables).

12345X = df[predictores].valuesy = df[columna_objetivo].valuesX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=40)print(X_train.shape);print(X_test.shape)

pitón

12(401, 4)(173, 4)

Paso 5 – Construir el Modelo de Regresión de Aprendizaje Profundo

Construiremos un modelo de regresión usando el aprendizaje profundo en Keras. Para empezar, definiremos el modelo. La primera línea de código de abajo pide el constructor secuencial. Obsérvese que utilizaríamos el modelo secuencial porque nuestra red consiste en una pila lineal de capas. La segunda línea de código representa la primera capa que especifica la función de activación y el número de dimensiones de entrada, que en nuestro caso es de 4 predictores. Luego repetimos el mismo proceso en la tercera y cuarta línea de códigos para las capas ocultas, esta vez sin el parámetro input_dim. La última línea de código crea la capa de salida con un nodo que se supone que debe emitir el número de desempleados en miles.

La función de activación utilizada en las capas ocultas es una unidad lineal rectificada, o ReLU. Es la función de activación más utilizada debido a sus ventajas de ser no lineal, así como a la capacidad de no activar todas las neuronas al mismo tiempo. En términos sencillos, esto significa que a la vez, sólo se activan unas pocas neuronas, lo que hace que la red sea escasa y muy eficiente.

1234567# Definir modelomodelo = Secuencial()modelo.add(Dense(500, input_dim=4, activation="relu"))modelo.add(Dense(100, activation="relu"))modelo.add(Dense(50, activation="relu"))modelo.add(Dense(1))#modelo.resumen() #imprimir modelo Resumen

pitón

El siguiente paso es definir un optimizador y la medida de pérdida para el entrenamiento. El error cuadrado medio es nuestra medida de pérdida y el optimizador «adam» es nuestro algoritmo de minimización. La principal ventaja del optimizador «adam» es que no necesitamos especificar la tasa de aprendizaje como en el caso del descenso de gradiente; de este modo nos ahorramos la tarea de optimizar la tasa de aprendizaje para nuestro modelo. Conseguimos esta tarea con la primera línea del código de abajo.

La segunda línea de código encaja con el modelo del conjunto de datos de entrenamiento. También proporcionamos el argumento, épocas, que representa el número de iteraciones de entrenamiento. Hemos tomado 20 épocas.

12model.compile(loss="mean_squared_error", optimizer="adam", metrics=["mean_squared_error"])model.fit(X_train, y_train, epochs=20)

pitón

12345678910111213141516171819202122232425262728293031323334353637383940Epoch 1/20401/401 [================================] - 0s 1ms/paso - pérdida: 68136318.3441 - error_cuadrado_medio: 68136318.3441Epoch 2/20401/401 [======================================] - 0s 133us/paso - pérdida: 68101432.0698 - mean_squared_error: 68101432.0698Epoch 3/20401/401 [========================================] - 0s 125us/paso - pérdida: 67985495.1022 - error_cuadrado_medio: 67985495.1022Epoch 4/20401/401 [========================================] - 0s 134us/paso - pérdida: 67665023.0524 - mean_squared_error: 67665023.0524Epoch 5/20401/401 [========================================] - 0s 127us/paso - pérdida: 66899397.2868 - mean_squared_error: 66899397.2868Epoch 6/20401/401 [========================================] - 0s 107us/paso - pérdida: 65355226.3042 - error_cuadrado_medio: 65355226.3042Epoch 7/20401/401 [======================================] - 0s 120us/paso - pérdida: 62432633.3566 - error_cuadrado_medio: 62432633.3566Epoch 8/20401/401 [========================================] - 0s 128us/paso - pérdida: 57537882.0549 - mean_squared_error: 57537882.0549Epoch 9/20401/401 [======================================] - 0s 150us/paso - pérdida: 50086165.6958 - error_cuadrado_medio: 50086165.6958Epoch 10/20401/401 [======================================] - 0s 119us/paso - pérdida: 39984370.9975 - error_cuadrado_medio: 39984370.9975Epoch 11/20401/401 [========================================] - 0s 97us/paso - pérdida: 28126145. 2868 - mean_squared_error: 28126145.2868Epoch 12/20401/401 [======================================] - 0s 110us/paso - pérdida: 16095036.0499 - mean_squared_error: 16095036.0499Epoch 13/20401/401 [========================================] - 0s 126us/paso - pérdida: 7629222.0150 - mean_squared_error: 7629222.0150Epoch 14/20401/401 [========================================] - 0s 107us/paso - pérdida: 4147607.1696 - error_cuadrado_medio: 4147607.1696Epoch 15/20401/401 [========================================] - 0s 107us/paso - pérdida: 3668975.7581 - error_cuadrado_medio: 3668975.7581Epoch 16/20401/401 [========================================] - 0s 111us/paso - pérdida: 3646548.0898 - mean_squared_error: 3646548.0898Epoch 17/20401/401 [========================================] - 0s 126us/paso - pérdida: 3563563.1328 - mean_squared_error: 3563563.1328Epoch 18/20401/401 [========================================] - 0s 117us/paso - pérdida: 3533091.9377 - mean_squared_error: 3533091.9377Epoch 19/20401/401 [========================================] - 0s 123us/paso - pérdida: 3496560.1110 - error_cuadrado_medio: 3496560.1110Epoch 20/20401/401 [========================================] - 0s 132us/paso - pérdida: 3467280.0112 - error_cuadrado_medio: 3467280.0112

Paso 6 – Predecir en los datos de la prueba y calcular las métricas de evaluación

La primera línea de código predice en los datos del tren, mientras que la segunda imprime el valor RMSE en los datos del tren. Lo mismo se repite en la tercera y cuarta línea de código que predice e imprime el valor RMSE en los datos de prueba.

12345pred_train= model.predict(X_train)print(np.sqrt(mean_squared_error(y_train,pred_train)))pred= model.predict(X_test)print(np.sqrt(mean_squared_error(y_test,pred)))

pitón

121856.48506424453541825.5904063232729