使用案例 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用案例

以下使用案例演示了如何使用 CREATE MODEL 来满足您的需求。

简单 CREATE MODEL

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

简单的 CREATE MODEL 语法

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

简单 CREATE MODEL 参数

model_name

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

FROM { table_name | ( select_query ) }

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

TARGET column_name

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

FUNCTION prediction_function_name

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

Amazon Redshift 机器学习支持模型,例如用于回归和分类的 Xtreme Gradient Boosted 树 (XGBoost) 模型。

IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }

使用默认关键字让 Amazon Redshift 使用设置为默认值并在 CREAT MODEL 命令运行时与集群关联的 IAM 角色。或者,您可以指定 IAM 角色的 ARN 来使用该角色。

S3_BUCKET 'bucket'

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

MAX_CELLS 整数

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

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

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

有关与各种单元格数量相关的成本免费试用详细信息,请参阅 Amazon Redshift 定价

根据用户指导创建模型

除了 简单 CREATE MODEL 中所述的选项之外,您还可以在下面找到 CREATE MODEL 选项的描述。

预设情况下,CREATE MODEL 会搜索特定数据集的预处理和模型的最佳组合。您可能需要对模型进行额外的控制或引入其他领域知识(例如问题类型或目标)。在客户流失情况下,如果结果“客户不活跃”很少,则 F1 目标通常优先于精度目标。由于高精度模型可能会始终预测“客户处于活动状态”,因此可以实现高精度,但商业价值却很少。有关 F1 目标的信息,请参阅 Amazon SageMaker API 参考中的 AutoMLJobObjective

然后,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 { default } [ MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER} ] [ 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 (, ...) )

使用用户指导参数创建模型

MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER }

(可选)指定模型类型。您可以指定是否要训练特定模型类型的模型,如 XGBoost、多层感知机 (MLP) 或线性学习器,这些是 Amazon SageMaker Autopilot 支持的所有算法。如果未指定参数,则在训练期间搜索所有受支持的模型类型,以找到最佳模型。

PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION )

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

OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1Macro' | 'AUC')

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

MAX_CELLS 整数

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

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 是否将服务器端加密与 Amazon KMS 键结合使用来保护静态数据。传输中的数据由安全套接字层 (SSL) 保护。

PREPROCESSORS 'string'

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

CREATE MODEL customer_churn FROM customer_data TARGET 'Churn' FUNCTION predict_churn IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' } 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 – 通常用于将离散值编码为具有一个非零值的二进制向量。该转换器适用于许多机器学习模型。

  • OrdinalEncoder – 将离散值编码为单个整数。该转换器适用于特定机器学习模型,如 MLP 和线性学习器。

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

  • Imputer – 填充缺少的值,而不是数字 (NaN) 值。

  • ImputerWithIndicator – 填充缺少值和 NaN 值。此转换器器还会创建一个指示器,指示是否有任何值缺失以及被填充。

  • Normalizer – 标准化值,这可以提高许多机器学习算法的性能。

  • DateTimeVectorizer – 创建向量嵌入,表示可在机器学习模型中使用的日期时间数据类型列。

  • PCA – 将数据投影到低维空间中,以减少功能数量,同时保留尽可能多的信息。

  • StandardScaler – 通过去除平均值并缩放至单位方差来标准化功能。

  • MinMax – 通过将每个功能缩放至给定范围来转换功能。

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

带有 AUTO OFF 的 CREATE XGBoost 模型

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

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

带有 AUTO OFF 语法的 CREATE XGBoost 模型

CREATE MODEL model_name FROM { table_name | (select_statement ) } TARGET column_name FUNCTION function_name IAM_ROLE { default } 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 (, ...) )

使用 AUTO OFF 参数创建 XGBoost 模型

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 文档中的学习任务参数

HYPERPARAMETERS { DEFAULT | DEFAULT EXCEPT ( key ‘value’ (,..) ) }

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

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

num_class

整数

对于多类分类是必需的。

不适用

num_round

整数

100

不适用

tree_method

字符串 自动 不适用

max_depth

