Configuración de datos de entrenamiento, validación, validación cruzada y prueba en el aprendizaje automático automatizado

SE APLICA A:Azure ML del SDK de Python v1

En este artículo, obtendrá información sobre las distintas opciones para configurar los datos de entrenamiento y las divisiones de datos de validación junto con la configuración de validación cruzada para el aprendizaje automático automatizado y los experimentos automatizados.

En Azure Machine Learning, cuando se usa el aprendizaje automático automatizado para compilar varios modelos de aprendizaje automático, cada ejecución secundaria debe validar el modelo relacionado al calcular las métricas de calidad de ese modelo, como la precisión o la AUC ponderada. Estas métricas se calculan al comparar las predicciones realizadas con cada modelo con las etiquetas reales de observaciones anteriores en los datos de validación. Obtenga más información sobre cómo se calculan las métricas en función del tipo de validación.

Los experimentos de aprendizaje automático automatizado realizan la validación de modelos de forma automática. En las secciones siguientes se describe cómo puede personalizar aún más la configuración de validación con el SDK de Azure Machine Learning para Python.

Para obtener una experiencia sin código o con poco código, consulte Creación de experimentos de aprendizaje automático automatizados en Azure Machine Learning Studio.

Requisitos previos

Para realizar este artículo, necesitará lo siguiente

Importante

Los comandos de Python de este artículo requieren la versión más reciente del paquete azureml-train-automl.

Divisiones de datos y validación cruzada predeterminadas en el aprendizaje automático

Use el objeto AutoMLConfig para definir la configuración del experimento y el entrenamiento. En el siguiente fragmento de código, observe que solo se han definido los parámetros necesarios; es decir, los parámetros de n_cross_validations o validation_datano están incluidos.

Nota

Las divisiones de datos predeterminadas y la validación cruzada no se admiten en escenarios de previsión.

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             label_column_name = 'Class'
                            )

Si no especifica explícitamente un parámetro validation_data o n_cross_validations, el aprendizaje automático automatizado aplica las técnicas predeterminadas en función del número de filas proporcionadas en el conjunto de datos único training_data.

Tamaño de datos de entrenamiento Técnica de validación
Mayor que 20 000 filas Se aplica la división de datos de entrenamiento o validación. El valor predeterminado consiste en usar el 10 % del conjunto de datos de entrenamiento inicial como conjunto de validación. A su vez, ese conjunto de validación se usa para calcular las métricas.
Menor que 20 000 filas Se aplica el enfoque de validación cruzada. El número predeterminado de iteraciones depende del número de filas.
Si el conjunto de datos tiene menos de 1000 filas, se usan diez iteraciones.
Si hay entre 1000 y 20 000 filas, se usan tres iteraciones.

Especificación de datos de validación

En este caso, puede empezar con un solo archivo de datos y dividirlo en conjuntos de datos de entrenamiento y validación, o bien puede proporcionar un archivo de datos independiente como conjunto de validación. En cualquier caso, el parámetro validation_data del objeto AutoMLConfig asigna los datos que se van a usar como conjunto de validación. Este parámetro solo acepta los conjuntos de datos en forma de conjunto de datos de Azure Machine Learning o un dataframe de Pandas.

Nota

El parámetro validation_data requiere que también se establezcan los parámetros training_data y label_column_name. Solo puede establecer un parámetro de validación, es decir, solo puede especificar validation_data o n_cross_validations, no ambos.

En el ejemplo de código siguiente se define de forma explícita qué parte de los datos proporcionados de dataset se usará para el entrenamiento y la validación.

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

training_data, validation_data = dataset.random_split(percentage=0.8, seed=1)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = training_data,
                             validation_data = validation_data,
                             label_column_name = 'Class'
                            )

Especificación del tamaño del conjunto de validación

En este caso, solo se proporciona un único conjunto de datos para el experimento. Es decir, el parámetro validation_datano se especificó y el conjunto de datos proporcionado se asignó al parámetro training_data.

En el objeto AutoMLConfig, puede establecer el parámetro validation_size para que contenga una parte de los datos de entrenamiento para la validación. Esto significa que AutoML dividirá el conjunto de validación a partir del elemento training_data inicial proporcionado. Este valor debe estar entre 0,0 y 1,0 no inclusivo (por ejemplo, 0,2 significa que el 20 % de los datos se conservan para los datos de validación).

Nota

No se admite el parámetro validation_size en escenarios de previsión.

Consulte el ejemplo de código siguiente:

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             validation_size = 0.2,
                             label_column_name = 'Class'
                            )

Validación cruzada con k iteraciones

Para realizar la validación cruzada de k iteraciones, incluya el parámetro n_cross_validations y establézcalo en un valor. Este parámetro establece cuántas validaciones cruzadas se deben realizar, en función del mismo número de iteraciones.

Nota

El parámetro n_cross_validations no se admite en escenarios de clasificación que usan redes neuronal profundas. Para escenarios de previsión, vea cómo se aplica la validación cruzada en Configuración de AutoML para entrenar un modelo de previsión de series temporal.

En el código siguiente, se definen cinco iteraciones para la validación cruzada. Por lo tanto, se usan cinco entrenamientos diferentes, de modo que cada entrenamiento usa 4/5 de los datos, y cada validación usa 1/5 de los datos con una iteración de datos de exclusión cada vez.

Como resultado, las métricas se calculan con el promedio de las cinco métricas de validación.

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             n_cross_validations = 5
                             label_column_name = 'Class'
                            )

Validación cruzada Monte Carlo

