Aller au contenu principal

Entraîner des modèles de régression avec l'API AutoML Python

Ouvrir dans Databricks

Ce Notebook d’exemple montre comment entraîner un modèle de régression sur Databricks à l’aide de l’API Python d’AutoML. En utilisant le dataset du logement en Californie, vous appelez automl.regress() pour prédire la valeur médiane des maisons, puis utilisez le meilleur essai pour exécuter l'inférence sur un jeu de tests réservé.

Exigences

Databricks Runtime for Machine Learning 8.3 ou version ultérieure.

California housing dataset

Ce dataset a été dérivé du recensement américain de 1990, en utilisant une ligne par groupe de blocs de recensement. La variable cible est la valeur médiane des maisons pour les districts de Californie.

Python
import sklearn
input_pdf = sklearn.datasets.fetch_california_housing(as_frame=True)
display(input_pdf.frame)

Division entraînement/test

Python
from sklearn.model_selection import train_test_split

train_pdf, test_pdf = train_test_split(input_pdf.frame, test_size=0.01, random_state=42)
display(train_pdf)

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.regress(train_pdf, target_col="MedHouseVal", timeout_minutes=30)

La commande suivante affiche des informations sur la sortie AutoML.

Python
help(summary)

Itérer sur le modèle

  • Explorez les notebooks et les expérimentations liés ci-dessus.
  • Si les métriques du meilleur notebook d'essai sont bonnes, passez directement à la section d'inférence.
  • Si vous souhaitez améliorer le modèle généré par le meilleur essai :
    • Allez au notebook avec le meilleur essai et clonez-le.
    • Modifiez le Notebook selon les besoins pour améliorer le modèle. Par exemple, vous pouvez essayer différents hyperparamètres.
    • Lorsque vous êtes satisfait du modèle, notez l'URI où est enregistré l'artefact du modèle entraîné. Attribuez cet URI à la variable model_uri dans la commande 12.

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.

DataFrame pandas

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

# Prepare test dataset
y_test = test_pdf["MedHouseVal"]
X_test = test_pdf.drop("MedHouseVal", axis=1)

# Run inference using the best model
model = mlflow.pyfunc.load_model(model_uri)
predictions = model.predict(X_test)
test_pdf["MedHouseVal_predicted"] = predictions
display(test_pdf)

Spark DataFrame

Python
# Prepare the test dataset
test_df = spark.createDataFrame(test_pdf)
predict_udf = mlflow.pyfunc.spark_udf(spark, model_uri=model_uri)
display(test_df.withColumn("MedHouseVal_predicted", predict_udf()))

Test

Utilisez le modèle final pour réaliser des prédictions sur l'ensemble de test de validation afin d'estimer les performances du modèle en production.

Python
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Prepare the dataset
y_pred = test_pdf["MedHouseVal_predicted"]
test = pd.DataFrame({"Predicted":y_pred,"Actual":y_test})
test = test.reset_index()
test = test.drop(["index"], axis=1)

# plot graphs
fig= plt.figure(figsize=(16,8))
plt.plot(test[:50])
plt.legend(["Actual", "Predicted"])
sns.jointplot(x="Actual", y="Predicted", data=test, kind="reg");

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 régression avec l'API Python d'AutoML

Étapes suivantes

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