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.