Treinar modelos de regressão com a API AutoML Python

Este notebook de exemplo mostra como treinar um modelo de regressão no Databricks usando a API de Python AutoML. Usando o conjunto de dados de habitação da Califórnia, você chama automl.regress() para prever o valor médio da casa e, em seguida, usa a melhor tentativa para realizar a inferência em um conjunto de testes retido.

Requirements

Databricks Runtime para Machine Learning 8.3 ou superior.

Conjunto de dados de habitação da Califórnia

Esse conjunto de dados foi derivado do censo dos EUA de 1990, usando uma linha por grupo de blocos censitários. A variável de destino é o valor médio da casa para os distritos da Califórnia.

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

Divisão de treinamento/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 a seguir inicia uma execução de AutoML. Você deve fornecer a coluna que o modelo deve prever no target_col argumento.
Quando a execução for concluída, você poderá seguir o link para o melhor notebook de experimento para examinar o código de treinamento. Este notebook também inclui um gráfico de importância das características.

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

O comando a seguir exibe informações sobre a saída do AutoML.

help(summary)

Iterar no modelo

  • Explore os blocos de anotações e experimentos vinculados acima.
  • Se as métricas para o melhor notebook de teste aparentarem boas, pule diretamente para a seção de inferência.
  • Se você quiser melhorar o modelo gerado pelo melhor teste:
    • Vá para o bloco de anotações com a melhor avaliação e clone-o.
    • Edite o bloco de anotações conforme necessário para melhorar o modelo. Por exemplo, você pode tentar hiperparâmetros diferentes.
    • Quando estiver satisfeito com o modelo, anote o URI onde o artefato do modelo treinado está registrado. Atribua esse URI à model_uri variável no Cmd 12.

Inferência

Você pode usar o modelo treinado pelo AutoML para fazer previsões sobre novos dados. Os exemplos a seguir demonstram como fazer previsões sobre dados nos DataFrames do pandas ou registrar o modelo como uma UDF do Spark para previsão nos Spark DataFrames.

DataFrame do 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)

DataFrame Spark

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

Teste

Use o modelo final para fazer previsões no conjunto de testes de controle para estimar como o modelo seria executado em uma configuração 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");

Registrar e implantar o modelo

Você pode registrar e implantar um modelo treinado pelo AutoML como qualquer outro modelo no Registro de Modelo do MLflow. Consulte Logar, carregar e registrar modelos de MLflow.

Solucionando problemas: No module named pandas.core.indexes.numeric

Ao servir um modelo treinado por AutoML com o Model Serving, você poderá ver o erro No module named pandas.core.indexes.numeric. Isso acontece quando a pandas versão usada pelo AutoML é diferente daquela no ambiente de endpoint de serviço do modelo. Para resolver esse erro:

  1. Baixe o script add-pandas-dependency.py. O script edita requirements.txt e conda.yaml no modelo registrado para fixar pandas==1.5.3.
  2. Edite o script para incluir a execução do MLflow run_id onde o modelo foi registrado.
  3. Registre novamente o modelo.
  4. Serve a nova versão do modelo.

Caderno de exemplo

Treinar modelos de regressão com

Obter notebook

Próximas etapas

Referência da API Python do AutoML.