创建模型 - Amazon Redshift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建模型

这是 Amazon Redshift 的机器学习功能的预发布文档,目前为预览版。文档和功能均可能随时更改。我们建议您只在测试集群中使用此功能,而不要在生产环境中使用。有关预览版条款和条件,请参阅 AWS 服务条款中的Beta 服务参与

CREATE MODEL 语句提供了用于创建模型的参数数量的灵活性。根据用户的需求或问题类型,用户可以选择其首选的预处理器、算法、问题类型或超参数。

在使用 CREATE MODEL 语句之前,请完成中的先决条件使用 Amazon Redshift ML 的 集群设置。以下是先决条件的简要摘要。

  • 使用 Amazon Redshift 控制台或 AWS 命令行界面 (AWS CLI) 创建 AWS 集群。

  • 在创建集群时附加 AWS Identity and Access Management (IAM) 策略。

  • 要允许 Amazon Redshift SageMaker 和 代入角色以与其他 服务交互,请将适当的信任策略添加到IAM角色。

有关 IAM 角色、信任策略和其他先决条件的详细信息,请参阅使用 Amazon Redshift ML 的 集群设置

在下文中,您可以找到 CREATE MODEL 语句的不同使用案例。

简单创建模型

下面总结了 CREATE MODEL 语法的基本选项。

简单 CREATE MODEL 语法

CREATE MODEL model_name FROM { table_name | ( select_query ) } TARGET column_name FUNCTION prediction_function_name IAM_ROLE 'iam_role_arn' SETTINGS ( S3_BUCKET 'bucket', [ MAX_CELLS integer ] )

简单 CREATE MODEL 参数

model_name

模型的名称。架构中的模型名称必须是唯一的。

FROM { table_name | ( select_query ) }

table_name 或指定训练数据的查询。它们可以是系统中的现有表,也可以是用圆括号括起来的 Amazon Redshift兼容的 SELECT 查询,即 ()。查询结果中必须至少有两个列。它们只能是字符串和数字。

TARGET column_name

成为预测目标的列的名称。该列必须存在于 FROM 子句中。

FUNCTION prediction_function_name

该值指定要由 CREATE MODEL 生成的Amazon Redshift机器学习函数的名称,并用于使用此模型进行预测。函数是在与模型对象相同的架构中创建的,并且可以重载。

Amazon Redshift 机器学习支持 模型,例如 Xtreme Gradient Boosted tree (XGBoost) 模型以进行回归和分类。

IAM_ROLE 'iam_role_arn'

您的集群用于身份验证和授权的 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称 (ARN)。作为最小值IAM,该角色必须有权对用于卸载训练数据和暂存Amazon S3构件的 Amazon SageMaker 存储桶执行 LIST 操作。下面显示了单个 ARN 的 IAM_ROLE 参数字符串的语法。

IAM_ROLE 'arn:aws:iam::aws-account-id:role/role-name'
S3_BUCKET 'bucket'

您之前创建的用于在 Amazon S3 和 之间共享训练数据和构件的 Amazon Redshift 存储桶的名称SageMaker。 在卸载训练数据之前在此存储桶中Amazon Redshift创建一个子文件夹。训练完成后, Amazon Redshift 删除创建的子文件夹及其内容。

MAX_CELLS 整数

要从 FROM 子句中导出的最大单元格数。默认值为 1,000,000。

单元格数是训练数据中的行数(由 FROM 子句表或查询生成)乘以列数的乘积。如果训练数据中的单元格数大于 max_cells 参数指定的单元格数,则 CREATE MODEL 会缩小 FROM 子句训练数据的采样,以减小 MAX_CELLS 以下训练集的大小。允许较大的训练数据集可产生更高的准确性,但也意味着模型训练时间较长,并且成本更高。

有关使用 的成本的信息Amazon Redshift,请参阅使用 Amazon Redshift ML 的成本

有关与各种单元格编号和免费试用详细信息关联的成本的更多信息,请参阅 Amazon Redshift 定价

CREATE MODEL 与 用户指南

在下文中,除了中所述的选项外,您还可以找到 CREATE MODEL 选项的描述简单创建模型

默认情况下,CREATE MODEL 会搜索特定数据集的预处理和模型的最佳组合。您可能需要对模型进行额外的控制或引入额外的域知识(如问题类型或目标)。在客户流失场景中,如果结果“customer is not active”很少见,则 F1 目标通常优先于准确性目标。由于高精度模型可能始终预测“客户是活跃的”,因此,这会导致高精度,但商业价值很小。有关 F1 目标的信息,请参阅 AutoMLJobObjective 中的 Amazon SageMaker API 参考

