Classificatiemodellen trainen met De AutoML Python-API

In dit voorbeeldnotitieblok ziet u hoe u een classificatiemodel traint op Databricks met behulp van de AutoML-Python-API. Met behulp van de UCI Census Income-dataset roept u automl.classify() aan om te voorspellen of een persoon meer dan $ 50.000 per jaar verdient en vervolgens de beste proef gebruikt om inferentie uit te voeren op zowel pandas als Spark DataFrames.

Requirements

Databricks Runtime voor Machine Learning.

Gegevensset volkstellingsinkomen

Deze gegevensset bevat volkstellingsgegevens uit de volkstellingsdatabase van 1994. Elke rij vertegenwoordigt een groep personen. Het doel is om te bepalen of een groep een inkomen heeft van meer dan 50.000 per jaar of niet. Deze classificatie wordt weergegeven als een tekenreeks in de kolom inkomsten met waarden <=50K of >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")

Splitsing trainen/testen

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

Training

Met de volgende opdracht wordt een AutoML-uitvoering gestart. U moet de kolom opgeven die het model in het target_col argument moet voorspellen.
Wanneer de uitvoering is voltooid, kunt u de koppeling naar het beste proefnotitieblok volgen om de trainingscode te onderzoeken. Dit notebook bevat ook een plot voor de belangrijkheid van kenmerken.

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

Met de volgende opdracht wordt informatie weergegeven over de AutoML-uitvoer.

help(summary)

Conclusie

U kunt het model dat is getraind door AutoML gebruiken om voorspellingen te doen over nieuwe gegevens. In de onderstaande voorbeelden ziet u hoe u voorspellingen kunt doen over gegevens in pandas DataFrames of hoe u het model registreert als spark-UDF voor voorspelling op 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()))

Test

Gebruik het laatste model om voorspellingen te doen voor de holdouttest die is ingesteld om een schatting te maken van de prestaties van het model in een productie-instelling. In het diagram ziet u de uitsplitsing tussen de juiste en onjuiste voorspellingen.

import sklearn.metrics

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

Het model registreren en implementeren

U kunt een model registreren en implementeren dat is getraind door AutoML, net als elk ander model in het MLflow-modelregister. Zie MLflow-modellen voor logboeken, laden en registreren.

Probleemoplossing: No module named pandas.core.indexes.numeric

Wanneer u een met AutoML getraind model met Mosaic AI Model Serving bedient, ziet u mogelijk de fout No module named pandas.core.indexes.numeric. Dit gebeurt wanneer de pandas versie die wordt gebruikt door AutoML verschilt van de versie in het model dat eindpuntomgeving bedient. U lost dit als volgt op:

  1. Download het add-pandas-dependency.py script. Het script bewerkt requirements.txt en conda.yaml voor het vastgelegde model om pandas==1.5.3 vast te zetten.
  2. Bewerk het script om de run_id-identificator van de MLflow-run op te nemen waarin het model is vastgelegd.
  3. Registreer het model opnieuw.
  4. Beheer de nieuwe modelversie.

Voorbeeld van notebook

Classificatiemodellen trainen met De AutoML Python-API

Notitieblok ophalen

Volgende stappen

AutoML Python API-referentie.