本页面介绍如何使用 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
如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。 如需了解详情,请参阅 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
如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。 如需了解详情,请参阅 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)。准确捕捉更多极值。默认值。 |
平均绝对误差 | minimize-mae |
最大限度降低平均绝对误差 (MAE)。将极值视为对模型影响较小的离群值。 |
RMSLE | minimize-rmsle |
最大限度降低均方根对数误差 (RMSLE)。根据相对误差而不是绝对误差来判错。适用于预测值和实际值都非常大的情况。 |