整数 6 [0, 10]
min_child_weight Float 1 最小值:0,最大值:120
subsample Float 1 最小值:0.5,最大值:1
gamma Float 0 最小值:0,最大值:5
alpha Float 0 最小值:0,最大值:1000
eta Float 0.3 最小值:0.1,最大值:0.5
colsample_byleve Float 1 最小值:0.1,最大值:1
colsample_bynode Float 1 最小值:0.1,最大值:1
colsample_bytree Float 1 最小值:0.5,最大值:1
lambda Float 1 最小值:0,最大值:1000
max_delta_step 整数 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 default IGNOREHEADER 1 CSV;

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

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 default AUTO OFF MODEL_TYPE XGBOOST OBJECTIVE 'multi:softmax' PREPROCESSORS 'none' HYPERPARAMETERS DEFAULT EXCEPT (NUM_ROUND '100', NUM_CLASS '30') SETTINGS (S3_BUCKET 'your-bucket');

以下示例使用推断查询来预测记录编号大于 2500 的鱼的年龄。它使用从上述命令创建的函数 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;

自带模型 (BYOM) – 本地推理

Amazon Redshift ML 支持使用自带模型 (BYOM) 进行本地推理。

下面总结了 BYOM 的 CREATE MODEL 语法的选项。您可以将在 Amazon Redshift 之外训练的模型与 Amazon SageMaker 结合使用,以用于 Amazon Redshift 本地的数据库内推理。

用于本地推理的 CREATE MODEL 语法

下面介绍了用于本地推理的 CREATE MODEL 语法。

CREATE MODEL model_name FROM ('job_name' | 's3_path' ) FUNCTION function_name ( data_type [, ...] ) RETURNS data_type IAM_ROLE { default } [ SETTINGS ( S3_BUCKET 'bucket', | --required KMS_KEY_ID 'kms_string') --optional ];

Amazon Redshift 目前仅支持针对 BYOM 的预先训练的 XGBoost、MLP 和线性学习器模型。您可以使用此路径导入 SageMaker Autopilot 和直接在 Amazon SageMaker 中训练的模型,以便进行本地推理。

用于本地推理的 CREATE MODEL 参数

model_name

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

FROM ('job_name' | 's3_path' )

job_name 将 Amazon SageMaker 任务名称用作输入。任务名称可以是 Amazon SageMaker 训练任务名称,也可以是 Amazon SageMaker Autopilot 任务名称。任务必须在拥有 Amazon Redshift 集群的相同Amazon账户中创建。要查找作业名称,请启动 Amazon SageMaker。在训练下拉菜单中,选择训练作业

's3_path' 指定创建模型时要使用的 .tar.gz 模型构件文件的 S3 位置。

FUNCTION function_name ( data_type [, ...] )

要创建的函数的名称以及输入参数的数据类型。您可以提供 schema 名称。

RETURNS data_type

函数返回的值的数据类型。

IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>'}

使用默认关键字让 Amazon Redshift 使用 IAM 角色,该角色设置为默认值并在 CREATE MODEL 命令运行时与集群关联。

使用 IAM 角色的 Amazon 资源名称(ARN),您的集群使用该角色进行身份验证和授权。

SETTINGS ( S3_BUCKET 'bucket', | KMS_KEY_ID 'kms_string')

S3_BUCKET 子句指定用于存储中间结果的 Amazon S3 位置。

(可选)KMS_KEY_ID 子句指定 Amazon Redshift 是否将服务器端加密与 Amazon KMS 键结合使用来保护静态数据。传输中的数据由安全套接字层 (SSL) 保护。

有关更多信息,请参阅 根据用户指导创建模型

用于本地推理的 CREATE MODEL 语法示例

以下示例创建之前在 Amazon Redshift 之外的 Amazon SageMaker 中训练过的模型。由于 Amazon Redshift ML 支持模型类型进行本地推理,因此以下 CREATE MODEL 将创建一个可在 Amazon Redshift 中本地使用的函数。您可以提供 SageMaker 训练任务名称。

CREATE MODEL customer_churn FROM 'training-job-customer-churn-v4' FUNCTION customer_churn_predict (varchar, int, float, float) RETURNS int IAM_ROLE default SETTINGS (S3_BUCKET 'your-bucket');

创建模型后,您可以将函数 customer_churn_predict 与指定参数类型结合使用以进行预测。

自带模型 (BYOM) – 远程推理

Amazon Redshift ML 还支持使用自带模型 (BYOM) 进行远程推理。

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

以下是针对预览版 Amazon Redshift ML 中 BYOM 模型的输入的 SUPER 数据类型的预发行文档。文档和特征都可能会更改。我们建议您只在测试集群中使用此功能,而不要在生产环境中使用。有关预览条款和条件,请参阅 Amazon 服务条款中的测试版和预览

