Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом примере записной книжки показано, как обучить модель классификации в 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, отличается от версии в среде конечной точки обслуживания модели. Чтобы устранить проблему, сделайте следующее:
-
Скачайте скрипт «add-pandas-dependency.py». Скрипт редактирует
requirements.txtиconda.yamlдля закрепленияpandas==1.5.3на зарегистрированной модели. - Измените скрипт, чтобы включить
run_idзапуск MLflow, в котором была зарегистрирована модель. - Повторно зарегистрируйте модель.
- Обслуживают новую версию модели.