Saltar al contenido

Validación cruzada en Keras

Después de investigar con especialistas en el tema, programadores de deferentes áreas y maestros hemos dado con la respuesta al problema y la dejamos plasmada en esta publicación.

Solución:

Si mi objetivo es ajustar la red para todo el conjunto de datos

No está claro qué quiere decir con “afinar”, o incluso cuál es exactamente su propósito para realizar la validación cruzada (CV); en general, CV tiene uno de los siguientes propósitos:

  • Selección del modelo (elegir los valores de los hiperparámetros)
  • Evaluación del modelo

Dado que no define ninguna cuadrícula de búsqueda para la selección de hiperparámetros en su código, parecería que está utilizando CV para obtener el rendimiento esperado de su modelo (error, precisión, etc.).

De todos modos, por la razón que sea que esté usando CV, el primer fragmento es el correcto; tu segundo fragmento

model = None
model = create_model()
for train, test in kFold.split(X, Y):
    train_evaluate(model, X[train], Y[train], X[test], Y[test])

entrenará a tu modelo secuencialmente sobre las diferentes particiones (es decir, entrene en la partición n. ° 1, luego continúe entrenando en la partición n. ° 2, etc.), que esencialmente es solo entrenar en todo su conjunto de datos, y ciertamente no es una validación cruzada …

Dicho esto, un paso final. después el CV que a menudo solo está implícito (y que los principiantes suelen pasar por alto) es que, una vez que está satisfecho con los hiperparámetros elegidos y/o el rendimiento del modelo según el procedimiento de CV, regresa y entrena nuevamente su modelo, esta vez con el completo datos disponibles.

Creo que muchas de sus preguntas se responderán si lee sobre la validación cruzada anidada. Esta es una buena manera de “afinar” los hiperparámetros de su modelo. Hay un hilo aquí:

https://stats.stackexchange.com/questions/65128/nested-cross-validation-for-model-selection

El mayor problema a tener en cuenta es la lógica circular o de “mirar a escondidas”. Esencialmente, usted quiere asegurarse de que ninguna de los datos utilizados para evaluar la precisión del modelo se ve durante el entrenamiento.

Un ejemplo en el que esto podría ser problemático es si está ejecutando algo como PCA o ICA para la extracción de funciones. Si hace algo como esto, debe asegurarse de ejecutar PCA en su conjunto de entrenamiento y luego aplicar la matriz de transformación del conjunto de entrenamiento al conjunto de prueba.

Puede usar contenedores de la API de Scikit-Learn con modelos de Keras.

Entradas dadas x y yaquí hay un ejemplo de validación cruzada repetida de 5 veces:

from sklearn.model_selection import RepeatedKFold, cross_val_score
from tensorflow.keras.models import * 
from tensorflow.keras.layers import * 
from tensorflow.keras.wrappers.scikit_learn import KerasRegressor

def buildmodel():
    model= Sequential([
        Dense(10, activation="relu"),
        Dense(5, activation="relu"),
        Dense(1)
    ])
    model.compile(optimizer='adam', loss='mse', metrics=['mse'])
    return(model)

estimator= KerasRegressor(build_fn=buildmodel, epochs=100, batch_size=10, verbose=0)
kfold= RepeatedKFold(n_splits=5, n_repeats=100)
results= cross_val_score(estimator, x, y, cv=kfold, n_jobs=2)  # 2 cpus
results.mean()  # Mean MSE

Si sostienes algún traba y disposición de perfeccionar nuestro división eres capaz de realizar una interpretación y con deseo lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *