Databricks AutoML

重要

此功能目前以公共预览版提供。

Databricks AutoML 可帮助你自动将机器学习应用于数据集。 它为模型训练准备数据集,然后执行并记录一组试验,从而创建、优化和评估多个模型。 它会显示结果,并提供一个 Python 笔记本,里面有每个试验运行的源代码,使你可查看、重现和修改代码。 AutoML 还会计算数据集的汇总统计信息,并将此信息保存在稍后可查看的笔记本中。

AutoML 自动在群集的工作器节点之间分配超参数优化试用。

每个模型都是从开源组件构造的,可轻松对其进行编辑并将其集成到机器学习管道中。 可以使用 Databricks AutoML 解决回归、分类和预测问题。 它基于scikit-learn、xgboostLightGBM包中的算法评估模型。

可以使用 UIPython API 运行 AutoML。

要求

  • Databricks Runtime 8.3 ML 或更高版本。
  • 对于时序预测,Databricks Runtime 10.0 ML或以上。
  • 在群集上只能安装 Databricks Runtime ML 运行时随附的库,而不能安装其他库。

AutoML 算法

Databricks AutoML 基于以下算法创建和评估模型:

对大型数据集采样

注意

采样不适用于预测问题。

AutoML 在群集的工作器节点之间分配超参数优化试验,而每个模型在单个工作器节点上进行训练。 对于 Databricks Runtime 9.1 LTS ML,AutoML 会自动估计加载和训练数据集所需的内存,并在必要时对数据集采样。 采样分数不取决于群集的节点类型或每个节点上的内存量。 采样数据集用于模型训练。

对于分类问题,AutoML 使用 PySpark sampleBysampleBy进行分层采样,以保留目标标签分布。

对于回归问题,AutoML 使用 PySpark samplesample

语义类型检测

注意

语义类型检测不适用于预测问题。

对于 Databricks Runtime 9.1 LTS ML及以上版本,AutoML 尝试检测列的语义类型是否不同于表架构中的 Spark 或 pandas 数据类型。 AutoML 将这些列视为检测到的语义类型。 这些检测是尽力而为的,在某些情况下可能会错过语义类型的存在。 还可以手动设置列的语义类型,或告知 AutoML 不要使用批注 将语义类型 检测应用于列

具体而言,AutoML 进行以下调整:

  • 表示日期或时间戳数据的字符串和整数列被视为时间戳类型。
  • 表示数值数据的字符串列被视为数值类型。

对于 Databricks Runtime 10.1 ML及以上,AutoML 也进行以下调整:

  • 包含分类标识符的数字列被视为分类特征。
  • 包含英语文本的字符串列被视为文本特征。

语义类型批注

使用Databricks Runtime 10.1 ML,可以通过在列上放置语义类型批注来手动控制分配的语义类型。 若要手动将列的语义类型批注为 <column_name><semantic_type> ,请使用以下语法:

metadata_dict = df.schema["<column_name>"].metadata
metadata_dict["spark.contentAnnotation.semanticType"] = "<semantic_type>"
df = df.withMetadata("<column_name>", metadata_dict)

<semantic_type> 可以是下列项之一:

  • categorical:列包含分类 (值,例如,应视为数据) 。
  • numeric:列包含数值 (例如,可以解析为数字的字符串) 。
  • datetime:列包含时间戳值 (字符串、数字或日期值,这些值可以转换为时间戳) 。
  • text:字符串列包含英语文本。

若要对列禁用语义类型检测,请使用特殊关键字注释 native

AutoML UI

AutoML UI 可逐步引导你完成基于数据集训练模型的过程。 若要访问 UI,请执行以下操作:

  1. 在左侧边栏顶部的角色切换器中,选择“机器学习”。

  2. 在侧栏中,单击"创建AutoML"。

    还可以从“试验”页创建新的 AutoML 试验。

    此时会显示“配置 AutoML 试验”页。 在此页上,指定数据集、问题类型、要预测的目标或标签列、要用于评估试验运行并为其评分的指标,以及停止条件,来配置 AutoML 过程。