指定使用 SUPER 数据类型作为输入数据和返回数据类型,表示您要创建一个托管在 Amazon SageMaker JumpStart 中的大型语言模型 (LLM)。创建 LLM 目前只能作为预览功能使用。在以下 Amazon Web Services 区域中提供此预览。

  • 美国东部(俄亥俄州)(us-east-2)

  • 美国东部(弗吉尼亚州北部)(us-east-1)

  • 亚太地区(东京)(ap-northeast-1)

  • 欧洲地区(爱尔兰)(eu-west-1)

  • 欧洲地区(斯德哥尔摩)(eu-north-1)

您可以在预览版中创建 Amazon Redshift 集群,以便测试 Amazon Redshift 的新功能。您无法在生产环境中使用这些功能,也无法将预览版集群移动到生产集群或另一个跟踪上的集群。有关预览条款和条件,请参阅 Amazon 服务条款中的测试版和预览

预览版中创建集群
  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 Amazon Redshift 控制台:https://console.aws.amazon.com/redshiftv2/

  2. 在导航菜单上,选择预置集群控制面板,然后选择集群。列出您的账户在当前 Amazon Web Services 区域 区域中的集群。列表中的各个列中显示了每个集群的一部分属性。

  3. 集群列表页面上会显示一个横幅,其中介绍了预览版。选择创建预览版集群按钮以打开创建集群页面。

  4. 输入集群的属性。选择包含要测试的功能的预览版跟踪。我们建议输入的集群名称指明要对该集群进行预览版跟踪。为您的集群选择选项,包括标记为 -preview 的选项,用于要测试的功能。有关创建集群的一般信息,请参阅《Amazon Redshift 管理指南》中的创建集群

  5. 选择创建集群以在预览模式下创建集群。

    注意

    preview_2023 跟踪是最新可用的预览版跟踪。此版本仅支持创建具有 RA3 节点类型的集群。不支持节点类型 DC2 和 DS2 以及任何更早的节点类型。

  6. 当您的预览集群可用时,使用 SQL 客户端加载和查询数据。

您也可以创建预览工作组来创建 LLM。您无法在生产中使用这些功能,也无法将您的工作组移至其他工作组。有关预览条款和条件,请参阅 Amazon 服务条款中的测试版和预览。有关如何创建预览工作组的说明,请参阅创建预览工作组

用于远程推理的 CREATE MODEL 语法

下面介绍了用于远程推理的 CREATE MODEL 语法。

CREATE MODEL model_name FUNCTION function_name ( data_type [, ...] ) RETURNS data_type SAGEMAKER 'endpoint_name'[:'model_name'] IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }

用于远程推理的 CREATE MODEL 参数

model_name

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

FUNCTION fn_name ( [data_type] [, ...] )

函数的名称和输入参数的数据类型。有关所有支持的数据类型,请参阅数据类型Geographygeometryhllsketch 不受支持。指定使用 SUPER 数据类型作为输入数据和返回数据类型,表示您要创建一个托管在 Amazon SageMaker JumpStart 中的大型语言模型 (LLM)。

或者,您可以指定仅将 SUPER 数据类型用作输入数据,而不将其同时用作返回的数据类型。使用 SUPER 数据类型作为输入只可用作预览特征。

您也可以提供架构名称而不是函数名称。

RETURNS data_type

函数返回的值的数据类型。有关所有支持的数据类型,请参阅数据类型Geographygeometryhllsketch 不受支持。指定使用 SUPER 数据类型作为输入数据和返回数据类型,表示您要创建一个托管在 Amazon SageMaker JumpStart 中的大型语言模型 (LLM)。

或者,您可以指定仅将 SUPER 数据类型用作返回的数据类型,而不将其同时用作输入数据。

SAGEMAKER 'endpoint_name'[:'model_name']

Amazon SageMaker 端点的名称。如果端点名称指向多模型端点,请添加要使用的模型名称。端点必须与 Amazon Redshift 集群托管于同一 Amazon 区域。要查找端点,请启动 Amazon SageMaker。在推理下拉菜单中,选择端点

IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>'}

使用默认关键字让 Amazon Redshift 使用 IAM 角色,该角色设置为默认值并在 CREATE MODEL 命令运行时与集群关联。或者,您可以指定 IAM 角色的 ARN 来使用该角色。

当模型部署到 SageMaker 端点时,SageMaker 会在 Amazon Redshift 中创建模型的信息。然后它通过外部函数执行推理。您可以使用 SHOW MODEL 命令查看 Amazon Redshift 集群上的模型信息。

用于远程推理的 CREATE MODEL 使用说明

