Treinar modelos de classificação com AutoML Python API

Este caderno de exemplo mostra como treinar um modelo de classificação em Databricks usando a API Python do AutoML. Usando o conjunto de dados UCI Census Income, chama automl.classify() para prever se um indivíduo ganha mais de $50K por ano, e usa a melhor tentativa para fazer inferência tanto nos pandas como nos Spark DataFrames.

Requirements

Databricks Runtime para Aprendizagem Automática.

Conjunto de dados de rendimento do censo

Este conjunto de dados contém dados do censo da base de dados do censo de 1994. Cada linha representa um grupo de indivíduos. O objetivo é determinar se um grupo tem um rendimento superior a 50 mil por ano ou não. Esta classificação é representada como uma cadeia na coluna de rendimentos com valores <=50K ou >50k.

from pyspark.sql.types import DoubleType, StringType, StructType, StructField

schema = StructType([
  StructField("age", DoubleType(), False),
  StructField("workclass", StringType(), False),
  StructField("fnlwgt", DoubleType(), False),
  StructField("education", StringType(), False),
  StructField("education_num", DoubleType(), False),
  StructField("marital_status", StringType(), False),
  StructField("occupation", StringType(), False),
  StructField("relationship", StringType(), False),
  StructField("race", StringType(), False),
  StructField("sex", StringType(), False),
  StructField("capital_gain", DoubleType(), False),
  StructField("capital_loss", DoubleType(), False),
  StructField("hours_per_week", DoubleType(), False),
  StructField("native_country", StringType(), False),
  StructField("income", StringType(), False)
])
input_df = spark.read.format("csv").schema(schema).load("/databricks-datasets/adult/adult.data")

Divisão treino/teste

train_df, test_df = input_df.randomSplit([0.99, 0.01], seed=42)
display(train_df)

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.classify(train_df, target_col="income", timeout_minutes=30)

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

help(summary)

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.

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

Pandas DataFrame

import mlflow

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

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

Spark DataFrame

predict_udf = mlflow.pyfunc.spark_udf(spark, model_uri=model_uri, result_type="string")
display(test_df.withColumn("income_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. O diagrama mostra a divisão entre previsões corretas e incorretas.

import sklearn.metrics

model = mlflow.sklearn.load_model(model_uri)
sklearn.metrics.plot_confusion_matrix(model, X_test, y_test)

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 classificação com AutoML Python API

Obter portátil

Próximos passos

Referência da API Python do AutoML.