Treinar modelos de regressão com AutoML Python API

Este caderno de exemplo mostra como treinar um modelo de regressão em Databricks usando a API Python do AutoML. Usando o conjunto de dados de habitação da Califórnia, chama automl.regress() para prever o valor mediano das casas e depois usa a melhor tentativa para fazer inferência num conjunto de teste reservado.

Requisitos

Databricks Runtime para Machine Learning 8.3 ou superior.

Conjunto de dados habitacionais da Califórnia

Este conjunto de dados foi derivado do censo dos EUA de 1990, usando uma linha por grupo de blocos censitários. A variável-alvo é o valor mediano das casas para os distritos da Califórnia.

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

Divisão treino/teste

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)

Training

O comando seguinte inicia uma execução do AutoML. Deve fornecer, no argumento target_col, a coluna que o modelo deve prever.
Quando a corrida terminar, pode seguir o link para o melhor caderno de testes para examinar o código de treino. Este notebook inclui também um gráfico de importância de variáveis.

from databricks import automl
summary = automl.regress(train_pdf, target_col="MedHouseVal", timeout_minutes=30)

O comando seguinte apresenta informações sobre a saída do AutoML.

help(summary)

Iterar sobre o modelo

  • Explore os cadernos e experimentos acima mencionados.
  • Se as métricas para o melhor notebook de testes estiverem boas, salte diretamente para a secção de inferência.
  • Se quiser melhorar o modelo gerado pelo melhor ensaio:
    • Vai ao caderno com o melhor teste e clona-o.
    • Edite o caderno conforme necessário para melhorar o modelo. Por exemplo, podes experimentar diferentes hiperparâmetros.
    • Quando estiver satisfeito com o modelo, note o URI onde o artefacto do modelo treinado é registado. Atribui este URI à model_uri variável no Cmd 12.

Inferência

Pode usar o modelo treinado pelo AutoML para fazer previsões sobre novos dados. Os exemplos abaixo demonstram como fazer previsões sobre dados em DataFrames Pandas, ou registrar o modelo como um UDF Spark para previsão em DataFrames Spark.

Pandas DataFrame

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

Testar

Use o modelo final para fazer previsões sobre o conjunto de testes holdout e estimar como o modelo se comportaria num ambiente de produção.

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

Registar e implementar o modelo

Pode registar e implementar um modelo treinado por AutoML como qualquer outro modelo no MLflow Model Registry. Veja Log, load e registe modelos MLflow.

Resolução de Problemas: No module named pandas.core.indexes.numeric

Ao servir um modelo treinado em AutoML com o Mosaic AI Model Serving, pode ver o erro No module named pandas.core.indexes.numeric. Isto acontece quando a pandas versão usada pelo AutoML difere daquela no ambiente de endpoint de serviço do modelo. Para resolver:

  1. Faça o download do add-pandas-dependency.py script. O script edita requirements.txt e conda.yaml para fixar pandas==1.5.3 no modelo registado.
  2. Edite o script para incluir a run_id da execução do MLflow onde o modelo foi registado.
  3. Regista novamente o modelo.
  4. Sirva a nova versão do modelo.

Bloco de notas de exemplo

Treinar modelos de regressão com

Obter bloco de notas

Próximos passos

Referência da API Python do AutoML.