本页面介绍如何在将训练数据导入 AutoML Tables 之前对其进行准备。
简介
训练数据的质量极大影响着所创建的模型的效果,乃至影响该模型返回的预测结果的质量。数据一旦上传就无法更改。如果在导入训练数据后需要对其进行更改,必须更新源数据并重新导入。
了解 AutoML Tables 如何解读和使用数据有助于您上传干净有效的数据。
理解您的问题
要创建有效的训练数据,首先要确保您的问题定义明确并且将产生您需要的预测结果。如果您刚开始使用机器学习,请查看 AutoML Tables 可解决的问题类型,并确定要创建的模型类型。如需详细了解 AutoML Tables 支持的问题类型,请参阅问题类型。
确定要在数据集中包含的内容
接下来,您必须确定要在训练数据中包含的数据。在某些情况下,您可以使用业务数据中已经存在的表。在另一些情况下,您必须汇总来自不同来源的数据,可能需要进行一些数据转换或删除某些列,才能创建最有效的训练数据。
训练数据要求
您的训练数据必须符合以下要求:
不得超过 100 GB。
必须包含要预测的值(目标列)。
如果数据不包含此列,则 AutoML Tables 无法将训练数据与所需结果相关联。此列的数据类型还将确定模型的类型。了解详情。
必须至少有两列,且不得超过 1000 列。
一列必须是目标,并且必须至少有一个特征可用于训练模型。理想情况下,您的训练数据应远超两列。
必须至少有 1000 行且不得超过 2 亿行。
根据数据集的特征数量,1000 行可能不足以训练出高性能模型。了解详情。
其他基于训练数据的特征
此外,一些 AutoML Tables 功能要求训练数据中包含特定的数据:
如果您想要控制将数据拆分为训练数据、评估数据和测试数据的方式,请参阅关于控制数据拆分。
如果您想为某些行分配更大的权重,请参阅关于在训练数据中使用权重。
如需详细了解数据最佳做法,请参阅创建训练数据的最佳做法。
准备导入源
您可通过以下两种方式向 AutoML Tables 提供模型训练数据:
使用哪种来源取决于存储数据的方式以及数据的规模和复杂程度。如果您的数据集很小,而且您不需要更复杂的数据类型,则 CSV 可能更易于使用。对于包含数组和结构体的较大数据集,必须使用 BigQuery。
对于这两种导入源,您的数据都必须满足以下要求:
- 具有 1000 到 2 亿行。
- 具有 2 到 1000 列。
- 不超过 100 GB。
BigQuery
您的 BigQuery 表格必须使用 US
或 EU
位置的多区域 BigQuery 数据集。根据 BigQuery 表格的位置及其数据源(可不同),您需要执行下表中所列的权限更新。请注意,您的主项目(AutoML Tables 所在的项目)或外部项目可能需要更改权限。
表类型 | 表位置 | 数据源位置 | 需要添加的角色 |
---|---|---|---|
原生 BigQuery 表格 | 主项目 | 不适用 | 无。 |
原生 BigQuery 表格 | 外部项目 | 不适用 | BigQuery Data Viewer (针对外部项目)。了解详情。 |
BigQuery 视图 | 同一项目 | 不适用 | 无。 |
BigQuery 视图 | 其他项目 | 不适用 | BigQuery Data Viewer (针对外部项目)。了解详情。 |
Bigtable 支持的外部 BigQuery 数据源 | 主项目 | 主项目 | Bigtable Reader (针对主项目)。了解详情。 |
Bigtable 支持的外部 BigQuery 数据源 | 主项目 | 外部项目 | Bigtable Reader (针对外部项目)。了解详情。 |
Bigtable 支持的外部 BigQuery 数据源 | 外部项目 | 外部项目 | BigQuery Reader 和 Bigtable Reader (针对外部项目)。了解详情。 |
Cloud Storage 支持的外部 BigQuery 数据源 | 主项目 | 主项目 | 无。 |
Cloud Storage 支持的外部 BigQuery 数据源 | 主项目 | 外部项目 | Storage Object Viewer (针对外部项目)。了解详情。 |
Cloud Storage 支持的外部 BigQuery 数据源 | 外部项目 | 外部项目 | Storage Object Viewer 和 BigQuery Data Viewer (针对外部项目)。了解详情。 |
Google Sheets 支持的外部 BigQuery 数据源 | 主项目 | 不适用 | 与 AutoML 服务账号共享 Sheets 文件。了解详情。 |
Google Sheets 支持的外部 BigQuery 数据源 | 外部项目 | 不适用 | BigQuery Reader (针对外部项目),并与 AutoML 服务账号共享表格文件。 |
您无需为 BigQuery 表格指定架构。导入数据时,AutoML Tables 会自动推断表的架构。
您的 BigQuery URI(指定训练数据的位置)必须符合以下格式:
bq://<project_id>.<dataset_id>.<table_id>
URI 不能包含任何其他特殊字符。
如需了解 BigQuery 数据类型及其如何映射到 AutoML Tables,请参阅 BigQuery 表格。如需详细了解如何使用 BigQuery 外部数据源,请参阅外部数据源简介。
CSV 文件
CSV 文件要求
CSV 文件可以位于 Cloud Storage 中,也可以位于本地机器。它们必须符合以下要求:
- 第一个文件的第一行必须是包含列名称的标题。如果后续文件的第一行与标题相同,也会被视为标题,否则将视作数据。
- 列名称可以包含任何字母数字字符或下划线 (_)。但不能以下划线开头。
- 分隔符必须是英文逗号(“,”)。
每个文件不得超过 10 GB。
可以包含多个文件,但总大小不得超过 100 GB。
您无需为 CSV 数据指定架构。导入数据时,AutoML Tables 会自动推断表的架构,并使用标题行作为列名称。
如需详细了解 CSV 文件格式和数据类型,请参阅 CSV 文件。
Cloud Storage 存储桶要求
如果要从 Cloud Storage 导入数据,必须将其存储在满足以下要求的存储桶中:
- 它需要符合 Cloud Storage 存储桶要求。
- 如果存储桶与 AutoML Tables 分处不同项目,则您必须在该项目中为 AutoML Tables 授予
Storage > Storage Object Viewer
角色。了解详情。
如果要从本地机器导入数据,则必须具有满足以下要求的 Cloud Storage 存储桶:
- 它需要符合 Cloud Storage 存储桶要求。
- 如果存储桶与 AutoML Tables 分处不同项目,则您必须在该项目中为 AutoML Tables 授予
Storage > Storage Object Creator
角色。了解详情。
在导入数据之前,AutoML Tables 会将此存储桶用作暂存区域。
您必须使用 Google Cloud 控制台从本地计算机导入 CSV 文件。
如何使用数据拆分
使用数据集训练模型时,数据会被划分为三个集:训练集、验证集和测试集。
训练集和验证集用于尝试大量预处理、架构和超参数选项组合。这些试验会生成经过训练的模型,这些模型随后在验证集上接受质量评估,并用于指导探索更多选项组合。
当后续试验无法继续提升质量时,该版本的模型将被视为是经过训练的性能最佳的最终模型。接下来,AutoML Tables 使用在并行微调阶段确定的参数和架构再训练两个模型:
使用您的训练集和验证集训练的模型。
AutoML Tables 会使用您的测试集在此模型上生成模型评估指标。这是首次在过程中使用测试集。该方法可确保最终评估指标能公正地反映最终训练出的模型在生产环境中的表现。
使用您的训练集、验证集和测试集训练的模型。
此模型是您用来请求预测的模型。
关于控制数据拆分
默认情况下,AutoML Tables 随机选择 80% 的数据行进行训练、选择 10% 进行验证、选择 10% 进行测试。如果数据集不随时间变化、相对平衡且反映了将用于生产环境中预测的数据分布,随机选择算法通常就已足够。关键目标是确保您的测试集准确地表示模型将在生产环境中看到的数据。这样可确保评估指标能够准确表示模型在使用真实数据时的表现。
有时您可能需要主动选择在哪个数据拆分中使用哪些列,这些情况包括:
数据随时间变化。
在这种情况下,您应使用时间列或进行手动拆分,以便将最新数据用作测试集。
测试数据包括生产环境中不会出现的群体的数据。
例如,假设您正在使用来自多个商店的消费数据来训练模型。但是,您知道该模型主要将用于对训练数据中没有的商店进行预测。为了确保模型能够运用到新商店,应按商店划分数据集。也就是说,您的测试集应仅包含与评估集不同的商店,而评估集应仅包含与训练集不同的商店。
分类不平衡。
如果您的训练数据中某个类的数据明显多于另一个类,则您可能需要在测试数据中向少数类手动添加更多样本。AutoML Tables 不执行分层采样,因此测试集可能包含很少甚至零个少数类的样本。
您可使用下列两种方法之一来控制为哪个数据集选择哪些行:
如果同时指定数据拆分列和时间列,则系统仅使用数据拆分列来拆分数据。
数据拆分列
您可以使用数据拆分列来选择要用于训练、验证和测试的特定行。创建训练数据时,添加一个可包含以下某个值(区分大小写)的列:
TRAIN
VALIDATE
TEST
UNASSIGNED
此列中的值必须是以下两种组合之一:
- 全部为
TRAIN
、VALIDATE
和TEST
- 只有
TEST
和UNASSIGNED
每一行都必须具有该列的值;不能为空字符串。
例如,指定了所有集的情形:
"TRAIN","John","Doe","555-55-5555" "TEST","Jane","Doe","444-44-4444" "TRAIN","Roger","Rogers","123-45-6789" "VALIDATE","Sarah","Smith","333-33-3333"
仅指定了测试集的情形:
"UNASSIGNED","John","Doe","555-55-5555" "TEST","Jane","Doe","444-44-4444" "UNASSIGNED","Roger","Rogers","123-45-6789" "UNASSIGNED","Sarah","Smith","333-33-3333"
数据拆分列可以包含任何有效的列名称。
如果数据拆分列的值为 UNASSIGNED
,则 AutoML Tables 会自动将该行分配给训练集或验证集。
导入数据后,选择手动拆分数据,并将此列指定为数据拆分列。(您还可以使用 mlUseColumnSpecId
字段。)
时间列
您可以使用时间列告诉 AutoML Tables:时间对您的数据很重要;您的数据不是随时间随机分布的。指定时间列后,AutoML Tables 会使用最早的 80% 的行进行训练,接下来的 10% 的行进行验证,最新的 10% 的行进行测试。
AutoML Tables 将每一行视为一个独立同分布的训练样本;设置时间列不会更改此情况。时间列仅用于拆分数据集。
您必须为数据集中的每一行添加一个时间列值。请确保时间列具有足够多的非重复值,从而使评估和测试集不为空。通常,至少应包含 20 个非重复值。
时间列的数据类型必须为 Timestamp
。
在检查架构时,您可以选择此列作为时间列。(在 API 中,请使用 timeColumnSpecId
字段。)仅当您未指定数据拆分列时,此选择才会生效。
如果您不想使用与时间相关的列来拆分数据,请将该列的数据类型设置为 Timestamp
,但不要将其设置为时间列。
关于在训练数据中使用权重
默认情况下,AutoML Tables 会为训练数据的每一行分配相同的权重,这意味着在训练中每一行的权重都相同。
有时候,您可能希望某些行在训练中发挥更大的影响力。例如,如果您正在使用消费数据,您可能希望与支出更高的消费者关联的数据对模型产生更大的影响。如果您特别希望避免缺失某个特定结果,那么您可以为这一结果分配更大的权重。
您可以通过向数据集添加权重列来为行提供相对权重。权重列必须是数值列,可以为其指定 0 至 10000 之间的值。值越大,则指示 AutoML Tables 在训练模型时该行越重要。权重为 0,则表示忽略该行。如果您添加了权重列,则必须包含每一行的值。
稍后在检查架构时,将此列指定为权重列。(您还可以使用 weightColumnSpecId
字段。)
自定义加权方案仅用于训练模型,对模型评估并无影响。
目标列的要求
目标列必须符合以下要求:
- 必须是“分类”或“数值”。
- 如果是“分类”,则必须包含至少 2 个且不超过 500 个非重复值。
- 不能为 null。
后续步骤
- 导入数据以创建数据集。
- 了解创建训练数据的最佳做法。
- 了解数据类型和 AutoML Tables。