Para realizar la validación cruzada Monte Carlo, incluya los parámetros validation_size y n_cross_validations en el objeto AutoMLConfig.

En el caso de la validación cruzada Monte Carlo, AutoML reserva la parte de los datos de entrenamiento especificados por el parámetro validation_size para la validación y, a continuación, asigna el resto de los datos para el entrenamiento. Después, este proceso se repite en función del valor especificado en el parámetro n_cross_validations, que genera nuevas divisiones de entrenamiento y validación de forma aleatoria cada vez.

Nota

La validación cruzada Monte Carlo no se admite en escenarios de previsión.

El código siguiente define 7 iteraciones para la validación cruzada y se deben usar para la validación el 20 % de los datos de entrenamiento. Por lo tanto, se usan 7 entrenamientos diferentes, de modo que cada entrenamiento usa el 80 % de los datos y cada validación usa el 20 % de los datos con una iteración de datos de exclusión diferente cada vez.

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             n_cross_validations = 7
                             validation_size = 0.2,
                             label_column_name = 'Class'
                            )

Especificación de las iteraciones de datos de validación cruzada personalizadas

También puede proporcionar sus propias iteraciones de datos de validación cruzada. Esto se considera un escenario más avanzado porque se especifican las columnas que se van a dividir y usar para la validación. Incluya las columnas de división de validación cruzada personalizadas en los datos de entrenamiento y especifique las columnas al rellenar los nombres de columna en el parámetro cv_split_column_names. Cada columna representa una división de validación cruzada y se rellena con valores enteros 1 o 0, de modo que 1 indica que la fila se debe usar para el entrenamiento y 0 indica que la fila se debe usar para la validación.

Nota

No se admite el parámetro cv_split_column_names en escenarios de previsión.

El siguiente fragmento de código contiene datos de marketing bancario con dos columnas de división de validación cruzada "cv1" y "cv2".

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/bankmarketing_with_cv.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             label_column_name = 'y',
                             cv_split_column_names = ['cv1', 'cv2']
                            )

Nota

Para usar cv_split_column_names con training_data y label_column_name, actualice el SDK de Azure Machine Learning para Python versión 1.6.0 o posterior. En el caso de las versiones anteriores del SDK, consulte cómo usar cv_splits_indices, pero tenga en cuenta que solo se usa con la entrada de conjunto de datos X e y únicamente.

Cálculo de métricas para la validación cruzada en el aprendizaje automático

Cuando se usa la validación cruzada de k iteraciones o de tipo Monte Carlo, las métricas se calculan en cada plegamiento de validación y, a continuación, se agregan. La operación de agregación es un promedio de las métricas escalares y la suma de los gráficos. Las métricas calculadas durante la validación cruzada se basan en todos los plegamientos y, por tanto, en todos los ejemplos del conjunto de entrenamiento. Obtenga más información sobre las métricas del aprendizaje automático automatizado.

Cuando se usa un conjunto de validación personalizado o un conjunto de validación seleccionado automáticamente, las métricas de evaluación del modelo solo se calculan a partir del conjunto de validación y no de los datos de entrenamiento.

Incorporación de datos de prueba (versión preliminar)

Importante

Esta característica actualmente está en su versión preliminar pública. Esta versión preliminar se ofrece sin un Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas.

Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

También puede proporcionar datos de prueba para evaluar el modelo recomendado que el aprendizaje automático automatizado genera automáticamente tras la finalización del experimento. Cuando se proporcionan datos de prueba, se considera algo independiente del entrenamiento y la validación, para no sesgar los resultados de la serie de pruebas del modelo recomendado. Obtenga más información sobre los datos de entrenamiento, validación y prueba en el aprendizaje automático automatizado.

Los conjuntos de datos de prueba deben tener el formato de un objeto TabularDataset de Azure Machine Learning. Puede especificar un conjunto de datos de prueba con los parámetros test_data y test_size en el objeto AutoMLConfig. Estos parámetros son mutuamente excluyentes y no se pueden especificar al mismo tiempo ni con cv_split_column_names o cv_splits_indices.

Con el parámetro test_data, especifique un conjunto de datos existente para pasarlo al objeto AutoMLConfig.

automl_config = AutoMLConfig(task='forecasting',
                             ...
                             # Provide an existing test dataset
                             test_data=test_dataset,
                             ...
                             forecasting_parameters=forecasting_parameters)

Para usar una división de entrenamiento o prueba en lugar de proporcionar datos de prueba directamente, use el parámetro test_size al crear AutoMLConfig. Este parámetro debe ser un valor de punto flotante entre 0,0 y 1,0 exclusivo, y especifica el porcentaje del conjunto de datos de entrenamiento que se debe usar para el conjunto de datos de prueba.

automl_config = AutoMLConfig(task = 'regression',
                             ...
                             # Specify train/test split
                             training_data=training_data,
                             test_size=0.2)

Nota

En las tareas de regresión se usa el muestreo aleatorio.
En las tareas de clasificación se usa el muestreo estratificado, aunque el muestreo aleatorio se usa como reversión cuando el muestreo estratificado no es factible.
La previsión no admite actualmente la especificación de un conjunto de datos de prueba mediante una división de entrenamiento o prueba con el parámetro test_size.

Al pasar los parámetros test_data o test_size a AutoMLConfig, se desencadena automáticamente una serie de pruebas remota tras la finalización del experimento. Esta serie de pruebas usa los datos de prueba proporcionados para evaluar el mejor modelo que el aprendizaje automático automatizado recomienda. Obtenga más información sobre cómo obtener las predicciones de la serie de pruebas.

Pasos siguientes