在使用 CREATE MODEL 进行远程推理之前,请考虑以下事项:

  • 如果您使用 SUPER 数据类型作为输入数据,BYOM 模型只能支持一个参数,并且返回的输出也必须是 SUPER 数据类型。

  • 模型必须通过 SageMaker 中的文本/CSV 内容类型接受逗号分隔值 (CSV) 格式的输入。仅当您未使用 SUPER 数据类型作为输入时才适用。

  • 端点必须由拥有 Amazon Redshift 集群的相同Amazon账户中托管。

  • 模型的输出必须是创建函数时指定的类型的单个值,格式为逗号分隔值 (CSV),方法是通过 SageMaker 中的文本/CSV 的内容类型。Varchar 数据类型不应包含在引号中,并且每个输出都必须位于新行中。仅在您指定模型不应返回 SUPER 数据类型时才适用。

  • 模型接受 null 值作为空字符串。

  • 确保 Amazon SageMaker 端点有足够的资源来容纳来自 Amazon Redshift 的推理调用,或者可以自动扩展 Amazon SageMaker 端点。

  • 当返回的类型为 SUPER 时,模型输出必须为 JSON 和 application/jsonlines 内容类型。

  • 当输入和输出类型均为 SUPER 时,模型必须通过内容类型 application/json 接受并返回 JSON。

用于远程推理的 CREATE MODEL 语法示例

以下示例创建一个使用 SageMaker 端点进行预测的模型。确保端点正在运行以进行预测,并在 CREATE MODEL 命令中指定其名称。

CREATE MODEL remote_customer_churn FUNCTION remote_fn_customer_churn_predict (varchar, int, float, float) RETURNS int SAGEMAKER 'customer-churn-endpoint' IAM_ROLE default;

以下示例使用 SUPER 数据类型作为输入数据创建大型语言模型 (LLM),并输出 SUPER 数据类型。LLM 由 SageMaker Jumpstart 托管。

CREATE MODEL sample_super_data_model FUNCTION sample_super_data_model_predict(super) RETURNS super SAGEMAKER 'sample_super_data_model_endpoint' IAM_ROLE default;

带有 K-MANES 的 CREATE MODEL

Amazon Redshift 支持 K-Means 算法,该算法可对未标记的数据进行分组。此算法可解决需要在数据中发现分组的集群问题。根据未分类数据的相似与不同之处进行分组和分区。

带有 K-MANS 语法的 CREATE MODEL

CREATE MODEL model_name FROM { table_name | ( select_statement ) } FUNCTION function_name IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' } AUTO OFF MODEL_TYPE KMEANS PREPROCESSORS 'string' HYPERPARAMETERS DEFAULT EXCEPT ( K 'val' [, ...] ) SETTINGS ( S3_BUCKET 'bucket', KMS_KEY_ID 'kms_string', | -- optional S3_GARBAGE_COLLECT on / off, | -- optional MAX_CELLS integer, | -- optional MAX_RUNTIME integer -- optional);

带有 K-MANES 参数的 CREATE MODEL

AUTO OFF

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

MODEL_TYPE KMEANS

指定使用 KMEANS 来训练模型。

PREPROCESSORS 'string'

将预处理器的某些组合指定为某些列的集合。格式是 columnSet 的列表,以及要应用于每组列的适当转换。Amazon Redshift 支持 3 个 K-Means 预处理器,即 StandardScaler、MinMax 和 NumericPassthrough。如果您不想对 K-Means 应用任何预处理,请明确选择 NumericPassthrough 作为转换器。有关支持的转换器的更多信息,请参阅使用用户指导参数创建模型

K-Means 算法使用欧氏距离来计算相似度。对数据进行预处理可确保模型的功能保持在同等级别并生成可靠的结果。

HYPERPARAMETERS DEFAULT EXCEPT ( K 'val' [, ...] )

指定是否使用 K-Means 参数。使用 K-Means 算法,必须指定 K 参数。有关更多信息,请参阅《Amazon SageMaker 开发人员指南》中的 K-Means 超参数

以下示例为 K-Means 准备数据。

CREATE MODEL customers_clusters FROM customers FUNCTION customers_cluster IAM_ROLE default AUTO OFF MODEL_TYPE KMEANS PREPROCESSORS '[ { "ColumnSet": [ "*" ], "Transformers": [ "NumericPassthrough" ] } ]' HYPERPARAMETERS DEFAULT EXCEPT ( K '5' ) SETTINGS (S3_BUCKET 'bucket'); select customer_id, customers_cluster(...) from customers; customer_id | customers_cluster -------------------- 12345 1 12346 2 12347 4 12348 0

