使用 AutoML Python API 將分類模型定型

這本範例筆記本展示了如何使用 AutoML Python API 在 Databricks 上訓練分類模型。 利用 UCI 人口普查收入資料集,你呼叫 automl.classify() 來預測個人年收入是否超過 5 萬美元,然後使用最佳試驗在 pandas 和 Spark DataFrames 上進行推論。

需求

Databricks 機器學習執行環境

人口普查收入資料集

此資料集包含來自1994年人口普查資料庫的資料。 每一排代表一群個體。 目標是判斷一個團體的年收入是否超過5萬美元。 此分類以 收入 欄中的字串表示,值 <=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 UDF 以在 Spark DataFrames 上進行預測。

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 資料框

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。 當 pandas AutoML 使用的版本與服務端點環境的模型版本不同時,就會發生這種情況。 解決方法:

  1. 下載 add-pandas-dependency.py 腳本。 腳本會編輯requirements.txtconda.yaml以釘選已記錄的pandas==1.5.3模型。
  2. 編輯腳本,加入記錄模型的 MLflow 執行的 run_idID。
  3. 重新註冊模型。
  4. 發布新版本模式。

範例筆記本

使用 AutoML Python API 將分類模型定型

取得筆記本

下一步

AutoML Python API 參考