Entraîner des modèles de classification avec l’API Python AutoML

Cet exemple de bloc-notes montre comment entraîner un modèle de classification sur Databricks à l’aide de l’API Python AutoML. À l'aide du jeu de données UCI Census Income, vous appelez automl.classify() pour prédire si un individu gagne plus de 50 000 $ par an, puis utilisez la meilleure expérimentation pour mener l'inférence sur les DataFrames pandas et Spark.

Requirements

Databricks Runtime pour Machine Learning.

Jeu de données sur le revenu du recensement

Ce jeu de données contient des données de recensement de la base de données de recensement de 1994. Chaque ligne représente un groupe d’individus. L’objectif est de déterminer si un groupe a un revenu de plus de 50 000 par an ou non. Cette classification est représentée sous forme de chaîne dans la colonne de revenu avec des valeurs <=50K ou >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")

Fractionnement entraînement/test

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

Entrainement

La commande suivante démarre une exécution AutoML. Vous devez fournir la colonne que le modèle doit prédire dans l’argument target_col .
Une fois l'exécution terminée, vous pouvez suivre le lien vers le meilleur carnet de notes d'essai pour examiner le code de formation. Ce bloc-notes inclut également un tracé de l'importance des caractéristiques.

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

La commande suivante affiche des informations sur la sortie AutoML.

help(summary)

Inférence

Vous pouvez utiliser le modèle entraîné par AutoML pour effectuer des prédictions sur de nouvelles données. Les exemples ci-dessous montrent comment effectuer des prédictions sur des données dans des DataFrames pandas ou inscrire le modèle en tant qu’UDF Spark pour la prédiction sur des DataFrames Spark.

model_uri = summary.best_trial.model_path
# model_uri = "<model-uri-from-generated-notebook>"

DataFrame pandas

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

Essai

Utilisez le modèle final pour effectuer des prédictions sur l'ensemble de test de validation afin d'estimer comment le modèle fonctionnerait en environnement de production. Le diagramme montre la répartition entre les prédictions correctes et incorrectes.

import sklearn.metrics

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

Inscrire et déployer le modèle

Vous pouvez inscrire et déployer un modèle entraîné par AutoML comme n’importe quel autre modèle dans le registre de modèles MLflow. Consultez journalisation, chargement et enregistrement des modèles MLflow.

Dépannage: No module named pandas.core.indexes.numeric

Lorsque vous servez un modèle AutoML entraîné avec Mosaic AI Model Serving, vous pouvez voir l’erreur No module named pandas.core.indexes.numeric. Cela se produit lorsque la pandas version utilisée par AutoML diffère de celle de l’environnement de point de terminaison de service du modèle. Pour résoudre les problèmes suivants :

  1. Téléchargez le script add-pandas-dependency.py. Le script modifie requirements.txt et conda.yaml pour épingler pandas==1.5.3 au modèle journalisé.
  2. Modifiez le script pour inclure le run_id de l'exécution MLflow où le modèle a été enregistré.
  3. Réinscrivez le modèle.
  4. Servez la nouvelle version du modèle.

Exemple de bloc-notes

Entraîner des modèles de classification avec l’API Python AutoML

Obtenir un ordinateur portable

Étapes suivantes

Informations de référence sur l’API Python AutoML.