Entrenamiento de modelos de ML con la API de Python de AutoML en Azure Databricks
En este artículo se muestra cómo entrenar un modelo con AutoML de Azure Databricks mediante la API. Obtenga más información sobre ¿Qué es AutoML?. La API de Python proporciona funciones para iniciar las ejecuciones de AutoML de clasificación, regresión y previsión. Cada llamada de función entrena un conjunto de modelos y genera un cuaderno de prueba para cada modelo.
En los pasos siguientes se describe a grandes rasgos cómo configurar un experimento de AutoML mediante la API:
- Cree un cuaderno y adjúntelo a un clúster que ejecute Databricks Runtime ML.
- Identifique qué tabla desea usar desde el origen de datos existente o cargue un archivo de datos en DBFS y cree una tabla.
- Para iniciar una ejecución de AutoML, pase el nombre de tabla a la especificación de API adecuada: clasificación, regresión o previsión.
- Cuando se inicia la ejecución de AutoML, aparece una URL del experimento de MLflow en la consola. Use esta URL para supervisar el progreso de la ejecución. Actualice el experimento de MLflow para ver las pruebas a medida que se completan.
- Una vez completada la ejecución de AutoML:
- Use los vínculos del resumen de salida para ir al experimento de MLflow o al cuaderno que generó los mejores resultados.
- Use el vínculo al cuaderno de exploración de datos para obtener información sobre los datos pasados a AutoML. También puede adjuntar este cuaderno al mismo clúster y volver a ejecutar el cuaderno para reproducir los resultados o realizar análisis de datos adicionales.
- Use el objeto de resumen devuelto por la llamada a AutoML para explorar más detalles sobre las pruebas, o para cargar un modelo entrenado por una prueba determinada. Obtenga más información sobre el objeto AutoMLSummary.
- Clone los cuadernos generados a partir de las pruebas, y vuelva a ejecutar el cuaderno asociándolo al mismo clúster para reproducir los resultados. También puede realizar las modificaciones necesarias y volver a ejecutarlas, para entrenar modelos adicionales y registrarlos en el mismo experimento.
Requisitos
Consulte los requisitos para los experimentos de AutoML.
Especificación de clasificación
En el ejemplo de código siguiente se configura una ejecución de AutoML para entrenar un modelo de clasificación. Para obtener parámetros adicionales para personalizar aún más la ejecución de AutoML, consulte Parámetros de clasificación y regresión.
Nota:
El parámetro max_trials
está en desuso en Databricks Runtime 10.4 ML y no es compatible con Databricks Runtime 11.0 ML y versiones posteriores. Use timeout_minutes
para controlar la duración de una ejecución de AutoML.
databricks.automl.classify(
dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
*,
target_col: str,
data_dir: Optional[str] = None,
exclude_cols: Optional[List[str]] = None, # <DBR> 10.3 ML and above
exclude_frameworks: Optional[List[str]] = None, # <DBR> 10.3 ML and above
experiment_dir: Optional[str] = None, # <DBR> 10.4 LTS ML and above
experiment_name: Optional[str] = None, # <DBR> 12.1 ML and above
feature_store_lookups: Optional[List[Dict]] = None, # <DBR> 11.3 LTS ML and above
imputers: Optional[Dict[str, Union[str, Dict[str, Any]]]] = None, # <DBR> 10.4 LTS ML and above
max_trials: Optional[int] = None, # <DBR> 10.5 ML and below
pos_label: Optional[Union[int, bool, str] = None, # <DBR> 11.1 ML and above
primary_metric: str = "f1",
time_col: Optional[str] = None,
timeout_minutes: Optional[int] = None,
) -> AutoMLSummary
Especificación de regresión
En el ejemplo de código siguiente se configura una ejecución de AutoML para entrenar un modelo de regresión. Para obtener parámetros adicionales para personalizar aún más la ejecución de AutoML, consulte Parámetros de clasificación y regresión.
Nota:
El parámetro max_trials
está en desuso en Databricks Runtime 10.4 ML y no es compatible con Databricks Runtime 11.0 ML y versiones posteriores. Use timeout_minutes
para controlar la duración de una ejecución de AutoML.
databricks.automl.regress(
dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
*,
target_col: str,
data_dir: Optional[str] = None,
exclude_cols: Optional[List[str]] = None, # <DBR> 10.3 ML and above
exclude_frameworks: Optional[List[str]] = None, # <DBR> 10.3 ML and above
experiment_dir: Optional[str] = None, # <DBR> 10.4 LTS ML and above
experiment_name: Optional[str] = None, # <DBR> 12.1 ML and above
feature_store_lookups: Optional[List[Dict]] = None, # <DBR> 11.3 LTS ML and above
imputers: Optional[Dict[str, Union[str, Dict[str, Any]]]] = None, # <DBR> 10.4 LTS ML and above
max_trials: Optional[int] = None, # <DBR> 10.5 ML and below
primary_metric: str = "r2",
time_col: Optional[str] = None,
timeout_minutes: Optional[int] = None,
) -> AutoMLSummary
Especificación de previsión
En el ejemplo de código siguiente se configura una ejecución de AutoML para entrenar un modelo de previsión. Para obtener más información sobre los parámetros de la ejecución de AutoML, consulte Parámetros de previsión. Para usar Auto-ARIMA, la serie temporal debe tener una frecuencia regular (es decir, el intervalo entre dos puntos cualquiera debe ser el mismo a lo largo de la serie temporal). La frecuencia debe coincidir con la unidad de frecuencia especificada en la llamada API. AutoML controla los pasos de tiempo que faltan, rellenando esos valores con el valor anterior.
databricks.automl.forecast(
dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
*,
target_col: str,
time_col: str,
country_code: str = "US", # <DBR> 12.0 ML and above
data_dir: Optional[str] = None,
exclude_frameworks: Optional[List[str]] = None,
experiment_dir: Optional[str] = None,
experiment_name: Optional[str] = None, # <DBR> 12.1 ML and above
feature_store_lookups: Optional[List[Dict]] = None, # <DBR> 12.2 LTS ML and above
frequency: str = "D",
horizon: int = 1,
identity_col: Optional[Union[str, List[str]]] = None,
output_database: Optional[str] = None, # <DBR> 10.5 ML and above
primary_metric: str = "smape",
timeout_minutes: Optional[int] = None,
) -> AutoMLSummary
Parámetros de clasificación y regresión
Nota:
Para problemas únicamente de clasificación y regresión, puede hacer lo siguiente:
- Especificar las columnas que se van a incluir en el entrenamiento.
- Seleccionar métodos de imputación personalizados.
Nombre del campo | Tipo | Descripción |
---|---|---|
dataset | str pandas.DataFrame pyspark.DataFrame pyspark.sql.DataFrame | Nombre de tabla de entrada o DataFrame que contiene características de entrenamiento y destino. El nombre de la tabla puede tener el formato ".." o "." para tablas que no son de Unity Catalog |
target_col | str | Nombre de columna de la etiqueta de destino. |
data_dir | str de formatodbfs:/<folder-name> |
(Opcional) ruta de accesoDBFS que se usa para almacenar el conjunto de datos de entrenamiento. Esta ruta de acceso es visible para los nodos de controlador y de trabajo. Databricks recomienda dejar este campo vacío, por lo que AutoML puede guardar el conjunto de datos de entrenamiento como un artefacto de MLflow. Si se especifica una ruta de acceso personalizada, el conjunto de datos no hereda los permisos de acceso del experimento de AutoML. |
exclude_cols | List[str] | (Opcional) Lista de columnas que se omitirán durante los cálculos de AutoML. Default: [] |
exclude_ frameworks | List[str] | (Opcional) Lista de marcos de algoritmos que AutoML no debe tener en cuenta a medida que desarrolla modelos. Valores posibles: lista vacía, o uno o varios entre "sklearn", "lightgbm", o "xgboost". Valor predeterminado: [] (se tienen en cuenta todos los marcos) |
experiment_dir | str | (Opcional) Ruta de acceso al directorio del área de trabajo, para guardar los cuadernos y experimentos generados. Predeterminado: /Users/<username>/databricks_automl/ |
experiment_name | str | (Opcional) Nombre del experimento de MLflow que crea AutoML. Valor predeterminado: el nombre se genera automáticamente. |
feature_store_ lookups | List[Dict] | (Opcional) Lista de diccionarios que representan características del Almacén de características para el aumento de datos. Las claves válidas de cada diccionario son: * table_name (cadena): obligatorio. Nombre de la tabla de características. * lookup_key (lista o cadena): obligatorio. Nombres de columna que se usarán como clave al unir la tabla de características con los datos pasados en el parámetro dataset . El orden de los nombres de columna debe coincidir con el orden de las claves principales de la tabla de características.* timestamp_lookup_key (cadena): obligatorio si la tabla especificada es una tabla de características de serie temporal. Nombre de columna que se va a usar al realizar una búsqueda a un momento dado en la tabla de características con los datos pasados en el parámetro dataset .Default: [] |
imputers | Dict[str, Union[str, Dict[str, Any]]] | (Opcional) Diccionario donde cada clave es un nombre de columna, y cada valor es una cadena o diccionario que describe la estrategia de imputación. Si se especifica como una cadena, el valor debe ser "mean", "median" o "most_frequent". Para imputar con un valor conocido, especifique el valor como un diccionario{"strategy": "constant", "fill_value": <desired value>} . También puede especificar opciones de cadena como diccionarios, por ejemplo {"strategy": "mean"}.Si no se proporciona ninguna estrategia de imputación para una columna, AutoML selecciona una estrategia predeterminada basada en el tipo de columna y el contenido. Si elige un método de imputación distinto del predeterminado, AutoML no realiza la detección de tipos semánticos. Predeterminado: {} |
max_trials | int | (Opcional) Número máximo de pruebas que se ejecutarán. Este parámetro está disponible en Databricks Runtime 10.5 ML y versiones anteriores, pero está en desuso a partir de Databricks Runtime 10.3 ML. En Databricks Runtime 11.0 ML y versiones posteriores, este parámetro no es compatible. Valor predeterminado: 20 Si timeout_minutes=None, AutoML ejecuta el número máximo de pruebas. |
pos_label | Union[int, bool, str] | (Solo clasificación) La clase positiva. Esto es útil para calcular métricas como la precisión y la coincidencia. Solo se debe especificar para problemas de clasificación binaria. |
primary_metric | str | Métrica usada para evaluar y clasificar el rendimiento del modelo. Métricas admitidas para la regresión: "r2" (valor predeterminado), "mae", "rmse", "mse" Métricas admitidas para la clasificación: "f1" (valor predeterminado), "log_loss", "precision", "accuracy", "roc_auc" |
time_col | str | Disponible en Databricks Runtime 10.1 ML y versiones posteriores. (Opcional) Nombre de columna de una columna de tiempo. Si se proporciona, AutoML intenta dividir el conjunto de datos en entrenamiento, validación y conjuntos de prueba cronológicamente, usando los puntos más antiguos como datos de entrenamiento y los puntos más recientes como conjunto de pruebas. Los tipos de columna aceptados son el de marca de tiempo y el entero. Con Databricks Runtime 10.2 ML y posteriores, también se admiten columnas de cadena. Si el tipo de columna es el de cadena, AutoML intenta convertirlo en el de marca de tiempo mediante la detección semántica. Si se produce un error en la conversión, se produce un error en la ejecución de AutoML. |
timeout_minutes | int | (Opcional) Tiempo máximo para esperar a que se completen las pruebas de AutoML. Los tiempos de espera más largos permiten que AutoML ejecute más pruebas e identifique un modelo con mayor precisión. Predeterminado: 120 minutos Valor mínimo: 5 minutos Se notifica un error si el tiempo de espera es demasiado corto como para permitir que se complete, al menos, una prueba. |
Parámetros de previsión
Nombre del campo | Tipo | Descripción |
---|---|---|
dataset | str pandas.DataFrame pyspark.DataFrame pyspark.sql.DataFrame |
Nombre de tabla de entrada o DataFrame que contiene características de entrenamiento y destino. El nombre de la tabla puede tener el formato ".." o "." para tablas que no son de Unity Catalog |
target_col | str | Nombre de columna de la etiqueta de destino. |
time_col | str | Nombre de la columna de tiempo para la previsión. |
frequency | str | Frecuencia de la serie temporal para la previsión. Este es el período con el que se espera que se produzcan eventos. El valor predeterminado es "D" o datos diarios. Asegúrese de cambiar la configuración si los datos tienen una frecuencia diferente. Valores posibles: "W" ("weeks" = semanas) "D" / "days" / "day" (día/s) "hours" / "hour" / "hr" / "h" (hora/s) "m" / "minute" / "min" / "minutes" / "T" (minuto/s) "S" / "seconds" / "sec" / "second" (segundo/s) Los siguientes solo están disponibles con Databricks Runtime 12.0 ML y versiones posteriores: “M” / “mes” / “meses” “Q” / “trimestre” / “trimestres” “Y” / “año” / “años” Valor predeterminado: "D" |
horizon (horizonte) | int | Número de períodos en el futuro para los que se deben devolver las previsiones. Las unidades son la frecuencia de la serie temporal. Valor predeterminado: 1 |
data_dir | str de formatodbfs:/<folder-name> |
(Opcional) ruta de accesoDBFS que se usa para almacenar el conjunto de datos de entrenamiento. Esta ruta de acceso es visible para los nodos de controlador y de trabajo. Databricks recomienda dejar este campo vacío, por lo que AutoML puede guardar el conjunto de datos de entrenamiento como un artefacto de MLflow. Si se especifica una ruta de acceso personalizada, el conjunto de datos no hereda los permisos de acceso del experimento de AutoML. |
exclude_ frameworks | List[str] | (Opcional) Lista de marcos de algoritmos que AutoML no debe tener en cuenta a medida que desarrolla modelos. Valores posibles: lista vacía, o uno o varios entre "prophet" o "arima". Valor predeterminado: [] (se tienen en cuenta todos los marcos) |
experiment_dir | str | (Opcional) Ruta de acceso al directorio del área de trabajo, para guardar los cuadernos y experimentos generados. Predeterminado: /Users/<username>/databricks_automl/ |
experiment_name | str | (Opcional) Nombre del experimento de MLflow que crea AutoML. Valor predeterminado: el nombre se genera automáticamente. |
feature_store_ lookups | List[Dict] | (Opcional) Lista de diccionarios que representan características del Almacén de características para el aumento de datos. Las claves válidas de cada diccionario son: * table_name (cadena): obligatorio. Nombre de la tabla de características. * lookup_key (lista o cadena): obligatorio. Nombres de columna que se usarán como clave al unir la tabla de características con los datos pasados en el parámetro dataset . El orden de los nombres de columna debe coincidir con el orden de las claves principales de la tabla de características.* timestamp_lookup_key (cadena): obligatorio si la tabla especificada es una tabla de características de serie temporal. Nombre de columna que se va a usar al realizar una búsqueda a un momento dado en la tabla de características con los datos pasados en el parámetro dataset .Default: [] |
identity_col | Union[str, list] | (Opcional) Columna/s que identifican la serie temporal para la previsión de varias series. AutoML agrupa por esta/s columna/s y la columna de tiempo para la previsión. |
output_database | str | (Opcional) Si se proporciona, AutoML guarda las predicciones del mejor modelo en una nueva tabla de la base de datos especificada. Valor predeterminado: las predicciones no se guardan. |
primary_metric | str | Métrica usada para evaluar y clasificar el rendimiento del modelo. Métricas admitidas: "smape" (valor predeterminado) "mse", "rmse", "mae" o "mdape". |
timeout_minutes | int | (Opcional) Tiempo máximo para esperar a que se completen las pruebas de AutoML. Los tiempos de espera más largos permiten que AutoML ejecute más pruebas e identifique un modelo con mayor precisión. Predeterminado: 120 minutos Valor mínimo: 5 minutos Se notifica un error si el tiempo de espera es demasiado corto como para permitir que se complete, al menos, una prueba. |
country_code | str | Disponible en Databricks Runtime 12.0 ML y versiones posteriores. Solo es compatible con el modelo de previsión Prophet. (Opcional) Código de país de dos letras que indica los días festivos del país que debe usar el modelo de previsión. Para pasar por alto los días festivos, establezca este parámetro en una cadena vacía (""). Países admitidos. Valor predeterminado: EE. UU. (Días festivos de Estados Unidos). |
Devuelve
AutoMLSummary
Objeto de resumen de una ejecución de AutoML, que describe las métricas, los parámetros y otros detalles de cada una de las pruebas. También se usa este objeto para cargar el modelo entrenado por una prueba específica.
Propiedad | Tipo | Descripción |
---|---|---|
experimento | mlflow.entities.Experiment | El experimento de MLflow usado para registrar las pruebas. |
puebas | List[TrialInfo] | Una lista que contiene información sobre todas las pruebas que se ejecutaron. |
best_trial | TrialInfo | Información sobre la prueba que dio lugar a la mejor puntuación ponderada para la métrica principal. |
metric_distribution | str | La distribución de puntuaciones ponderadas, para la métrica principal, en todas las pruebas. |
output_table_name | str | Se usa solo con la previsión y solo si se proporciona output_database. Nombre de la tabla en output_database que contiene las predicciones del modelo. |
TrialInfo
Objeto de resumen para cada prueba individual.
Propiedad | Tipo | Descripción |
---|---|---|
notebook_path | Opcional[str] | La ruta de acceso al cuaderno generado, para esta prueba, en el área de trabajo. Para la clasificación y la regresión, este valor solo se establece para la mejor prueba, mientras que las demás pruebas tienen el valor establecido en None . Para la previsión, este valor está presente para todas las pruebas. |
notebook_url | Opcional[str] | La URL del cuaderno generado para esta prueba. Para la clasificación y la regresión, este valor solo se establece para la mejor prueba, mientras que las demás pruebas tienen el valor establecido en None . Para la previsión, este valor está presente para todas las pruebas. |
artifact_uri | Opcional[str] | Identificador URI del artefacto de MLflow para el cuaderno generado. |
mlflow_run_id | str | El Id. de ejecución de MLflow asociado a esta ejecución de prueba. |
Métricas | Dict[str, float] | Las métricas registradas en MLflow para esta prueba. |
params | Dict[str, str] | Los parámetros registrados en MLflow que se usaron para esta prueba. |
model_path | str | La URL del artefacto de MLflow del modelo entrenado en esta prueba. |
model_description | str | Breve descripción del modelo y los hiperparámetros usados para entrenar este modelo. |
duration | str | Duración del entrenamiento en minutos. |
preprocessors | str | Descripción de los preprocesadores que se ejecutan antes de entrenar el modelo. |
evaluation_metric_score | FLOAT | Puntuación de la métrica principal, evaluada para el conjunto de datos de validación. |
Método | Descripción |
---|---|
load_model() | Cargue el modelo generado en esta prueba, registrado como un artefacto de MLflow. |
Importación de un cuaderno
Para importar un cuaderno que se ha guardado como un artefacto de MLflow, use la API de Python databricks.automl.import_notebook
.
def import_notebook(artifact_uri: str, path: str, overwrite: bool = False) -> ImportNotebookResult:
"""
Import a trial notebook, saved as an MLflow artifact, into the workspace.
:param artifact_uri: The URI of the MLflow artifact that contains the trial notebook.
:param path: The path in the Databricks workspace where the notebook should be imported. This must be an absolute path. The directory will be created if it does not exist.
:param overwrite: Whether to overwrite the notebook if it already exists. It is `False` by default.
:return: ImportNotebookResult contains two fields, `path` and `url`, referring to the imported notebook
"""
Ejemplo de uso:
summary = databricks.automl.classify(...)
result = databricks.automl.import_notebook(summary.trials[5].artifact_uri, "/Users/you@yourcompany.com/path/to/directory")
print(result.path)
print(result.url)
Registro e implementación de un modelo
Puede registrar e implementar el modelo entrenado de AutoML igual que cualquier modelo registrado en el registro de modelos de MLflow. Consulte Registro, carga, registro e implementación de modelos de MLflow.
No hay ningún módulo denominado pandas.core.indexes.numeric
Al atender un modelo compilado mediante AutoML con el servicio de modelos, puede obtener este error: No module named 'pandas.core.indexes.numeric
.
Esto se debe a una versión de pandas
incompatible entre AutoML y el entorno de punto de conexión del servicio de modelos. Para resolver este error, ejecute el script add-pandas-dependency.py. El script edita requirements.txt
y conda.yaml
para que el modelo registrado incluya la versión de dependencia adecuada pandas
: pandas==1.5.3
.
- Modifique el script para incluir el
run_id
de la ejecución de MLflow donde se ha registrado el modelo. - Vuelva a registrar el modelo en el registro del modelo de MLflow.
- Pruebe a servir la nueva versión del modelo de MLflow.
Ejemplos de cuadernos
Revise estos cuadernos para empezar a trabajar con AutoML.
El siguiente cuaderno muestra cómo hacer la clasificación con AutoML.
Cuaderno de ejemplo de clasificación de AutoML
El siguiente cuaderno muestra cómo hacer una regresión con AutoML.
Cuaderno de ejemplo de regresión de AutoML
El siguiente cuaderno muestra cómo hacer previsiones con AutoML.
Cuaderno de ejemplo de previsión de AutoML
En el cuaderno siguiente se muestra cómo entrenar un modelo de ML con AutoML y tablas de características del almacén de características.