Entraîner des modèles de régression avec l'API AutoML Python
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.
import sklearn
input_pdf = sklearn.datasets.fetch_california_housing(as_frame=True)
display(input_pdf.frame)
Division 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)
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.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é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_uridans 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
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()))
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.
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 :
- 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.