Eseguire il training dei modelli di classificazione con l'API Python autoML

Questo notebook di esempio illustra come eseguire il training di un modello di classificazione in Databricks usando l'API di Python AutoML. Usando il set di dati UCI Census Income, si chiama automl.classify() per predire se un individuo guadagna più di $ 50.000 all'anno, quindi usare la miglior prova per eseguire l'inferenza sia su DataFrame pandas che Spark.

Requisiti

Databricks Runtime per Machine Learning.

Set di dati sul reddito del censimento

Questo set di dati contiene le informazioni del censimento tratte dal database del 1994. Ogni riga rappresenta un gruppo di singoli utenti. L'obiettivo è determinare se un gruppo ha un reddito di oltre 50.000 dollari all'anno. Questa classificazione è rappresentata come stringa nella colonna income con valori <=50K o >50k.

from pyspark.sql.types import DoubleType, StringType, StructType, StructField

schema = StructType([
  StructField("age", DoubleType(), False),
  StructField("workclass", StringType(), False),
  StructField("fnlwgt", DoubleType(), False),
  StructField("education", StringType(), False),
  StructField("education_num", DoubleType(), False),
  StructField("marital_status", StringType(), False),
  StructField("occupation", StringType(), False),
  StructField("relationship", StringType(), False),
  StructField("race", StringType(), False),
  StructField("sex", StringType(), False),
  StructField("capital_gain", DoubleType(), False),
  StructField("capital_loss", DoubleType(), False),
  StructField("hours_per_week", DoubleType(), False),
  StructField("native_country", StringType(), False),
  StructField("income", StringType(), False)
])
input_df = spark.read.format("csv").schema(schema).load("/databricks-datasets/adult/adult.data")

Divisione allenamento/test

train_df, test_df = input_df.randomSplit([0.99, 0.01], seed=42)
display(train_df)

Formazione

Il comando seguente avvia un'esecuzione autoML. È necessario specificare la colonna che il modello deve prevedere nell'argomento target_col .
Al termine dell'esecuzione, puoi seguire il collegamento per il notebook di prova migliore e esaminare il codice di addestramento. Questo notebook include anche un tracciato dell'importanza delle funzionalità.

from databricks import automl
summary = automl.classify(train_df, target_col="income", timeout_minutes=30)

Il comando seguente visualizza informazioni sull'output autoML.

help(summary)

Inferenza

È possibile usare il modello sottoposto a training da AutoML per eseguire stime sui nuovi dati. Gli esempi seguenti illustrano come fare previsioni sui dati in dataframe pandas o registrare il modello come UDF (funzione definita dall'utente) Spark per la previsione sui dataframe Spark.

model_uri = summary.best_trial.model_path
# model_uri = "<model-uri-from-generated-notebook>"

pandas DataFrame

import mlflow

# Prepare test dataset
test_pdf = test_df.toPandas()
y_test = test_pdf["income"]
X_test = test_pdf.drop("income", axis=1)

# Run inference using the best model
model = mlflow.pyfunc.load_model(model_uri)
predictions = model.predict(X_test)
test_pdf["income_predicted"] = predictions
display(test_pdf)

Spark DataFrame

predict_udf = mlflow.pyfunc.spark_udf(spark, model_uri=model_uri, result_type="string")
display(test_df.withColumn("income_predicted", predict_udf()))

Test

Usare il modello finale per eseguire stime sul set di test di controllo per stimare le prestazioni del modello in un'impostazione di produzione. Il diagramma mostra la suddivisione tra stime corrette e non corrette.

import sklearn.metrics

model = mlflow.sklearn.load_model(model_uri)
sklearn.metrics.plot_confusion_matrix(model, X_test, y_test)

Registrare e distribuire il modello

È possibile registrare e distribuire un modello sottoposto a training da AutoML come qualsiasi altro modello nel Registro modelli MLflow. Consulta Registrare, caricare e registrare modelli MLflow.

Risoluzione dei problemi relativi: No module named pandas.core.indexes.numeric

Quando si serve un modello addestrato automaticamente con Mosaic AI Model Serving, è possibile che venga visualizzato l'errore No module named pandas.core.indexes.numeric. Ciò si verifica quando la pandas versione usata da AutoML è diversa da quella nell'ambiente endpoint di gestione del modello. Per risolvere:

  1. Scaricare lo script add-pandas-dependency.py. Lo script modifica requirements.txt e conda.yaml per fissare pandas==1.5.3 al modello registrato.
  2. Modificare lo script per includere l'ID run_id dell'esecuzione di MLflow in cui è stato registrato il modello.
  3. Registrare nuovamente il modello.
  4. Distribuire la nuova versione del modello.

Notebook di esempio

Eseguire il training dei modelli di classificazione con l'API Python autoML

Prendi taccuino

Passaggi successivi

Informazioni di riferimento sulle API Python autoML.