本页面介绍了如何使用 Cloud 控制台或 Vertex AI API 根据表格数据集训练 AutoML 分类或回归模型。
表格 AutoML 分类或回归模型的优化目标
当您使用表格数据集训练 AutoML 模型时,Vertex AI 会根据模型类型和用于目标列的数据类型选择默认优化目标。
分类模型最适合的情况:
优化目标 | API 值 | 在什么情况下使用该目标 |
---|---|---|
AUC ROC | maximize-au-roc |
最大化接收者操作特征 (ROC) 曲线下的面积。区分不同的类别。二元分类的默认值。 |
对数损失 | minimize-log-loss |
使预测概率尽可能准确。仅限于支持的多类别分类目标。 |
AUC PR | maximize-au-prc |
最大化精确率/召回率曲线下的面积。优化不常见类别的预测结果。 |
特定召回率下的精确率 | maximize-precision-at-recall |
优化特定召回值下的精确率。 |
特定精确率下的召回率 | maximize-recall-at-precision |
优化特定精确率下的召回率。 |
回归模型最适合的情况:
优化目标 | API 值 | 在什么情况下使用该目标 |
---|---|---|
均方根误差 | minimize-rmse |
最大限度降低均方根误差 (RMSE)。准确捕捉更多极值。默认值。 |
MAE | minimize-mae |
最大限度降低平均绝对误差 (MAE)。将极值视为对模型影响较小的离群值。 |
RMSLE | minimize-rmsle |
最大限度降低均方根对数误差 (RMSLE)。根据相对误差而不是绝对误差来判错。适用于预测值和实际值都非常大的情况。 |
准备工作
在训练模型之前,您必须先完成以下操作:
训练 AutoML 模型
Cloud Console
在 Google Cloud 控制台的 Vertex AI 部分中,转到数据集页面。
点击要用于训练模型的数据集的名称,以打开其详情页面。
如果您的数据类型使用注释集,请选择要用于此模型的注释集。
点击训练新模型。
在训练新模型窗口中,完成以下步骤
选择
AutoML 作为训练方法,然后点击继续。输入新模型的显示名。
选择目标列。
目标列是模型将预测的值。
详细了解目标列要求。
如果您要将测试数据集导出到 BigQuery,请勾选将测试数据集导出到 BigQuery (Export test dataset to BigQuery) 并提供表的名称。
如果您想手动控制数据拆分,请打开高级选项。
默认数据拆分是随机的。根据您的数据,您可以选择手动来使用数据拆分列、控制数据拆分的百分比或提供时间列。详细了解数据拆分。
点击继续。
点击生成统计信息(如果您尚未生成)。
生成统计信息会填充转换下拉菜单。
在“训练选项”页面上,查看列列表,并从训练中排除任何不应用于训练模型的列。
如果您要使用数据拆分列,则应包含该列。
查看为包含的特征选择的转换,以及是否允许无效数据,并进行任何所需更新。
如果要指定权重列,或更改默认的优化目标,请打开高级选项并进行选择。
点击继续。
在计算和价格窗口中,输入模型训练小时数的上限。
此设置有助于限制训练费用。实际所用的时间可能超过此值,因为创建新模型涉及其他操作。
建议的训练时间与训练数据的大小有关。 下表按行数显示了建议的训练时间范围;列数较多则所需训练时间更长。
行 建议的训练时间 少于 10 万 1 - 3 小时 10 万 - 100 万 1 - 6 小时 100 万 - 1000 万 1 - 12 小时 超过 1000 万 3 - 24 小时 如需了解训练价格,请参阅价格页面。
点击开始训练。
模型训练可能需要几个小时,具体取决于数据的大小和复杂性,以及训练预算(如果指定)。您可以关闭此标签页,稍后再返回。模型完成训练后,您会收到电子邮件。
API
选择表格数据类型目标。
分类
选择语言或环境标签页:
REST 和命令行
您可以使用 trainingPipelines.create 命令训练模型。
训练模型。
在使用任何请求数据之前,请先进行以下替换:
- LOCATION:您的区域。
- PROJECT:您的项目 ID 或项目编号。
- TRAININGPIPELINE_DISPLAY_NAME:为此操作创建的训练流水线的显示名称。
- TARGET_COLUMN:您希望此模型预测的列(值)。
- WEIGHT_COLUMN:(可选)权重列。了解详情。
- TRAINING_BUDGET:您希望模型训练的最长时间,以毫节点时为单位(1000 毫节点时等于一节点时)。
- OPTIMIZATION_OBJECTIVE:仅当您不希望预测类型的默认优化目标时,才需要。了解详情。
- TRANSFORMATION_TYPE:将为用于训练模型的每一列提供转换类型。了解详情。
- COLUMN_NAME:具有指定转换类型的列的名称。必须指定用于训练模型的每一列。
- MODEL_DISPLAY_NAME:新训练模型的名称。
- DATASET_ID:训练数据集的 ID。
-
您可以提供
Split
对象来控制数据拆分。如需了解如何控制数据拆分,请参阅使用 REST 控制数据拆分。 - PROJECT_NUMBER:您的项目的项目编号(显示在响应中)
HTTP 方法和网址:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/trainingPipelines
请求 JSON 正文:
{ "displayName": "TRAININGPIPELINE_DISPLAY_NAME", "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tabular_1.0.0.yaml", "trainingTaskInputs": { "targetColumn": "TARGET_COLUMN", "weightColumn": "WEIGHT_COLUMN", "predictionType": "classification", "trainBudgetMilliNodeHours": TRAINING_BUDGET, "optimizationObjective": "OPTIMIZATION_OBJECTIVE", "transformations": [ {"TRANSFORMATION_TYPE_1": {"column_name" : "COLUMN_NAME_1"} }, {"TRANSFORMATION_TYPE_2": {"column_name" : "COLUMN_NAME_2"} }, ... }, "modelToUpload": {"displayName": "MODEL_DISPLAY_NAME"}, "inputDataConfig": { "datasetId": "DATASET_ID", } }
如需发送您的请求,请展开以下选项之一:
您应会收到如下所示的 JSON 响应:
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/trainingPipelines/4567", "displayName": "myModelName", "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tabular_1.0.0.yaml", "modelToUpload": { "displayName": "myModelName" }, "state": "PIPELINE_STATE_PENDING", "createTime": "2020-08-18T01:22:57.479336Z", "updateTime": "2020-08-18T01:22:57.479336Z" }
Java
如需了解如何安装和使用 Vertex AI 客户端库,请参阅 Vertex AI 客户端库。如需了解详情,请参阅 Vertex AI Java API 参考文档。
Node.js
如需了解如何安装和使用 Vertex AI 客户端库,请参阅 Vertex AI 客户端库。如需了解详情,请参阅 Vertex AI Node.js API 参考文档。
Python
如需了解如何安装和使用 Vertex AI 客户端库,请参阅 Vertex AI 客户端库。如需了解详情,请参阅 Vertex AI Python API 参考文档。
回归
选择语言或环境标签页:
REST 和命令行
您可以使用 trainingPipelines.create 命令训练模型。
训练模型。
在使用任何请求数据之前,请先进行以下替换:
- LOCATION:您的区域。
- PROJECT:您的项目 ID 或项目编号。
- TRAININGPIPELINE_DISPLAY_NAME:为此操作创建的训练流水线的显示名称。
- TARGET_COLUMN:您希望此模型预测的列(值)。
- WEIGHT_COLUMN:(可选)权重列。了解详情。
- TRAINING_BUDGET:您希望模型训练的最长时间,以毫节点时为单位(1000 毫节点时等于一节点时)。
- OPTIMIZATION_OBJECTIVE:仅当您不希望预测类型的默认优化目标时,才需要。了解详情。
- TRANSFORMATION_TYPE:将为用于训练模型的每一列提供转换类型。了解详情。
- COLUMN_NAME:具有指定转换类型的列的名称。必须指定用于训练模型的每一列。
- MODEL_DISPLAY_NAME:新训练模型的名称。
- DATASET_ID:训练数据集的 ID。
-
您可以提供
Split
对象来控制数据拆分。如需了解如何控制数据拆分,请参阅使用 REST 控制数据拆分。 - PROJECT_NUMBER:您的项目的项目编号(显示在响应中)
HTTP 方法和网址:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/trainingPipelines
请求 JSON 正文:
{ "displayName": "TRAININGPIPELINE_DISPLAY_NAME", "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tabular_1.0.0.yaml", "trainingTaskInputs": { "targetColumn": "TARGET_COLUMN", "weightColumn": "WEIGHT_COLUMN", "predictionType": "regression", "trainBudgetMilliNodeHours": TRAINING_BUDGET, "optimizationObjective": "OPTIMIZATION_OBJECTIVE", "transformations": [ {"TRANSFORMATION_TYPE_1": {"column_name" : "COLUMN_NAME_1"} }, {"TRANSFORMATION_TYPE_2": {"column_name" : "COLUMN_NAME_2"} }, ... }, "modelToUpload": {"displayName": "MODEL_DISPLAY_NAME"}, "inputDataConfig": { "datasetId": "DATASET_ID", } }
如需发送您的请求,请展开以下选项之一:
您应会收到如下所示的 JSON 响应:
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/trainingPipelines/4567", "displayName": "myModelName", "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tabular_1.0.0.yaml", "modelToUpload": { "displayName": "myModelName" }, "state": "PIPELINE_STATE_PENDING", "createTime": "2020-08-18T01:22:57.479336Z", "updateTime": "2020-08-18T01:22:57.479336Z" }
Java
如需了解如何安装和使用 Vertex AI 客户端库,请参阅 Vertex AI 客户端库。如需了解详情,请参阅 Vertex AI Java API 参考文档。
Node.js
如需了解如何安装和使用 Vertex AI 客户端库,请参阅 Vertex AI 客户端库。如需了解详情,请参阅 Vertex AI Node.js API 参考文档。
Python
如需了解如何安装和使用 Vertex AI 客户端库,请参阅 Vertex AI 客户端库。如需了解详情,请参阅 Vertex AI Python API 参考文档。
使用 REST 控制数据拆分
您可以控制在训练集、验证集和测试集之间拆分训练数据的方式。使用 Vertex AI API 时,请使用 Split
对象来确定数据拆分。Split
对象可以包含在 InputConfig
对象中作为多种对象类型中的一种,其中每种类型都提供一种不同的训练数据拆分方式。
可用于拆分数据的方法取决于数据类型:
FractionSplit
:- TRAINING_FRACTION:要用于训练集的训练数据的比例。
- VALIDATION_FRACTION:要用于验证集的训练数据的比例。不用于视频数据。
- TEST_FRACTION:要用于测试集的训练数据的比例。
如果指定了任一比例,则必须指定所有比例。这些比例之和必须等于 1.0。比例的默认值会因数据类型而异。了解详情。
"fractionSplit": { "trainingFraction": TRAINING_FRACTION, "validationFraction": VALIDATION_FRACTION, "testFraction": TEST_FRACTION },
PredefinedSplit
:- DATA_SPLIT_COLUMN:包含数据拆分值(
TRAIN
、VALIDATION
、TEST
)的列。
使用拆分列为每行手动指定数据拆分。 了解详情。
"predefinedSplit": { "key": DATA_SPLIT_COLUMN },
- DATA_SPLIT_COLUMN:包含数据拆分值(
TimestampSplit
:- TRAINING_FRACTION:要用于训练集的训练数据的百分比。默认值为 0.80。
- VALIDATION_FRACTION:要用于验证集的训练数据的百分比。默认值为 0.10。
- TEST_FRACTION:要用于测试集的训练数据的百分比。默认值为 0.10。
- TIME_COLUMN:包含时间戳的列。
如果指定了任一比例,则必须指定所有比例。这些比例之和必须等于 1.0。了解详情。
"timestampSplit": { "trainingFraction": TRAINING_FRACTION, "validationFraction": VALIDATION_FRACTION, "testFraction": TEST_FRACTION, "key": TIME_COLUMN }