然后,CREATE MODEL 将遵循您对指定方面(如目标)的建议。同时,CREATE MODEL 会自动发现最佳的预处理器和最佳的超参数。

CREATE MODEL 与用户指导语法

CREATE MODEL 为可指定的方面以及 Amazon Redshift 自动发现的方面提供了更大的灵活性。

CREATE MODEL model-name FROM { table_name | ( select_statement ) } TARGET column_name FUNCTION function_name IAM_ROLE 'iam_role_arn' [ PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION ) ] [ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1Macro' | 'AUC') ] SETTINGS ( S3_BUCKET 'bucket', | S3_GARBAGE_COLLECT { ON | OFF }, | KMS_KEY_ID 'kms_key_id', | MAX_CELLS integer, | MAX_RUNTIME integer (, ...) )

CREATE MODEL 与 用户指南参数

PROBLEM_TYPE (回归 | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION)

(可选)指定问题类型。如果您知道问题类型,可以限制Amazon Redshift为仅搜索该特定模型类型的最佳模型。如果未指定该参数,则在训练期间将根据您的数据发现问题类型。

OBJECTIVE (F1”|“F1Macro

(可选)指定用于测量机器学习系统的预测质量的目标指标的名称。此指标在训练期间进行了优化,以便为 数据中的模型参数值提供最佳估计值。如果您未明确指定指标,则默认行为是自动使用 MSE: 进行回归F1: 进行二进制分类,使用 Accuracy: 进行多类别分类。有关目标的更多信息,请参阅 AutoMLJobObjective 中的 Amazon SageMaker API 参考

MAX_CELLS 整数

(可选)指定训练数据中的单元格数。此值是记录数(在训练查询或表中)乘以列数的结果。默认值为 1,000,000。

MAX_RUNTIME 整数

(可选)指定要训练的最长时间。训练作业通常会根据数据集大小更快地完成。这指定了训练应花费的最长时间。默认值为 5400(90 分钟)。

S3_GARBAGE_COLLECT { ON | OFF }

(可选)指定 是否对用于训练模型和模型的生成的数据集Amazon Redshift执行垃圾回收。如果设置为 OFF,则用于训练模型和模型的结果数据集将保留在 中Amazon S3,并且可用于其他用途。如果设置为 ON,则 将在Amazon Redshift训练完成后Amazon S3删除 中的构件。默认值为 ON。

KMS_KEY_ID 'kms_key_id'

(可选)指定 是否Amazon Redshift使用具有 AWS KMS 密钥的服务器端加密来保护静态数据。传输中的数据由安全套接字层 (SSL) 保护。

预览版“字符串”

(可选)指定预处理器与特定列集的特定组合。格式是 的列表columnSets,以及要应用于每组列的相应转换。 将特定转换器列表中Amazon Redshift的所有转换器应用于相应 中的所有列ColumnSet。 例如,要将 OneHotEncoder 与 Imputer 一起应用于列 t1 和 t2请使用以下示例命令。

CREATE MODEL customer_churn FROM customer_data TARGET 'Churn' FUNCTION predict_churn IAM_ROLE 'iam_role' PROBLEM_TYPE BINARY_CLASSIFICATION OBJECTIVE 'F1' PREPROCESSORS '[ ... {"ColumnSet": [ "t1", "t2", ], "Transformers": [ "OneHotEncoder", "Imputer" ] }, {"ColumnSet": [ "t3" ], "Transformers": [ "OneHotEncoder" ] }, {"ColumnSet": [ "temp" ], "Transformers": [ "Imputer", "NumericPassthrough" ] } ]' SETTINGS ( S3_BUCKET 'bucket' )

Amazon Redshift 支持以下转换器:

  • OneHotEncoder — 通常用于将离散值编码为具有一个更适合机器学习模型的非零值的二进制向量。

  • NumericPassthrough — 将输入按原样传递到模型中。

  • Imputer (阻塞) — 填充缺失的值和NaN值。

  • Normalizer (标准化程序) 对通常可提高许多机器学习算法的性能的值进行—标准化。

Amazon Redshift ML 存储经过训练的转换器,并自动将其作为预测查询的一部分应用。从模型生成预测时,您无需指定它们。

使用 AUTO OFF 创建XGBoost模型

AUTO OFF CREATE MODEL 与默认 CREATE MODEL 的目标通常不同。

作为已了解 和超参数在训练这些模型时要使用的模型类型的高级用户,您可以使用带 AUTO OFF 的 CREATE MODEL 来关闭预处理器和超参数的 CREATE MODEL 自动发现。为此,请显式指定模型类型。XGBoost 目前是 AUTO 设置为 OFF 时唯一支持的模型类型。您可以指定超参数。 对您指定的任何超参数Amazon Redshift使用默认值。

CREATE MODEL with AUTO OFF 语法

CREATE MODEL model_name FROM { table_name | (select_statement ) } TARGET column_name FUNCTION function_name IAM_ROLE 'iam_role_arn' AUTO OFF MODEL_TYPE XGBOOST OBJECTIVE { 'reg:squarederror' | 'reg:squaredlogerror' | 'reg:logistic' | 'reg:pseudohubererror' | 'reg:tweedie' | 'binary:logistic' | 'binary:hinge' | 'multi:softmax' | 'rank:pairwise' | 'rank:ndcg' } HYPERPARAMETERS DEFAULT EXCEPT ( NUM_ROUND '10', ETA '0.2', NUM_CLASS '10', (, ...) ) PREPROCESSORS 'none' SETTINGS ( S3_BUCKET 'bucket', | S3_GARBAGE_COLLECT { ON | OFF }, | KMS_KEY_ID 'kms_key_id', | MAX_CELLS integer, | MAX_RUNTIME integer (, ...) )

CREATE XGBoost models with AUTO OFF 参数

自动关闭

关闭预处理器、算法和超参数选择的 CREATE MODEL 自动发现。

MODEL_TYPE XGBOOST

指定 以使用 XGBOOST 训练模型。

OBJECTIVE str (目标范围)

指定算法识别的目标。 Amazon Redshift 支持 reg:squarederror、reg:squaredlogerror、reg:logistic、reg:pseudohubererror、reg:tweedie、binary:logistic、binary:hinge、multi:softmax。有关这些目标的更多信息,请参阅 文档中的学习任务参数XGBoost。

HOURNAMETERS { DEFAULT | DEFAULT EXCEPT ( 键“值”(,...) ) }

指定是使用默认XGBoost参数还是按用户指定的值覆盖这些参数。必须使用单引号将值括起来。以下是 的参数示例XGBoost及其默认值。

参数名称 参数值 默认值 备注

num_class

Integer

对于多类别分类是必需的。

不适用

num_round

Integer

100

不适用

tree_method

字符串 自动 不适用

max_depth

Integer 6 [0, 10]
min_child_weight Float 1 MinValue MaxValue:0, :120
子样本 Float 1 MinValue:0.5,MaxValue:1
gamma Float 0 MinValue MaxValue:0, : 5
alpha Float 0 MinValue:0MaxValue,:1000
eta Float 0.3 MinValue:0.1,MaxValue:0.5
colsample_byleve Float 1 MinValue:0.1,MaxValue:1
colsample_bynode Float 1 MinValue:0.1,MaxValue:1
colsample_bytree Float 1 MinValue:0.5,MaxValue:1
lambda Float 1 MinValue MaxValue:0, :1000
max_delta_step Integer 0 [0, 10]

以下示例为 准备数据XGBoost。

DROP TABLE IF EXISTS abalone_xgb; CREATE TABLE abalone_xgb ( length_val float, diameter float, height float, whole_weight float, shucked_weight float, viscera_weight float, shell_weight float, rings int, record_number int); COPY abalone_xgb FROM 's3://redshift-downloads/redshift-ml/abalone_xg/' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::467896856988:role/Redshift-ML' IGNOREHEADER 1 CSV;

以下示例创建一个具有指定高级选项的 XGBoost 模型,例如 MODEL_TYPE、OBJECTIVE 和 PRECESSORS。

DROP MODEL abalone_xgboost_multi_predict_age; CREATE MODEL abalone_xgboost_multi_predict_age FROM ( SELECT length_val, diameter, height, whole_weight, shucked_weight, viscera_weight, shell_weight, rings FROM abalone_xgb WHERE record_number < 2500 ) TARGET rings FUNCTION ml_fn_abalone_xgboost_multi_predict_age IAM_ROLE 'arn:aws:iam::XXXXXXXXXXXX:role/Redshift-ML' AUTO OFF MODEL_TYPE XGBOOST OBJECTIVE 'multi:softmax' PREPROCESSORS 'none' HYPERPARAMETERS DEFAULT EXCEPT (NUM_ROUND '100', NUM_CLASS '30') settings (S3_BUCKET 'your-bucket');

以下示例使用推理查询来预测记录编号大于 200 的鱼的年龄。它使用从上述命令创建的函数 ml_fn_abalone_xgboost_multi_predict_age。

select ml_fn_abalone_xgboost_multi_predict_age(length_val, diameter, height, whole_weight, shucked_weight, viscera_weight, shell_weight)+1.5 as age from abalone_xgb where record_number > 2500;

完整创建模型

下面总结了完整 CREATE MODEL 语法的基本选项。

完整 CREATE MODEL 语法

以下是 AUTO ON 半自动CREATE MODEL 与 用户指南和 AUTO OFF 使用 AUTO OFF 创建XGBoost模型 一起使用时 CREATE MODEL 语句的完整语法。

CREATE MODEL model_name FROM { table_name | ( select_statement ) } TARGET column_name FUNCTION function_name IAM_ROLE 'iam_role_arn' [ AUTO ON / OFF ] -- default is AUTO ON [ MODEL_TYPE { XGBOOST } ] -- not required for non AUTO OFF case, default is the list of all supported type -- required for AUTO OFF [ PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION ) ] -- not supported when AUTO OFF [ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1_Macro' | 'AUC' | 'reg:squarederror' | 'reg:squaredlogerror'| 'reg:logistic'| 'reg:pseudohubererror' | 'reg:tweedie' | 'binary:logistic' | 'binary:hinge', 'multi:softmax' ) ] -- for AUTO ON: first 5 are valid -- for AUTO OFF: 6-13 are valid [ PREPROCESSORS 'string' ] -- required for AUTO OFF, when it has to be 'none' -- optional for AUTO ON [ HYPERPARAMETERS { DEFAULT | DEFAULT EXCEPT ( Key 'value' (,...) ) } ] -- support XGBoost hyperparameters, except OBJECTIVE -- required and only allowed for AUTO OFF -- default NUM_ROUND is 100 -- NUM_CLASS is required if objective is multi:softmax (only possible for AUTO OFF) SETTINGS ( S3_BUCKET 'bucket', | -- required KMS_KEY_ID 'kms_string', | -- optional S3_GARBAGE_COLLECT on / off, | -- optional, defualt is on. MAX_CELLS integer, | -- optional, default is 1,000,000 MAX_RUNTIME integer (, ...) -- optional, default is 5400 (1.5 hours) )

使用说明

使用 CREATE MODEL 时,请考虑以下事项:

  • CREATE MODEL 语句在异步模式下运行,并在将训练数据导出到 时返回Amazon S3。中的其余训练步骤在后台Amazon SageMaker发生。在训练过程中,相应的推理 函数是可见的,但无法运行。您可以查询 STV_ML_MODEL_INFO 以查看训练的状态。默认情况下,训练在后台可以运行最多 90 分钟,在 Auto 模型中可以扩展。要取消训练,只需运行 删除模型 命令。

  • CREATE MODEL 在同步模式下运行,默认情况下可在 AUTO 模式下运行最多 90 分钟。

  • 用于创建模型和用于暂存训练数据和模型构件的 Amazon Redshift 存储桶的Amazon S3集群必须位于同一AWS区域中。

  • 在模型训练期间, Amazon Redshift 和 将中间项目SageMaker存储在您提供的 Amazon S3 存储桶中。默认情况下, 在 CREATE MODEL 末尾Amazon Redshift执行垃圾回收并从 中删除这些对象Amazon S3。要在 上保留这些构件Amazon S3,您可以设置 S3_GARDBAGE COLLECT OFF 选项。

  • 在 FROM 子句中提供的训练数据中,您必须使用至少 500 行。

  • 在使用 CREATE MODEL 语句时,您只能在 FROM { table_name | ( select_query ) } 子句中指定最多 32 个功能(输入)列。

  • 对于 AUTO ON,您可以用作训练集的列类型为 SMALLINT、INTEGER、BIGINT、DECIMAL、REAL、DOUBLE、BOOLEAN、CHAR 和 VARCHAR。对于 AUTO OFF,您可以用作训练集的列类型为 SMALLINT、INTEGER、BIGINT、DECIMAL、REAL、DOUBLE 和 BOOLEAN。

  • 您不能使用 DECIMAL 作为目标列类型。

  • 您不能使用整数数据类型作为回归问题的目标。

  • 在计算训练数据并将其导出到Amazon S3存储桶上后,CREATE MODEL 语句执行将返回 。之后,您可以使用 SHOW MODEL 命令检查训练的状态。有关显示模型的更多信息,请参阅显示模型