本页面介绍如何使用 Google Cloud 控制台或 Vertex AI API 根据表格数据集训练分类或回归模型。
准备工作
在训练模型之前,您必须先完成以下操作:
训练模型
Google Cloud 控制台
在 Google Cloud 控制台的 Vertex AI 部分中,前往数据集页面。
点击要用于训练模型的数据集的名称,以打开其详情页面。
如果您的数据类型使用注释集,请选择要用于此模型的注释集。
点击训练新模型。
选择其他。
在训练新模型页面中,完成以下步骤:
选择模型训练方法。
AutoML
非常适合各种用例。
点击继续。
输入新模型的显示名。
选择目标列。
目标列是模型将预测的值。
详细了解目标列要求。
可选:如需将测试数据集导出到 BigQuery,请选中将测试数据集导出到 BigQuery 并提供表的名称。
可选:如需选择如何在训练集、测试集和验证集之间拆分数据,请打开高级选项。您可以从以下数据拆分选项中进行选择:
- 随机(默认):Vertex AI 会随机选择与每个数据集关联的行。默认情况下,Vertex AI 选择 80% 的数据行分配给训练集、10% 分配给验证集、10% 分配给测试集。
- 手动:Vertex AI 会根据数据拆分列中的值为每个数据集选择数据行。提供数据拆分列的名称。
- 按时间顺序:Vertex AI 根据时间列中的时间戳拆分数据。提供时间列的名称。
详细了解数据拆分。
点击继续。
可选:点击生成统计信息。生成统计信息会填充转换下拉菜单。
在“训练选项”页面上,查看列列表,并从训练中排除任何不应用于训练模型的列。
查看为包含的特征选择的转换,以及是否允许无效数据,并进行任何所需更新。
如果要指定权重列,或更改默认的优化目标,请打开高级选项并进行选择。
点击继续。
在计算和价格窗口中,配置如下:
输入模型训练的最大小时数。
此设置有助于限制训练费用。实际所用的时间可能超过此值,因为创建新模型涉及其他操作。
建议的训练时间与训练数据的大小有关。 下表按行数显示了建议的训练时间范围;列数较多则所需训练时间更长。
行 建议的训练时间 少于 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:您希望模型训练的最长时间,以毫节点时为单位(1,000 毫节点时等于一节点时)。
- 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 快速入门:使用客户端库》中的 Java 设置说明执行操作。如需了解详情,请参阅 Vertex AI Java API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Node.js 设置说明执行操作。如需了解详情,请参阅 Vertex AI Node.js API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装或更新 Python 版 Vertex AI SDK,请参阅安装 Python 版 Vertex AI SDK。如需了解详情,请参阅 Python API 参考文档。
回归
选择语言或环境标签页:
REST
您可以使用 trainingPipelines.create 命令训练模型。
训练模型。
在使用任何请求数据之前,请先进行以下替换:
- LOCATION:您的区域。
- PROJECT:您的项目 ID。
- TRAININGPIPELINE_DISPLAY_NAME:为此操作创建的训练流水线的显示名称。
- TARGET_COLUMN:您希望此模型预测的列(值)。
- WEIGHT_COLUMN:(可选)权重列。了解详情。
- TRAINING_BUDGET:您希望模型训练的最长时间,以毫节点时为单位(1,000 毫节点时等于一节点时)。
- 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 快速入门:使用客户端库》中的 Java 设置说明执行操作。如需了解详情,请参阅 Vertex AI Java API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Node.js 设置说明执行操作。如需了解详情,请参阅 Vertex AI Node.js API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装或更新 Python 版 Vertex AI SDK,请参阅安装 Python 版 Vertex AI SDK。如需了解详情,请参阅 Python API 参考文档。
使用 REST 控制数据拆分
您可以控制在训练集、验证集和测试集之间拆分训练数据的方式。使用 Vertex AI API 时,请使用 Split
对象来确定数据拆分。Split
对象可以包含在 inputDataConfig
对象中作为多种对象类型中的一种,其中每种类型都提供一种不同的训练数据拆分方式。
可用于拆分数据的方法取决于数据类型:
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 }
分类或回归模型的优化目标
在训练模型时,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)。根据相对误差而不是绝对误差来判错。适用于预测值和实际值都非常大的情况。 |