Обучение моделей классификации с помощью API Python AutoML

В этом примере записной книжки показано, как обучить модель классификации в Databricks с помощью API autoML Python. Используя набор данных UCI о доходах населения, вы используете automl.classify() для прогнозирования того, зарабатывает ли отдельный человек более $50K в год, затем используете лучший пробный запуск для выполнения вывода как в pandas, так и в DataFrame Spark.

Требования

Databricks Runtime для машинного обучения.

Набор данных о доходах переписи

Этот набор данных содержит данные переписи из базы данных переписи 1994 года. Каждая строка представляет группу отдельных лиц. Цель состоит в том, чтобы определить, имеет ли группа доход более 50 тысяч в год или нет. Эта классификация представлена в виде строки в столбце дохода со значениями <=50K или >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")

Разделение обучения и тестирования

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

Training

Следующая команда запускает процесс AutoML. Необходимо указать столбец, который модель должна прогнозировать в аргументе target_col .
По завершении выполнения можно перейти по ссылке на лучшую пробную тетрадь для изучения программного кода обучения. Эта записная книжка также содержит график важности признаков.

from databricks import automl
summary = automl.classify(train_df, target_col="income", timeout_minutes=30)

Следующая команда отображает сведения о выходных данных AutoML.

help(summary)

Вывод

Модель, обученную AutoML, можно использовать для прогнозирования новых данных. В приведенных ниже примерах показано, как выполнять прогнозирование на данных в DataFrames pandas или регистрировать модель в качестве UDF Spark для прогнозирования на DataFrames Spark.

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

DataFrame pandas

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

predict_udf = mlflow.pyfunc.spark_udf(spark, model_uri=model_uri, result_type="string")
display(test_df.withColumn("income_predicted", predict_udf()))

Проверочный

Используйте окончательную модель для прогнозирования на выделенном тестовом наборе, чтобы оценить, как модель будет работать в рабочей среде. На схеме показана разбивка между правильными и неправильными прогнозами.

import sklearn.metrics

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

Регистрация и развертывание модели

Вы можете зарегистрировать и развернуть модель, обученную autoML, как и любую другую модель в реестре моделей MLflow. См. журналирование, загрузку и регистрацию моделей MLflow.

Устранение неполадок: No module named pandas.core.indexes.numeric

При обслуживании обученной autoML-модели с помощью службы моделей может возникнуть ошибка No module named pandas.core.indexes.numeric. Это происходит, когда pandas версия, используемая AutoML, отличается от версии в среде конечной точки обслуживания модели. Чтобы устранить проблему, сделайте следующее:

  1. Скачайте скрипт «add-pandas-dependency.py». Скрипт редактирует requirements.txt и conda.yaml для закрепления pandas==1.5.3 на зарегистрированной модели.
  2. Измените скрипт, чтобы включить run_id запуск MLflow, в котором была зарегистрирована модель.
  3. Повторно зарегистрируйте модель.
  4. Обслуживают новую версию модели.

Пример записной книжки

Обучение моделей классификации с помощью API Python AutoML

Возьмите записную книжку

Следующие шаги

Справочник по API AutoML Python.