在 UI 中设置分类或回归问题

  1. 在"计算"字段中,选择运行 Databricks Runtime 8.3 或ML群集。
  2. 在“ML 问题类型”下拉菜单中,选择“回归”或“分类” 。 如果你正在尝试预测每个观测项的连续数字值(例如年度收入),请选择“回归”。 如果你正在尝试将每个观测项分配给一组离散类中的一个(例如良好信用风险或不良信用风险),请选择“分类”。
  3. 在"数据集"下,单击"浏览"。 此时会显示一个对话框,其中列出了可用的数据库和表。 导航到要使用的表,然后单击“选择”。 此时会显示表架构。
  4. 单击“预测目标”字段。 此时会显示一个下拉列表,其中列出了架构中显示的列。 选择希望模型预测的列。
  5. “试验名称”字段显示默认名称。 若要更改该名称,请在字段中键入新名称。
  6. 可以在“高级配置(可选)”下指定其他配置选项。
    • 评估指标是用来为运行评分的主要指标
    • 可以编辑默认的停止条件。 默认情况下,试验会在 60 分钟后或者在完成 200 次运行后(以先到者为准)停止。
    • 在“数据目录”字段中,可以输入一个 DBFS 位置,用于保存在运行 AutoML 过程中生成的笔记本。 如果将该字段留空,则笔记本将保存为 MLflow 项目

在 UI 中设置预测问题

  1. 在"计算"字段中,选择运行 Databricks Runtime 10.0 或ML群集。
  2. "ML类型"下拉菜单中,选择"预测"。
  3. 在"数据集"下,单击"浏览"。 此时会显示一个对话框,其中列出了可用的数据库和表。 导航到要使用的表,然后单击“选择”。 此时会显示表架构。
  4. 单击“预测目标”字段。 此时会显示一个下拉列表,其中列出了架构中显示的列。 选择希望模型预测的列。
  5. 单击"时间 列" 字段。 将显示一个下拉列表,其中显示类型为 或 的 timestamp 数据集列 date 。 选择包含时序时间段的列。
  6. 对于多系列预测,请从 (标识符) 选择标识各个时序的列。 AutoML 按这些列将数据分组为不同的时序,并单独训练每个序列的模型。 如果将此字段留空,AutoML 将假定数据集包含单个时序。
  7. "预测范围和频率 "字段中,指定 AutoML 应计算预测值的未来时间段数。 在左侧框中,输入要预测的周期的整数数。 在右侧框中,选择单元。
  8. “试验名称”字段显示默认名称。 若要更改该名称,请在字段中键入新名称。
  9. 可以在“高级配置(可选)”下指定其他配置选项。
    • 评估指标是用来为运行评分的主要指标
    • 可以编辑默认停止条件。 默认情况下,试验在 120 分钟后停止。
    • 在“数据目录”字段中,可以输入一个 DBFS 位置,用于保存在运行 AutoML 过程中生成的笔记本。 如果将该字段留空,则笔记本将保存为 MLflow 项目

运行试验并监视结果

若要启动 AutoML 试验,请单击"启动 AutoML"。 试验随即开始运行,此时会显示 AutoML 训练页。 若要刷新运行表,请单击

在此页中,可以:

  • 随时停止试验。
  • 打开数据探索笔记本。
  • 监视运行。
  • 导航到任何运行的运行页。

使用 Databricks Runtime 10.1 ML及以上版本时,AutoML 会显示有关数据集潜在问题的警报,例如不支持的列类型或高基数列。

注意

Databricks 会尽力指示潜在的错误或问题。 但是,这可能并不全面,并且可能无法捕获可能正在搜索的问题或错误。 请确保也进行自己的评审。

若要查看数据集的任何警报,请单击训练页上的"警报"选项卡,或在试验完成后的试验页上单击。

AutoML 警报

试验完成后,可以:

  • 使用 MLflow 注册和部署某个模型。
  • 单击“编辑最佳模型”以查看和编辑创建了最佳模型的笔记本。
  • 打开数据探索笔记本。
  • 搜索、筛选运行表中的运行以及对其进行排序。
  • 查看任一运行的详细信息:
    • 若要打开包含试用版运行的源代码的笔记本,请单击"源 " 列。
    • 若要查看包含试用运行详细信息的运行页,请单击"开始时间 " 列。
    • 若要查看有关创建的模型的信息,包括用于进行预测的代码片段,请单击"模型 " 列。

以后若要返回到此 AutoML 试验,可在“试验”页上的表中找到它。

