Träna klassificeringsmodeller med AutoML Python API

Den här exempelanteckningsboken visar hur du tränar en klassificeringsmodell på Databricks med hjälp av AutoML-Python-API:et. Med datamängden UCI Census Income anropar du automl.classify() för att förutsäga om en individ tjänar mer än 50 000 USD per år och sedan använder det bästa testet för att utföra inferens på både Pandas och Spark DataFrames.

Kravspecifikation

Databricks Runtime för maskininlärning.

Datauppsättning för folkräkningsintäkter

Den här datamängden innehåller censusdata från 1994 års folkräkningsdatabas. Varje rad representerar en grupp individer. Målet är att avgöra om en grupp har en inkomst på över 50 000 om året eller inte. Den här klassificeringen representeras som en sträng i inkomstkolumnen med värden <=50K eller >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")

Tränings-/testuppdelning

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

Utbildning

Följande kommando startar en AutoML-körning. Du måste ange den kolumn som modellen ska förutsäga i target_col argumentet.
När körningen är klar kan du följa länken till den bästa utvärderingsanteckningsboken för att undersöka träningskoden. Den här anteckningsboken innehåller också ett diagram över funktioners betydelse.

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

Följande kommando visar information om AutoML-utdata.

help(summary)

Slutsatsdragning

Du kan använda modellen som tränats av AutoML för att göra förutsägelser om nya data. Exemplen nedan visar hur du gör förutsägelser om data i Pandas DataFrames eller registrerar modellen som en Spark UDF för förutsägelse på Spark DataFrames.

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()))

Testa

Använd den slutliga modellen för att göra förutsägelser på holdout-testuppsättningen för att uppskatta hur modellen skulle prestera i en produktionsinställning. Diagrammet visar uppdelningen mellan korrekta och felaktiga förutsägelser.

import sklearn.metrics

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

Registrera och distribuera modellen

Du kan registrera och distribuera en modell som tränats av AutoML som vilken annan modell som helst i MLflow Model Registry. Se Logga, läsa in och registrera MLflow-modeller.

Felsökning: No module named pandas.core.indexes.numeric

När du betjänar en AutoML-tränad modell med Mosaic AI Model Serving kan du se felet No module named pandas.core.indexes.numeric. Detta inträffar när den pandas version som används av AutoML skiljer sig från den i modellen som betjänar slutpunktsmiljön. Så här löser du följande:

  1. Ladda ned add-pandas-dependency.py skriptet. Skriptet redigerar requirements.txt och conda.yaml för att fästa pandas==1.5.3 till den loggade modellen.
  2. Redigera skriptet så att det inkluderar run_id för den MLflow-körning där modellen registrerades.
  3. Registrera modellen igen.
  4. Hantera den nya modellversionen.

Exempelanteckningsbok

Träna klassificeringsmodeller med AutoML Python API

Hämta notebook

Nästa steg

AutoML Python API-referens.