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.
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)
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).
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.
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.
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.
No hay comentarios:
Publicar un comentario