Aller au contenu principal

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

Ouvrir dans Databricks

Ce Notebook d'exemple montre comment entraîner un modèle de classification sur Databricks à l'aide de l'API Python AutoML. À l'aide du dataset UCI Census Income, vous appelez automl.classify() pour prédire si un individu gagne plus de 50 000 $ par an, puis utilisez la meilleure version pour exécuter l'inférence sur les DataFrames pandas et Spark.

Exigences

Databricks Runtime for Machine Learning.

Dataset de revenus du Census

Ce dataset 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 de caractères dans la colonne income avec les valeurs <=50K ou >50k.

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

Division entraînement/test

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

Formation

La commande suivante start une exécution AutoML. Vous devez fournir la colonne que le modèle doit prédire dans l'argument target_col.
Lorsque l’exécution est terminée, vous pouvez suivre le link vers le meilleur notebook d’essai pour examiner le code d’entraînement. Ce notebook inclut également un graphique d'importance des fonctionnalités.

Python
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.

Python
help(summary)

Inférence

Vous pouvez utiliser le modèle entraîné par AutoML pour faire des prédictions sur de nouvelles données. Les exemples ci-dessous montrent comment faire des prédictions sur les données dans des DataFrames pandas, ou enregistrer le modèle en tant qu'UDF Spark pour des prédictions sur des DataFrames Spark.

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

DataFrame pandas

Python
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

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

Test

Utilisez le modèle final pour faire des prédictions sur l’ensemble de test de validation afin d’estimer les performances du modèle dans un environnement de production. Le diagramme montre la répartition entre les prédictions correctes et incorrectes.

Python
import sklearn.metrics

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

Enregistrer et déployer le modèle

Vous pouvez enregistrer et déployer un modèle entraîné par AutoML comme n'importe quel autre modèle dans le MLflow Model Registry. Découvrez comment consigner, charger et enregistrer les modèles MLflow.

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

Lors du déploiement d’un modèle entraîné par AutoML avec Model Serving, vous pouvez voir l’erreur No module named pandas.core.indexes.numeric. Cela se produit lorsque la version pandas utilisée par AutoML diffère de celle de l'environnement de l'Endpoint de déploiement de modèles. Pour résoudre :

  1. Download the script add-pandas-dependency.py. Le script modifie requirements.txt et conda.yaml pour que le modèle enregistré pin pandas==1.5.3.
  2. Modifiez le script pour inclure le run_id du run MLflow où le modèle a été enregistré.
  3. Réenregistrez le modèle.
  4. Servez la nouvelle version du modèle.

Exemple de Notebook

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

Étapes suivantes

Référence de l'API Python AutoML.