Es decir, nuestro método predict recibirá un dataframe Pandas (que vamos a llamar X), tendrá que extraer cada una de sus filas (cada una de las muestras contenidas en él), realizar su predicción (que será un vector de n números, siendo n el número de neuronas de la capa de salida) y devolver el índice del valor más elevado de dicho vector.
Dentro de nuestra función predict podemos crear un array NumPy de ceros que contendrá las predicciones para cada muestra. El código quedaría de la siguiente forma:
def predict(X: pd.core.frame.DataFrame):
""" Obtención de la predicción para las muestras contenidas en un DataFrame """
predictions = np.zeros(shape = len(X))
X.reset_index(inplace = True, drop = True)
for i, sample in X.iterrows():
prediction = model.getOutput(sample.values.reshape(-1, 1))
predictions[i] = np.argmax(prediction)
return predictions
La variable predictions es un array con tantos valores como filas tenga el dataframe X y, como se ha comentado, contendrá las predicciones para cada una de las muestras:
predictions = np.zeros(shape = len(X))
A continuación, como queremos poder hacer referencia a cada fila del dataframe por su posición, reinicializamos el índice (previendo que éste no sea un rango de números consecutivos comenzando por el cero):
X.reset_index(inplace = True, drop = True)
Y recorremos cada fila del dataframe X (variable sample) extrayendo su índice que queda almacenado en la variable i:
for i, sample in X.iterrows():
Una vez extraída la muestra no hay más que convertirla a array NumPy y redimensionarla de forma que tenga las dimensiones correspondientes a una matriz de una sola columna, pasarla por la red y obtener el resultado devuelto por ésta. Para ello presuponemos la existencia de una función getOutput que aplica el bucle que ya hemos visto en secciones anteriores haciendo pasar la muestra por cada una de las capas de forma iterativa devolviendo un array con los valores generados en la capa de salida. El resultado de este proceso se almacena en la variable prediction:
prediction = model.getOutput(sample.values.reshape(-1, 1))
Por último, actualizamos el valor i-ésimo del array predictions con la predicción obtenida (que será el índice del mayor valor del array devuelto por el método getOutput):
predictions[i] = np.argmax(prediction)
Por supuesto, nuestra función termina devolviendo el array con las predicciones para todas las filas del dataframe de entrada:
return predictions