Configurar 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 se describen las 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 los experimentos de aprendizaje automático automatizado (ML automatizado). En Azure Machine Learning, cuando se usa ML automatizado para crear varios modelos de aprendizaje automático, cada ejecución secundaria debe validar el modelo relacionado mediante el cálculo de las métricas de calidad de ese modelo, como la precisión o el área bajo la curva (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. 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 la configuración de validación con el SDK de Python de Azure Machine Learning. Para obtener más información sobre cómo se calculan las métricas en función del tipo de validación, consulte la sección Establecer cálculo de métricas para la validación cruzada. Si le interesa una experiencia de código bajo o sin código, consulte Cree sus experimentos de ML automatizados en el Estudio de Azure Machine Learning.
Requisitos previos
Un área de trabajo de Azure Machine Learning. Para crear el área de trabajo, consulte Creación de recursos del área de trabajo.
Familiaridad con la configuración de un experimento de ML automatizado con el SDK de Azure Machine Learning. Para ver los patrones fundamentales de diseño de experimentos de aprendizaje automático automatizado, complete el tutorial Entrenamiento de un modelo de detección de objetos o la Guía configuración del entrenamiento de AutoML con Python.
Comprensión de las divisiones de datos de entrenamiento y validación y de validación cruzada como conceptos de aprendizaje automático. Para obtener una explicación general, consulte los artículos siguientes:
Importante
Los comandos de Python de este artículo requieren la versión más reciente del paquete azureml-train-automl
.
- Instale el paquete
azureml-train-automl
más reciente en el entorno local. - Para obtener información sobre la última versión del paquete
azureml-train-automl
, consulta las notas de la versión.
Establecer divisiones de datos predeterminadas y validación cruzada en el aprendizaje automático
Para establecer divisiones de datos predeterminadas y validación cruzada en el aprendizaje automático, use el objeto de clase AutoMLConfig para definir su experimento y configuración de entrenamiento. En el ejemplo siguiente, solo se definen los parámetros necesarios. No se incluyen los parámetros n_cross_validations
y validation_data
.
Nota:
En escenarios de previsión, no se admiten las divisiones de datos predeterminadas ni la validación cruzada.
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
, ML automatizado aplica 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 es inferior a 1000 filas, se usan 10 pliegues. - Si las filas están entre 1000 y 20 000, se usan tres pliegues. |
Proporcionar el conjunto de datos de validación
Tiene dos opciones para proporcionar datos de validación. Puede empezar con un único archivo de datos y dividirlo en conjuntos de datos de entrenamiento y validación, o puede proporcionar un archivo de datos independiente para el 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.
Estas son algunas otras consideraciones para trabajar con parámetros de validación:
- Solo puede establecer un parámetro de validación, ya sea el parámetro
validation_data
on_cross_validations
, pero no ambos. - Al usar el parámetro
validation_data
, también debe especificar los parámetrostraining_data
ylabel_column_name
.
En el ejemplo siguiente se define explícitamente qué parte de dataset
usar para el entrenamiento (training_data
) y para la validación (validation_data
):
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'
)
Proporcionar el tamaño del conjunto de datos de validación
Al proporcionar el tamaño del conjunto de validación, solo se proporciona un único conjunto de datos para el experimento. No se especifica el parámetro validation_data
y el conjunto de datos proporcionado se asigna 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. Para esta estrategia, el trabajo de ML automatizado divide el conjunto de validación del training_data
inicial que proporcione. El valor debe estar comprendido entre 0,0 y 1,0 no clúster (por ejemplo, 0,2 significa que el 20 % de los datos se mantiene para los datos de validación).
Nota:
En escenarios de previsión, no se admite el parámetro validation_size
.
En el ejemplo siguiente se proporciona un único dataset
para el experimento. training_data
accede al conjunto de datos completo y se asigna el 20 % del conjunto de datos para la validación (validation_size = 0.2
):
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'
)
Realizar validación cruzada de k iteraciones
Para realizar la validación cruzada de k iteraciones incluya el parámetro n_cross_validations
y defina el número de plegamientos. Este parámetro establece cuántas validaciones cruzadas se deben realizar, en función del mismo número de iteraciones.
Nota:
En escenarios de clasificación que usan redes neuronales profundas (DNN), no se admite el parámetro n_cross_validations
.
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 ejemplo siguiente se definen cinco plegamientos para la validación cruzada. El proceso ejecuta cinco entrenamientos diferentes, donde cada entrenamiento usa 4/5 de los datos. Cada validación usa 1/5 de los datos con un plegado de espera diferente 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'
)
Realizar la validación cruzada de Monte Carlo
Para realizar la validación cruzada de 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. A continuación, 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, al azar, cada vez.
Nota:
En escenarios de previsión, no se admite la validación cruzada de Monte Carlo.
En el ejemplo siguiente se definen siete plegamientos para la validación cruzada y el 20 % de los datos de entrenamiento para la validación. El proceso ejecuta siete entrenamientos diferentes, donde cada entrenamiento usa el 80 % de los datos. Cada validación usa el 20 % de los datos con un plegado de espera 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. Este enfoque se considera un escenario más avanzado porque se especifican las columnas que se van a dividir y usar para la validación. Se incluyen columnas de división de CV personalizadas en los datos de entrenamiento y se especifican las columnas rellenando los nombres de columna en el parámetro cv_split_column_names
. Cada columna representa una división de validación cruzada y tiene un valor entero de 1 o 0. Un valor de 1 indica que se debe usar la fila para el entrenamiento. Un valor de 0 indica que se debe usar la fila para la validación.
Nota:
En escenarios de previsión, no se admite el parámetro cv_split_column_names
.
El ejemplo siguiente contiene datos de marketing bancarios con dos columnas divididas de CV 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.
Establecer cálculo de métricas para la validación cruzada
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. Para obtener más información, consulte Evaluar los resultados del experimento de ML 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.
Proporcionar un conjunto 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. Al proporcionar datos de prueba, los datos se consideran independientes del entrenamiento y la validación para evitar cualquier efecto de sesgo en los resultados de la ejecución de pruebas del modelo recomendado. Para obtener más información, consulte Datos de entrenamiento, validación y prueba.
Advertencia
La característica del conjunto de datos de prueba no está disponible para los siguientes escenarios de ML automatizados:
- Tareas de visión artificial
- Entrenamiento de pronóstico de múltiples modelos y series temporales jerárquicas (HTS) (vista previa)
- Tareas de previsión en las que están habilitadas las redes neuronales de aprendizaje profundo (DNN)
- AutoML se ejecuta desde procesos locales o clústeres de Azure Databricks
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 o con los parámetros cv_split_column_names
o cv_splits_indices
.
En el objeto AutoMLConfig
, use el parámetro test_data
para especificar un conjunto de datos existente:
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. Especifica el porcentaje del conjunto de datos de entrenamiento que se va a 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)
Estas son algunas otras consideraciones para trabajar con un conjunto de datos de prueba:
- En las tareas de regresión se usa el muestreo aleatorio.
- En el caso de las tareas de clasificación, se usa el muestreo estratificado, pero el muestreo aleatorio se usa como reserva cuando el muestreo estratificado no es factible.
Nota:
En escenarios de previsión, actualmente no se puede especificar un conjunto de datos de prueba mediante una división de entrenamiento o prueba con el parámetro test_size
.
Pasar los parámetros test_data
o test_size
al objeto AutoMLConfig
desencadena automáticamente una ejecución de prueba 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. Para obtener más información, consulte Obtener resultados del trabajo de prueba.