Besorolási modellek betanítása az AutoML Python API-val

Ez a példajegyzetfüzet bemutatja, hogyan taníthat be besorolási modellt a Databricksen az AutoML Python API használatával. Az UCI Census Income adatkészlet használatával meghívja a automl.classify() függvényt, hogy előre jelezze, keres-e egy személy évente több mint 50 000 dollárt. Ezután a legjobb próbát használja fel, hogy következtetéseket vonjon le mind pandas, mind Spark DataFrame-ekkel.

Requirements

Databricks Runtime for Machine Learning.

Népszámlálási jövedelem adatállomány

Ez az adatkészlet az 1994-ben készült összeírási adatbázisból származó összeírási adatokat tartalmazza. Minden sor egy-egy személycsoportot jelöl. A cél annak meghatározása, hogy egy csoport éves bevétele meghaladja-e az 50 ezer forintot. Ez a besorolás sztringként jelenik meg a jövedelem oszlopban értékekkel <=50K vagy >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")

Betanítás/tesztelés felosztása

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

Training

Az alábbi parancs elindít egy AutoML-futtatási parancsot. Meg kell adnia azt az oszlopot, amelyet a modellnek előre kell jeleznie az target_col argumentumban.
A futtatás befejezése után a legjobb próbaverziós jegyzetfüzetre mutató hivatkozást követve megvizsgálhatja a betanítási kódot. Ez a jegyzetfüzet egy funkció-fontossági diagramot is tartalmaz.

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

Az alábbi parancs az AutoML-kimenettel kapcsolatos információkat jeleníti meg.

help(summary)

Következtetés

Az AutoML által betanított modell használatával előrejelzéseket készíthet az új adatokról. Az alábbi példák bemutatják, hogyan készíthet előrejelzéseket a pandas DataFrame-ekben lévő adatokról, vagy hogyan regisztrálhatja a modellt Spark UDF-ként a Spark DataFrame-eken való előrejelzéshez.

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

Az utolsó modell használatával előrejelzéseket készíthet a visszatartottsági tesztkészletről, hogy megbecsülje, hogyan teljesít a modell egy éles környezetben. A diagram a helyes és helytelen előrejelzések lebontását mutatja be.

import sklearn.metrics

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

A modell regisztrálása és üzembe helyezése

Regisztrálhat és üzembe helyezhet egy AutoML által betanított modellt, mint bármely más modellt az MLflow Modellregisztrációs adatbázisában. Lásd: MLflow-modellek naplózása, betöltése és regisztrálása.

Hibaelhárítás: No module named pandas.core.indexes.numeric

Ha AutoML-betanított modellt szolgál ki a Model Service szolgáltatással, a hiba No module named pandas.core.indexes.numericjelenhet meg. Ez akkor fordul elő, ha az pandas AutoML által használt verzió eltér a végpontkörnyezetet kiszolgáló modell verziójától. A probléma megoldása:

  1. Töltse le a add-pandas-dependency.py szkriptet. A szkript szerkeszti a requirements.txt és conda.yaml elemeket a naplózott modell számára, hogy rögzítse a pandas==1.5.3.
  2. Szerkessze a szkriptet annak az MLflow-futtatásnak a run_id beillesztéséhez, ahol a modellt naplózták.
  3. Regisztrálja újra a modellt.
  4. Az új modellverzió kiszolgálása.

Példajegyzetfüzet

Besorolási modellek betanítása az AutoML Python API-val

Jegyzetfüzet lekérése

Következő lépések

AutoML Python API-referencia.