Trainieren von Klassifizierungsmodellen mit der AutoML-Python-API

Dieses Beispielnotizbuch zeigt, wie Sie ein Klassifizierungsmodell für Databricks mithilfe der AutoML-Python-API trainieren. Mit dem UCI Census Income-Datensatz rufen Sie automl.classify() auf, um vorherzusagen, ob eine Einzelperson mehr als 50K pro Jahr verdient, und verwenden Sie dann den besten Versuch, um sowohl auf Pandas als auch auf Spark DataFrames Inferenz durchzuführen.

Requirements

Databricks Runtime für Machine Learning.

Datenset "Einkommen aus der Volkszählung"

Dieses Dataset enthält Statistische Daten aus der 1994-Zählungsdatenbank. Jede Zeile stellt eine Gruppe von Einzelpersonen dar. Ziel ist es, zu bestimmen, ob eine Gruppe ein Einkommen von über 50k pro Jahr hat oder nicht. Diese Klassifizierung wird als Zeichenfolge in der Spalte 'Einkommen' mit den Werten <=50K oder >50k dargestellt.

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

Zug-/Testteilung

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

Schulungen

Der folgende Befehl startet eine AutoML-Ausführung. Sie müssen die Spalte angeben, die das Modell im target_col Argument vorhersagen soll.
Wenn die Ausführung abgeschlossen ist, können Sie dem Link zum besten Testnotizbuch folgen, um den Schulungscode zu untersuchen. Dieses Notizbuch enthält auch ein Merkmalswichtigkeitsdiagramm.

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

Der folgende Befehl zeigt Informationen zur AutoML-Ausgabe an.

help(summary)

Schlussfolgerung

Sie können das von AutoML trainierte Modell verwenden, um Vorhersagen für neue Daten zu erstellen. Die folgenden Beispiele veranschaulichen, wie Sie Vorhersagen zu Daten in Pandas DataFrames erstellen oder das Modell als Spark UDF für die Vorhersage von Spark DataFrames registrieren.

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

Testen

Verwenden Sie das endgültige Modell, um Vorhersagen für den Holdout-Testdatensatz zu erstellen, um abzuschätzen, wie das Modell in einer Produktionsumgebung abschneiden würde. Das Diagramm zeigt die Aufschlüsselung zwischen korrekten und falschen Vorhersagen.

import sklearn.metrics

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

Registrieren und Bereitstellen des Modells

Sie können ein von AutoML trainiertes Modell wie jedes andere Modell in der MLflow-Modellregistrierung registrieren und bereitstellen. Weitere Informationen finden Sie unter Protokollieren, Laden und Registrieren von MLflow-Modellen.

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

Wenn Sie ein AutoML-trainiertes Modell mit Mosaik AI Model Serving bedienen, wird möglicherweise der Fehler No module named pandas.core.indexes.numericangezeigt. Dies geschieht, wenn die von AutoML verwendete pandas Version von der Version in der Modellbereitstellungsendpunktumgebung abweicht. Behebung:

  1. Laden Sie das skript add-pandas-dependency.py herunter. Das Skript bearbeitet requirements.txt und conda.yaml für das protokollierte Modell, um pandas==1.5.3 anzupinnen.
  2. Bearbeiten Sie das Skript, um die run_id der MLflow-Ausführung, in der das Modell protokolliert wurde, einzuschließen.
  3. Registrieren Sie das Modell erneut.
  4. Stellen Sie die neue Modellversion bereit.

Beispiel-Notebook

Trainieren von Klassifizierungsmodellen mit der AutoML-Python-API

Notebook abrufen

Nächste Schritte

AutoML Python-API-Referenz.