CREATE MODEL with Forecast

Redshift ML 中的预测模型使用 Amazon Forecast 来创建准确的时间序列预测。这样做可以让您使用一段时间内的历史数据来就未来的事件进行预测。Amazon Forecast 的常见使用案例包括:使用零售产品数据来决定如何为库存定价,使用制造数量数据来预测一件商品的订购量,以及使用 Web 流量数据来预测 Web 服务器可能收到多少流量。

Amazon Forecast 中的配额限制在 Amazon Redshift 预测模型中执行。例如,最大预测数为 100,但该数量是可调整的。删除预测模型不会自动删除 Amazon Forecast 中的关联资源。如果您删除 Redshift 集群,则所有关联模型也会一并删除。

请注意,预测模型目前仅在以下区域中可用:

  • 美国东部(俄亥俄州)(us-east-2)

  • 美国东部(弗吉尼亚北部)(us-east-1)

  • 美国西部(俄勒冈州)(us-west-2)

  • 亚太地区(孟买)(ap-south-1)

  • 亚太地区(首尔)(ap-northeast-2)

  • 亚太地区(新加坡)(ap-southeast-1)

  • 亚太地区(悉尼)(ap-southeast-2)

  • 亚太地区(东京)(ap-northeast-1)

  • 欧洲地区(法兰克福)(eu-central-1)

  • 欧洲地区(爱尔兰)(eu-west-1)

CREATE MODEL with Forecast 语法

CREATE [ OR REPLACE ] MODEL forecast_model_name FROM { table_name | ( select_query ) } TARGET column_name IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>'} AUTO ON MODEL_TYPE FORECAST SETTINGS ( S3_BUCKET 'bucket', HORIZON integer, FREQUENCY forecast_frequency [PERCENTILES '0.1', '0.5', '0.9']

CREATE MODEL with Forecast 参数

forecast_model_name

模型的名称。模型名称必须唯一。

FROM { table_name | ( select_query ) }

指定训练数据的 table_name 或查询。这既可以是系统中的现有表,也可以是用括号括起来的兼容 Amazon RedShift 的 SELECT 查询。表或查询结果必须至少包含三列:(1) 一个指定时间序列名称的 varchar 列。每个数据集可以有多个时间序列;(2) 一个日期时间列;以及 (3) 要预测的目标列。此目标列必须为整数或浮点类型。如果您提供的数据集包含三列以上,Amazon Redshift 会假定所有其他列都是相关时间序列的一部分。请注意,相关时间序列必须为整数或浮点类型。有关相关时间序列的更多信息,请参阅使用相关时间序列数据集

TARGET column_name

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

IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }

使用默认关键字让 Amazon Redshift 使用设置为默认值并在 CREAT MODEL 命令运行时与集群关联的 IAM 角色。或者,您可以指定 IAM 角色的 ARN 来使用该角色。

AUTO ON

打开算法和超参数选择的 CREATE MODEL 自动发现。在创建预测模型时指定 On 表示使用 Forecast AutoPredictor,其中 Amazon Forecast 会将算法的最佳组合应用于数据集中的每个时间序列。

MODEL_TYPE FORECAST

指定使用 FORECAST 来训练模型。

S3_BUCKET 'bucket'

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

HORIZON 整数

预测模型可以返回的最大预测数。模型一旦经过训练,您就无法更改此整数。

FREQUENCY forecast_frequency

指定您希望的预测时间粒度。可用的选项为 Y | M | W | D | H | 30min | 15min | 10min | 5min | 1min。如果要训练预测模型,则为必填项。

PERCENTILES 字符串

一个以逗号分隔的字符串,指定用于训练预测器的预测类型。预测类型可以是从 0.01 到 0.99 的分位数,增量为 0.01 或更高。您也可以使用均值指定均值预测。您最多可以指定五种预测类型。

以下示例演示了如何创建简单的预测模型。

CREATE MODEL forecast_example FROM forecast_electricity_ TARGET target IAM_ROLE 'arn:aws:iam::<account-id>:role/<role-name>' AUTO ON MODEL_TYPE FORECAST SETTINGS (S3_BUCKET 'redshift-ml-bucket', HORIZON 24, FREQUENCY 'H', PERCENTILES '0.25,0.50,0.75,mean', S3_GARBAGE_COLLECT OFF);

创建预测模型后,您可以使用预测数据创建新表。

CREATE TABLE forecast_model_results as SELECT Forecast(forecast_example)

然后,您可以查询新表以获得预测。

SELECT * FROM forecast_model_results