AutoML 模型的数据拆分简介

本页面介绍三个数据集(训练、验证和测试)在训练 AutoML 模型时的使用方式,以及控制将数据拆分为用于 AutoML 模型的数据集的方式。

AutoML 如何使用数据拆分

根据训练数据的数据类型,AutoML 使用数据拆分的方式有所不同。

映像

对于图片数据集,AutoML 使用训练集来训练模型,使用验证集来验证模型在训练期间返回的结果。训练完成后,AutoML 使用测试集提供最终评估指标。

表格

对于表格模型,训练过程使用以下步骤:

  1. 模型试验

    训练集用于使用不同的预处理、架构和超参数选项组合来训练模型。这些模型在验证集上接受质量评估,这有助于探索其他选项组合。在并行调整阶段确定的最佳参数和架构用于训练两个集成学习模型,如下所述。

  2. 模型评估

    Vertex AI 会将训练和验证集用作训练数据来训练评估模型。Vertex AI 会使用测试集在此模型上生成最终模型评估指标。这是首次在过程中使用测试集。该方法可确保最终评估指标能公正地反映最终训练出的模型在生产环境中的表现。

  3. 应用模型

    使用训练集、验证集和测试集训练模型,最大化训练数据量。此模型是您用来请求预测的模型。

文本

对于文本数据集,训练集和验证集用于尝试不同的预处理、架构和超参数选项组合。这些试验会生成经过训练的模型,这些模型随后在验证集上接受质量评估,并用于指导探索更多选项组合。

当后续试验无法继续提升质量时,该版本的模型将被视为是经过训练的性能最佳的最终模型。接下来,Vertex AI 使用在并行微调阶段确定的参数和架构再训练两个模型:

  1. 使用您的训练集和验证集训练的模型。

    Vertex AI 会使用您的测试集在此模型上生成模型评估指标。这是首次在过程中使用测试集。该方法可确保最终评估指标能公正地反映最终训练出的模型在生产环境中的表现。

  2. 使用您的训练集、验证集和测试集训练的模型。

    此模型是您用来请求预测的模型。

视频

对于视频数据集,AutoML 使用训练集来训练模型,然后使用测试集提供最终评估指标。验证集不用于视频数据集。

数据拆分选项

您可以让 Vertex AI 自动拆分数据;在许多情况下,这是最佳方法。但是,如果您想要控制将数据拆分为各数据集的方式,可以使用多种方法。

您可以通过以下方式拆分数据:

您只能选择以上选项之一;您需要在训练模型时进行选择。

其中一些选项需要更改训练数据(例如 ml_use 标签或时间列)。为数据拆分选项添加数据或标签不要求您必须使用这些选项;在训练模型时,您仍然可以选择其他选项。

使用默认拆分

Vertex AI 会自动为您执行数据拆分。您的数据会随机拆分为三个集合,具体取决于数据类型。这是拆分数据最简单的方式,并且在大多数情况下效果都很好。

文本 图片 视频 表格
培训 80 80 80 80
验证 10 10 不适用 10
测试 10 10 20 10

如需使用默认数据拆分,请在 Cloud Console 中接受默认值,或者将 API 的 split 字段留空。

使用 ml_use 标签

要使用 ml_use 标签来控制数据拆分,您必须首先为数据设置 ml_use 标签。请参阅设置 ml_use 标签的值

对于除表格以外的其他 AutoML 数据类型,在训练模型时,在 Cloud Console 中将数据拆分指定为手动(高级)。如果您使用 Vertex AI API 进行训练,请使用 FilterSplit 对象,为训练过滤器指定 aiplatform.googleapis.com/ml_use=training,为验证过滤器指定 aiplatform.googleapis.com/ml_use=validation,以及为测试过滤器指定 aiplatform.googleapis.com/ml_use=test

具有 ml_use 值的所有数据项会被分配给指定的数据集。未设置 ml_use 的数据项会从训练过程中排除。

对于表格数据类型,您可以使用数据拆分列

使用数据过滤条件

