使用 AutoML Python API 训练回归模型

此示例笔记本演示如何使用 AutoML Python API 在 Databricks 上训练回归模型。 使用加州住房数据集,调用 automl.regress() 预测房屋中值价格,然后使用最佳实验结果对保留的测试集运行推理。

要求

机器学习 8.3 或更高版本的 Databricks Runtime。

加州住房数据集

此数据集源自美国1990年的人口普查,每个数据行对应一个人口普查街区群。 目标变量是加州地区的房屋中值。

import sklearn
input_pdf = sklearn.datasets.fetch_california_housing(as_frame=True)
display(input_pdf.frame)

训练/测试拆分

from sklearn.model_selection import train_test_split

train_pdf, test_pdf = train_test_split(input_pdf.frame, test_size=0.01, random_state=42)
display(train_pdf)

Training

以下命令启动 AutoML 运行。 您必须在 target_col 参数中提供模型应预测的列。
运行完成后,可以按照指向最佳试用笔记本的链接来检查训练代码。 此笔记本还包括特征重要性图。

from databricks import automl
summary = automl.regress(train_pdf, target_col="MedHouseVal", timeout_minutes=30)

以下命令显示有关 AutoML 输出的信息。

help(summary)

对模型进行迭代

  • 浏览上面链接的笔记本和试验。
  • 如果最佳试用笔记本的指标看起来不错,请直接跳到推理部分。
  • 如果要改进由最佳试用版生成的模型:
    • 转到包含最佳试验结果的笔记本并克隆它。
    • 根据需要编辑笔记本以改进模型。 例如,可以尝试不同的超参数。
    • 如果对模型感到满意,请记下记录已训练模型的工件的 URI。 将此 URI model_uri 分配给 Cmd 12 中的变量。

推断

可以使用 AutoML 训练的模型对新数据进行预测。 以下示例演示如何对 pandas DataFrame 中的数据进行预测,或将模型注册为 Spark UDF,以便对 Spark 数据帧进行预测。

pandas 数据框架 (DataFrame)

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

# Prepare test dataset
y_test = test_pdf["MedHouseVal"]
X_test = test_pdf.drop("MedHouseVal", axis=1)

# Run inference using the best model
model = mlflow.pyfunc.load_model(model_uri)
predictions = model.predict(X_test)
test_pdf["MedHouseVal_predicted"] = predictions
display(test_pdf)

Spark 数据帧

# Prepare the test dataset
test_df = spark.createDataFrame(test_pdf)
predict_udf = mlflow.pyfunc.spark_udf(spark, model_uri=model_uri)
display(test_df.withColumn("MedHouseVal_predicted", predict_udf()))

测试

使用最终模型对留出测试集进行预测,以估算模型在生产环境中的表现如何。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Prepare the dataset
y_pred = test_pdf["MedHouseVal_predicted"]
test = pd.DataFrame({"Predicted":y_pred,"Actual":y_test})
test = test.reset_index()
test = test.drop(["index"], axis=1)

# plot graphs
fig= plt.figure(figsize=(16,8))
plt.plot(test[:50])
plt.legend(["Actual", "Predicted"])
sns.jointplot(x="Actual", y="Predicted", data=test, kind="reg");

注册并部署模型

可以像 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 参考