通过 AutoML UI 注册和部署模型

  1. 单击要注册的模型的“模型”列中的链接。 运行完成后,最佳模型(基于主要指标)将显示在最前面的行中。

    将显示创建了该模型的运行的运行页的项目部分。

  2. 单击 按钮,在模型 注册表 中注册模型

  3. 单击 侧栏中 "模型"图标"模型",导航到"模型注册表"。

  4. 单击模型表中你的模型名称。 此时会显示已注册的模型页。 在此页中,可为模型提供服务

AutoML Python API

  1. 创建一个笔记本并将其附加到运行 Databricks Runtime 8.3 ML 或更高版本的群集。

  2. 从现有数据源加载 Spark 或 Pandas 数据帧,或者将数据文件上传到 DBFS 并将数据加载到笔记本中。

    df = spark.read.parquet("<folder-path>")
    
  3. 若要启动 AutoML 运行,请将数据帧传递给 AutoML。 有关详细信息 ,请参阅 API 规范。

  4. AutoML 运行开始时,控制台中会显示 MLflow 试验 URL。 使用此 URL 可以监视运行进度。 刷新 MLflow 试验查看已完成的试运行。

  5. AutoML 运行完成后:

    • 使用输出摘要中的链接导航到 MLflow 试验或导航到生成最佳结果的笔记本。
    • 使用数据探索笔记本的链接可以深入了解传递给 AutoML 的数据。 还可以将此笔记本附加到同一群集,然后重新运行此笔记本以重现结果或执行其他数据分析。
    • 使用 AutoML 调用返回的摘要对象来探索有关试验的更多详细信息或加载给定试运行训练的模型。 有关详细信息,请参阅 API 文档
    • 克隆试运行生成的任何笔记本,并通过将其附加到同一群集来重新运行该笔记本,以重现结果。 还可以进行必要的编辑,然后重新运行该笔记本以训练其他模型并将其记录到同一个试验中。

Python API 规范

Python API 提供用于启动分类和回归 AutoML 运行的函数。 每个函数调用将训练一组模型,并为每个模型生成一个试运行笔记本。

分类

databricks.automl.classify(
  dataset: Union[pyspark.DataFrame, pandas.DataFrame],
  *,
  target_col: str,
  primary_metric: Optional[str],
  data_dir: Optional[str],
  timeout_minutes: Optional[int],
  max_trials: Optional[int]
) -> AutoMLSummary

回归

databricks.automl.regress(
  dataset: Union[pyspark.DataFrame, pandas.DataFrame],
  *,
  target_col: str,
  primary_metric: Optional[str],
  data_dir: Optional[str],
  timeout_minutes: Optional[int],
  max_trials: Optional[int]
) -> AutoMLSummary

预测

databricks.automl.forecast(
  dataset: Union[pyspark.sql.dataframe.DataFrame, pandas.core.frame.DataFrame, pyspark.pandas.DataFrame],
  *,
  target_col: str,
  time_col: str,
  identity_col: Union[str, List[str], NoneType],
  horizon: int,
  frequency: int,
  data_dir: Union[str, NoneType],
  primary_metric: str,
  timeout_minutes: int
) -> AutoMLSummary

参数

分类和回归

字段名称 类型 说明
dataset pyspark.DataFrame pandas.DataFrame 包含训练特征和目标的输入数据帧。
primary_metric str 用于评估模型性能并为其排名的指标。 支持的回归指标:“r2”(默认)、“mae”、“rmse”、“mse”。支持的分类指标:“f1”(默认)、“log_loss”、“precision”、“accuracy”、“roc_auc”
target_col str 目标标签的列名。
data_dir str,格式为
dbfs:/<folder-name>
用于存储中间数据的 DBFS 路径。 此路径对驱动程序节点和工作器节点均可见。 如果为空,则 AutoML 会将中间数据保存为 MLflow 项目。
timeout_minutes int (可选) 等待 AutoML 试用完成的最大时间。 较长的超时时间允许 AutoML 运行更多试用版,并识别准确度更高的模型。

默认值:无 (没有时间限制)

最小值:5 分钟

如果超时太短,无法完成至少一次试用,则报告错误。
max_trials int (可选) 运行的最大试用次数。

默认值:20

如果timeout_minutes=None,AutoML 将运行最大试用次数。

预测

