Trénování klasifikačních modelů pomocí rozhraní Python API AutoML

Tento ukázkový poznámkový blok ukazuje, jak trénovat klasifikační model v Databricks pomocí rozhraní API Python AutoML. Pomocí datové sady Census Income UCI zavoláte automl.classify() , abyste předpověděli, jestli jednotlivec získá více než 50 tisíc dolarů za rok, a pak použijete nejlepší zkušební verzi ke spuštění odvozování v knihovnách pandas i Spark DataFrame.

Požadavky

Databricks Runtime pro strojové učení

Datová sada příjmů ze sčítání

Tato datová sada obsahuje data sčítání lidu z databáze sčítání lidu 1994. Každý řádek představuje skupinu jednotlivců. Cílem je určit, jestli skupina má příjem více než 50 tisíc za rok, nebo ne. Tato klasifikace je reprezentována jako řetězec ve sloupci příjmů s hodnotami <=50K nebo >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")

Rozdělení trénování/testování

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

Školení

Následující příkaz spustí spuštění AutoML. Je nutné zadat sloupec, který by model měl v argumentu předpovědět target_col .
Po dokončení spuštění můžete pomocí odkazu na nejlepší zkušební poznámkový blok prozkoumat trénovací kód. Tento poznámkový blok obsahuje také diagram důležitosti funkcí.

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

Následující příkaz zobrazí informace o výstupu AutoML.

help(summary)

Odvozování

Pomocí modelu, který autoML vytrénuje, můžete vytvářet předpovědi na nová data. Níže uvedené příklady ukazují, jak provádět předpovědi dat v datových rámcích pandas nebo registrovat model jako UDF Sparku pro predikce datových rámců Sparku.

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)

Datový rámec Sparku

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

Test

Pomocí finálního modelu proveďte předpovědi na vyřazené testovací sadě a odhadněte, jak by model fungoval v produkčním prostředí. Diagram znázorňuje rozpis mezi správnými a nesprávnými předpověďmi.

import sklearn.metrics

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

Registrace a nasazení modelu

Model natrénovaný autoML můžete zaregistrovat a nasadit stejně jako jakýkoli jiný model v registru modelů MLflow. Viz Zaznamenání, načtení a registrace modelů MLflow.

Řešení potíží: No module named pandas.core.indexes.numeric

Při poskytování modelu vytrénovaného autoML pomocí služby Model Serving se může zobrazit chyba No module named pandas.core.indexes.numeric. K tomu dochází v případě, že se pandas verze používaná službou AutoML liší od verze v prostředí koncového bodu obsluhy modelu. Řešení je následující:

  1. Stáhněte si skript add-pandas-dependency.py. Skript upraví requirements.txt a conda.yaml pro protokolovaný model, aby připnul pandas==1.5.3.
  2. Upravte skript tak, aby zahrnoval run_id běh MLflow, ve kterém byl model zaznamenán.
  3. Znovu zaregistrujte model.
  4. Obsluha nové verze modelu

Příklad notebooku

Trénování klasifikačních modelů pomocí rozhraní Python API AutoML

Získejte poznámkový blok

Další kroky

Referenční informace k rozhraní PYTHON API pro AutoML