sábado, 8 de octubre de 2022

Entrenar y utilizar una red neuronal

He seguido un montón de artículos, post, tutoriales sobre redes neuronales y en todos se explica muy bien como entrenar una Red neuronal (siempre con datos prefabricados, nunca con los propios datos del usuario) pero a la hora de utilizar la red neuronal entrenada, la mayoría de post o tutoriales dan la lección por aprendida e inexplicablemente terminan. Con lo que nos quedamos con una maravillosa red neuronal entrenada, pero no sabemos cómo utilizarla con nuestros propios datos porque nadie nos lo ha explicado.

Voy a intentar explicar aquí como entrenar (con nuestros propios datos) y utilizar una red neuronal también con nuestros propios datos. Aunque me voy a centrar más en la utilización, pues el entrenamiento está sobradamente explicado en miles de sitios en internet.

Comenzaremos generando nuestros propios datos  En este caso he utilizado un dataset de 37.000 líneas de resultados de partidos de la liga española para predecir las quinielas.

El entrenamiento de la red neuronal lo explicaré solo con esta imagen.

 

Entrenar una red neuronal

El post completo con el código y sus pertinentes explicaciones ya lo publique aquí 

Una vez entrenada nuestra red neuronal procedemos a utilizarla. Para ello debemos crear otro dataset con la misma estructura del que utilizamos para entrenar nuestra red, pero con los datos a predecir, es decir en este caso las columnas de resultados aparecen a cero.

Utilización de la red neuronal entrenada

Una vez entrenada la red neuronal cargamos el nuevo dataset que tendrá la misma estructura que el anterior pero con las etiquetas (datos de entrenamiento) a cero, Pues son los datos que la red debe predecir. En la imagen inferior se han recuadrado en rojo, los datos y en azul las etiquetas (los datos a predecir)

 

Datos vs etiquetas

Lo primero que tenemos que hacer es cargar el nuevo dataset del que queremos predecir los resultados.

#Con clasificación en datos

quinielas = pd.read_csv('Dataset_Resultados_147.csv' )

quinielas = quinielas.sample(frac = 1).reset_index(drop = True)

Tratamos el dataset de la misma forma que hicimos en entrenamiento (post enlazado anteriormente)

from sklearn.preprocessing import LabelEncoder

lb_make = LabelEncoder()

 

x_Nuevos_data = quinielas.drop(columns=['temporada','Q1','QX','Q2','QGC0','QGC1','QGC2','QGCM','QGF0','QGF1','QGF2','QGFM','golesLocal','golesVisitante','fecha'])

 

ss = preprocessing.StandardScaler()

x_Nuevos_data = ss.fit_transform(x_Nuevos_data)

x_Nuevos_data[:19]  #Numero de filas, si pongo más sale el máximo (19 en este caso)

#Son 25 campos, le quitamos 15 de etiquetas quedan 10 campos

Igual que hicimos con los datos de entrenamiento cargamos los datos normalizados en un dataframe de Pandas

x_Nuevos_data  = pd.DataFrame(x_Nuevos_data)

y_Nuevos_data =  quinielas ['Q1'] #Va a predecir el valor Q1 1 es 1, 0 es no uno, es decir X o 2 

x_Nuevos_data  = np.array(x_Nuevos_data).astype('float32')

y_Nuevos_data = np.array(y_Nuevos_data).astype('float32')

Resultados de las predicciones

Y finalmente, aquí es donde cambiamos la operativa respecto al entrenamiento de la red neuronal y predecimos los valores

loss, accuracy = model.evaluate(x_Nuevos_data,y_Nuevos_data,verbose = 0)

#vemos el valor de loss y accuracy

print('loss = {:2f}'.format(loss))

print('Accuracy = {:2f}'.format(accuracy))

X_new = x_Nuevos_data[:19] #Numero de filas, si pongo más sale el máximo (19 en este caso)

y_proba = model.predict(X_new)

y_proba.round(4) #Redondeo a 4 decimales

Esta última línea nos genera un array de dos dimensiones, la primera columna muestra la probabilidad de 0 (es decir que sea una X o un 2 en la quiniela)  y la segunda la probabilidad de 1 ( 1 en la quiniela). 

Predicciones red neuronal

También podemos visualizar los resultados finales en vez del array de probabilidades con estas líneas

y_pred =np.argmax(model.predict(X_new), axis=-1)  #Un array con una predicción por línea (19 en este caso)

y_pred

En este caso, se muestra un array unidimensional sólo se muestra los resultados unos o ceros. (Ver parte inferior de la imagen superior)

Ya tenemos la predicción de nuestra red neuronal para los datos introducidos.

En la siguiente imagen describimos el proceso de predicción de la red entrenada.

 

Predicción valores en red neuronal entrenada

Finalmente podemos comparar los resultados de la predicción de nuestra red neuronal con los datos reales (los tengo en un .csv) y ver los fallos y los aciertos.

comparacción predicciones datos reales y predichos
Vemos que la red neuronal no tiene una bola de cristal y no es capaz de predecir muy bien (todo se andará 😉)

Si cambiamos los datos del dataset a predecir (añadimos distancia a puntos entre clasificados) los datos de salida varían, pero siguen sin ser muy buenos.

comparacción predicciones datos reales y predichos


 


No hay comentarios:

Publicar un comentario