這本範例筆記本展示了如何使用 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 使用的版本與服務端點環境的模型版本不同時,就會發生這種情況。 解決方法:
-
下載 add-pandas-dependency.py 腳本。 腳本會編輯
requirements.txt和conda.yaml以釘選已記錄的pandas==1.5.3模型。 - 編輯腳本,加入記錄模型的 MLflow 執行的
run_idID。 - 重新註冊模型。
- 發布新版本模式。