Entraîner des modèles de classification avec l'API Python AutoML
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.
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
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.
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 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.
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()))
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.
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 :
- Download the script add-pandas-dependency.py. Le script modifie
requirements.txtetconda.yamlpour que le modèle enregistré pinpandas==1.5.3. - Modifiez le script pour inclure le
run_iddu run MLflow où le modèle a été enregistré. - Réenregistrez le modèle.
- Servez la nouvelle version du modèle.