您可以通过在 Vertex AI API 中使用 FilterSplit 对象来使用其他标签(除 ml-use 外)和其他字段来拆分数据。例如,您可以将 trainingFilter 设置为 labels.flower=rose,将 validationFilter 设置为 labels.flower=daisy,并将 testFilter 设置为 labels.flower=dahlia。此设置会使标记为 rose 的所有数据添加到训练集,标记为 daisy 的所有数据添加到验证集,标记为 dahlia 的所有数据添加到测试集。

如果您对多个字段进行过滤,那么一个数据项可能匹配多个过滤条件。在这种情况下,训练集优先,其次是验证集,最后是测试集。换句话说,只有在数据项匹配测试集的过滤条件且不匹配训练集和验证集的过滤条件时,该数据项才会放入测试集中。如果一个数据项不匹配任何集合的过滤条件,则会从训练中排除。

您不应为数据拆分使用与模型预测内容相关的类别;每个数据集都应反映模型将用于预测的数据的范围。(例如,您不应为要按花卉类型对图片进行分类的模型使用上文所述的过滤条件。)

如果您不想让过滤条件匹配任何数据项,请将其设置为“-”(减号)。

表格数据不支持数据过滤条件。

更改百分比

如果您没有选择其他方式来控制数据拆分,系统会根据数据类型的默认百分比将数据随机拆分为各集合。您可以将百分比更改为总和为 100 的任意值(对于 Vertex AI API,使用总和为 1.0 的分数)。

如需更改百分比(分数),您可以使用 FractionSplit 对象来定义分数。对于图片、文本和视频数据类型,您还可以在训练模型时使用 Cloud Console 更新拆分百分比。

使用时间列

对于表格训练数据,如果您的数据属于时间敏感型数据,则可以指定一个列作为时间列。Vertex AI 使用“时间”列来拆分数据,最早的行用于训练,次早的行用于验证,最新的行用于测试。如果使用 API,您还可以指定用于数据集的数据的百分比。如需了解详情,请参阅时间列

设置 ml_use 标签的值

要使用 ml_use 标签控制数据拆分,首先需要设置数据项的 ml_use 标签值。

设置数据 ml_use 标签的方式取决于数据类型:

为视觉、视频和文本数据设置 ml_use

您可以在数据导入时为视觉、视频和文本数据设置 ml_use 标签(按数据项或整个导入文件),或在数据导入之后使用 Google Cloud Console 进行设置。

在导入时为各个数据项设置 ml_use

您可以通过在 JSONL 数据中添加 aiplatform.googleapis.com/ml_use 字段的值或设置 CSV 文件第一列的值来设置每个数据项的 ml_use 标签。如需了解详情,请参阅相关数据类型的准备数据部分。

如果数据中有重复数据项(即相同的视频、图片或文本片段在导入文件中多次出现),Vertex AI 会使用遇到的第一个数据项的 ml_use 值,并忽略任何后续 ml_use 值。第一个遇到的项不一定是最靠近上传文件开头的项。

为整个上传文件设置 ml_use

如果您的数据可以按 ml_use 值归类为不同的上传文件,您可以为整个上传文件设置 ml_use 值,具体方法是,在使用 Cloud Console 上传文件时使用每个文件的下拉菜单,或者使用 datasets.import 方法中的 dataItemLabels 映射字段。

如果您为上传文件设置了 ml_use,并且该文件也包含 ml_use 值,则文件中的 ml_use 值优先于文件级的值。

导入后设置 ml_use

上传数据后,您可以在 Cloud Console 中指定或更新特定数据项的 ml_use 值,只需在列表视图中选择一个或多个项并使用指定机器学习用途下拉菜单。

如果您重新上传数据文件,即使 ml_use 值已更改,它也不会更新 ml_use 值。您无法使用 Vertex AI API 在导入后更新 ml_use 值。

为表格数据设置 ml_use

要为表格数据的训练数据的每行指定 ml_use,您需要在训练数据中提供数据拆分列,并在训练模型时指定该列。如需了解详情,请参阅数据拆分列