字段名称 类型 说明
dataset pyspark.DataFrame pandas.DataFrame 包含训练特征和目标的输入数据帧。
primary_metric str 用于评估模型性能并为其排名的指标。 支持的指标:"smape" (默认) "mse"、"rmse"、"metric"或"mdape"。
target_col str 目标标签的列名。
data_dir str,格式为
dbfs:/<folder-name>
用于存储中间数据的 DBFS 路径。 此路径对驱动程序节点和工作器节点均可见。 如果为空,则 AutoML 会将中间数据保存为 MLflow 项目。
timeout_minutes int (可选) 等待 AutoML 试用完成的最大时间。 较长的超时时间允许 AutoML 运行更多试用版,并识别准确度更高的模型。

默认值:无 (没有时间限制)

最小值:5 分钟

如果超时太短,无法完成至少一次试用,则报告错误。
max_trials int (可选) 运行的最大试用次数。

默认值:20

如果timeout_minutes=None,AutoML 将运行最大试用次数。
time_col str 用于预测的时间列的名称。
identity_col Union[str, list] (可选) 列 (列) ,用于标识多系列预测的时序。 AutoML 按这些列 (列) 预测的时间列。
frequency str 用于预测的时序的频率。 这是预期事件发生的时间段。 可能的值:

"W" (周)

"D" / "days" / "day"

"hours" / "hour" / "hr" / "h"

"m" / "minute" / "min" / "minutes" / "T"

"S" / "seconds" / "sec" / "second"
地平线 int 将来应返回预测的时间段数。 单位是时序频率。

返回

AutoMLSummary

AutoML 分类运行的摘要对象,用于描述每个试运行的指标、参数和其他详细信息。 还可以使用此对象加载特定试运行训练的模型。

属性 类型 说明
experiment mlflow.entities.Experiment MLflow 试验用于记录试运行。
trials List[TrialInfo] 一个列表,其中包含有关已运行的所有试运行的信息。
best_trial TrialInfo 产生了主要指标最佳加权评分的试运行的相关信息。
metric_distribution str 所有试运行中主要指标的加权评分的分布情况。

TrialInfo

每个试运行的摘要对象。

属性 类型 描述
notebook_path str 此试运行生成的笔记本在工作区中的路径。
notebook_url str 此试运行生成的笔记本的 URL。
mlflow_run_id str 与此试运行关联的 MLflow 运行 ID。
指标 Dict[str, float] 在此试运行的 MLflow 中记录的指标。
params Dict[str, str] 在为此试运行使用的 MLflow 中记录的参数。
model_path str 此试运行中训练的模型的 MLflow 项目 URL。
model_description str 模型的简短说明以及用于训练此模型的超参数。
duration str 训练持续时间,以分钟为单位。
preprocessors str 在训练模型之前运行的预处理器的说明。
evaluation_metric_score FLOAT 为验证数据集评估的主要指标的评分。
方法 说明
load_model() 加载在此试运行中生成的模型,记录为 MLflow 项目。

API 示例

请查看这些笔记本以开始使用 AutoML。

AutoML 分类示例笔记本

获取笔记本

AutoML 回归示例笔记本

获取笔记本

AutoML 预测示例笔记本

获取笔记本

databricks-automl-runtime

使用 Databricks Runtime 9.1 LTS ML 及以上版本时,AutoML 依赖于 包,该包包含 AutoML 之外有用的组件,还有助于简化 AutoML 训练生成的笔记本。 databricks-automl-runtime databricks-automl-runtimedatabricks-automl-runtime

限制

  • 仅报告以下特征类型:

    • 数字(ByteTypeShortTypeIntegerTypeLongTypeFloatTypeDoubleType
    • Boolean
    • 字符串 (分类文本或英语)
    • 时间戳(TimestampTypeDateType
  • 不支持上面未列出的功能类型。 例如,不支持映像。

  • 对于 Databricks Runtime 9.0 ML,AutoML 训练在单个节点上使用完整的训练数据集。 训练数据集必须适合单个工作节点的内存。 如果遇到了耗尽内存的问题,请尝试使用内存更多的工作器节点。 参阅创建群集

    或者,如果可能,请使用 Databricks Runtime 9.1 LTS ML 或ML,如果数据集太大,无法容纳单个工作节点的内存,AutoML 会自动对数据集采样。