es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

NN: ¿Cómo puedo evaluar en instancias individuales cuando el conjunto de datos de validación contiene múltiples instancias?

Estoy usando Keras y GroupKFold.

Mi dataset contiene varias entradas que aparecen más de una vez. Tiene sentido mantenerlas en el entrenamiento. Pero creo que mantenerlas en la validación es en el mejor de los casos superfluo y en el peor introduce sesgo en los resultados.

¿Cómo podría omitir las múltiples instancias de esas entradas y validar solo una de cada una?

Permítanme especificar que estoy realizando una validación cruzada. Entonces, imagino que la solución podría depender de algún parámetro en model.evaluate o en la división de GroupKFold. Pero aún no he resuelto esto.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una solución para omitir las múltiples instancias de entradas durante la validación cruzada sería utilizar el separador GroupKFold en combinación con un generador personalizado de datos de validación. El separador GroupKFold puede agrupar muestras que tienen el mismo identificador, como el ID del paciente o el número de réplica experimental. Esto permite que el generador de datos de validación seleccione solo una instancia de cada grupo para la validación, mientras incluye todas las instancias de ese grupo en los datos de entrenamiento.

    Para implementar este enfoque, primero puedes agrupar tus datos por ID de muestra utilizando la biblioteca pandas, y luego crear un separador GroupKFold de scikit-learn. A continuación, puedes definir una función personalizada de generador de datos de validación que tome el conjunto de datos, los índices para el conjunto de validación y las etiquetas de grupo como entradas. En esta función, puedes usar las etiquetas de grupo para seleccionar solo una instancia de cada grupo para la validación y devolver los datos de validación y las etiquetas correspondientes.

    Aquí tienes un ejemplo de código para implementar este método:

    import pandas as pd
    import numpy as np
    from sklearn.model_selection import GroupKFold
    
    # carga tu conjunto de datos como un DataFrame de pandas
    df = pd.read_csv('mi_conjunto_de_datos.csv')
    
    # agrupa tus datos por ID de muestra (suponiendo que la columna ID se llama 'sample_id')
    grupos = df.groupby('sample_id').groups
    
    # crea un separador GroupKFold con 5 divisiones
    kfold = GroupKFold(n_splits=5)
    
    # define una función personalizada de generador de datos de validación
    def generador_validacion(datos, indices, grupos):
        ids_grupo = np.unique(grupos[indices])
        indices_validacion = []
        for id_grupo in ids_grupo:
            indices_grupo = np.where(grupos[indices] == id_grupo)[0]
            indice_validacion = np.random.choice(indices_grupo)
            indices_validacion.append(indices[indice_validacion])
        # utiliza los índices de validación para seleccionar los datos y etiquetas
        datos_validacion = datos[indices_validacion]
        etiquetas_validacion = datos['etiquetas'][indices_validacion]
        return datos_validacion, etiquetas_validacion
    
    # recorre las divisiones y entrena/valida en cada una
    for division, (indices_entrenamiento, indices_validacion) in enumerate(kfold.split(df, groups=grupos)):
        # define tu modelo y parámetros de entrenamiento de Keras aquí
        datos_entrenamiento = df.iloc[indices_entrenamiento]
        datos_validacion, etiquetas_validacion = generador_validacion(df, indices_validacion, grupos)
        # entrena y valida en esta división
        modelo.fit(datos_entrenamiento, etiquetas_entrenamiento, validation_data=(datos_validacion, etiquetas_validacion))
    

    En este ejemplo, la función generador_validacion selecciona de forma aleatoria una instancia de cada grupo en el conjunto de validación y devuelve los datos y etiquetas correspondientes para la validación. Esto asegura que cada grupo esté representado por solo una instancia en el conjunto de validación, mientras que todas las instancias están incluidas en el conjunto de entrenamiento.

    Ten en cuenta que es posible que necesites ajustar la lógica de la función generador_validacion según tu conjunto de datos específico y tus requisitos de validación.

Comments are closed.