AutoML Python API를 사용하여 분류 모델 학습

이 예제 Notebook에서는 AutoML Python API를 사용하여 Databricks에서 분류 모델을 학습하는 방법을 보여 줍니다. UCI 인구 조사 소득 데이터 세트를 automl.classify() 사용하여 개인이 연간 $50K 이상을 벌고 있는지 여부를 예측한 다음, 최상의 평가판을 사용하여 pandas 및 Spark DataFrames 둘 다에서 유추를 실행합니다.

Requirements

Databricks 머신 러닝용 런타임.

인구 조사 소득 데이터 세트

이 데이터 세트는 1994년 인구 조사 데이터베이스의 인구 조사 데이터를 포함합니다. 각 행은 개별 그룹을 나타냅니다. 목표는 그룹이 연간 50k 이상의 소득을 가지고 있는지 여부를 결정하는 것입니다. 이 분류는 값 또는 <=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)

훈련

다음 명령은 AutoML 실행을 시작합니다. 인수 target_col에서 모델이 예측해야 하는 열을 제공해야 합니다.
실행이 완료되면 최상의 평가판 전자 필기장 링크를 따라 학습 코드를 검사할 수 있습니다. 이 노트북에는 특징 중요도 그래프도 포함되어 있습니다.

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

다음 명령은 AutoML 출력에 대한 정보를 표시합니다.

help(summary)

유추

AutoML에서 학습된 모델을 사용하여 새 데이터에 대한 예측을 수행할 수 있습니다. 아래 예제에서는 pandas DataFrames의 데이터를 예측하거나 Spark DataFrames에 대한 예측을 위해 모델을 Spark UDF로 등록하는 방법을 보여 줍니다.

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

테스트

최종 모델을 사용하여 홀드아웃 테스트 집합을 예측하여 프로덕션 설정에서 모델이 수행되는 방식을 예측합니다. 다이어그램은 올바른 예측과 잘못된 예측 간의 분석을 보여 줍니다.

import sklearn.metrics

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

모델 등록 및 배포

MLflow 모델 레지스트리의 다른 모델과 마찬가지로 AutoML에서 학습된 모델을 등록하고 배포할 수 있습니다. 로그, 로드 및 MLflow 모델 등록을 참조하세요.

문제 해결: No module named pandas.core.indexes.numeric

Mosaic AI 모델 서비스로 AutoML 학습 모델을 제공하는 경우 오류가 No module named pandas.core.indexes.numeric표시될 수 있습니다. 이 문제는 AutoML에서 pandas 사용하는 버전이 엔드포인트 환경을 제공하는 모델의 버전과 다를 때 발생합니다. 해결하려면:

  1. add-pandas-dependency.py 스크립트를 다운로드합니다. 스크립트는 로깅된 모델의 requirements.txtconda.yaml를 편집하여 pandas==1.5.3를 고정합니다.
  2. 모델이 기록된 MLflow 실행을 포함하도록 스크립트를 run_id 편집합니다.
  3. 모델을 다시 등록합니다.
  4. 새 모델 버전을 서비스합니다.

예제 노트

AutoML Python API를 사용하여 분류 모델 학습

Notebook 가져오기

다음 단계

AutoML Python API 참조입니다.