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

Ce notebook d'exemple montre comment entraîner un modèle de régression sur Databricks à l’aide de l’API AutoML Python. À l’aide du jeu de données de logement californien, vous appelez automl.regress() pour prédire la valeur médiane de la maison, puis utilisez le meilleur essai pour réaliser une inférence sur un jeu de test réservé.

Exigences

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

Jeu de données sur le logement californien

Ce jeu de données a été dérivé du recensement américain de 1990, à l’aide d’une ligne par groupe de blocs de recensement. La variable cible est la valeur médiane de la maison pour les districts californiens.

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

Fractionnement entraînement/test

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)

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

La commande suivante affiche des informations sur la sortie AutoML.

help(summary)

Itérer sur le modèle

  • Explorez les notebooks et les expériences mentionnés ci-dessus.
  • Si les métriques du bloc-notes d’évaluation le mieux adapté sont correctes, passez directement à la section d’inférence.
  • Si vous souhaitez améliorer le modèle généré par la meilleure version d’évaluation :
    • Accédez au notebook ayant le meilleur essai et clonez-le.
    • Modifiez le bloc-notes si nécessaire 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ù l’artefact associé au modèle entraîné est enregistré. Affectez cet URI à la model_uri variable en Cmd 12.

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.

DataFrame pandas

model_uri = summary.best_trial.model_path
# model_uri = "<model-uri-from-generated-notebook>"
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

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

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.

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

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 régression avec

Obtenir un ordinateur portable

Étapes suivantes

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