使用案例
以下使用案例演示了如何使用 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 'amzn-s3-demo-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 'amzn-s3-demo-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 'amzn-s3-demo-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 是否将服务器端加密与 AWS 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 'amzn-s3-demo-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 'amzn-s3-demo-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 'amzn-s3-demo-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 'amzn-s3-demo-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 集群的相同AWS账户中创建。要查找作业名称,请启动 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 'amzn-s3-demo-bucket', | KMS_KEY_ID 'kms_string')
-
S3_BUCKET 子句指定用于存储中间结果的 Amazon S3 位置。
(可选)KMS_KEY_ID 子句指定 Amazon Redshift 是否将服务器端加密与 AWS 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 'amzn-s3-demo-bucket');
创建模型后,您可以将函数 customer_churn_predict 与指定参数类型结合使用以进行预测。
自带模型 (BYOM) – 远程推理
Amazon Redshift ML 还支持使用自带模型 (BYOM) 进行远程推理。
下面总结了 BYOM 的 CREATE MODEL 语法的选项。
用于远程推理的 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>' } [SETTINGS (MAX_BATCH_ROWS integer)];
用于远程推理的 CREATE MODEL 参数
- model_name
-
模型的名称。schema 中的模型名称必须是唯一的。
- FUNCTION fn_name ( [data_type] [, ...] )
-
函数的名称和输入参数的数据类型。有关所有支持的数据类型,请参阅数据类型。
Geography
、geometry
和hllsketch
不受支持。您还可以在架构中,使用两部分表示法提供函数名称,例如
myschema.myfunction
。 - RETURNS data_type
-
函数返回的值的数据类型。有关所有支持的数据类型,请参阅数据类型。
Geography
、geometry
和hllsketch
不受支持。 - SAGEMAKER 'endpoint_name'[:'model_name']
-
Amazon SageMaker 端点的名称。如果端点名称指向多模型端点,请添加要使用的模型名称。端点必须与 Amazon Redshift 集群托管于同一 AWS 区域。要查找端点,请启动 Amazon SageMaker。在推理下拉菜单中,选择端点。
- IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>'}
-
使用默认关键字让 Amazon Redshift 使用 IAM 角色,该角色设置为默认值并在 CREATE MODEL 命令运行时与集群关联。或者,您可以指定 IAM 角色的 ARN 来使用该角色。
- MAX_BATCH_ROWS 整数
-
Amazon Redshift 在单个批处理请求中为单个 SageMaker 调用发送的最大行数。只有具有远程推理功能的 BYOM 才支持此项。单个批处理中的实际行数还取决于输入大小,但实际行数小于或等于此值。此参数的最小值为 1。最大值为
INT_MAX
,即 2147483647。仅当输入和返回的数据类型均为SUPER
时,才需要此参数。默认值为INT_MAX
,即 2147483647。
当模型部署到 SageMaker 端点时,SageMaker 会在 Amazon Redshift 中创建模型的信息。然后它通过外部函数执行推理。您可以使用 SHOW MODEL 命令查看 Amazon Redshift 集群上的模型信息。
用于远程推理的 CREATE MODEL 使用说明
在使用 CREATE MODEL 进行远程推理之前,请考虑以下事项:
-
端点必须由拥有 Amazon Redshift 集群的相同AWS账户中托管。
-
确保 Amazon SageMaker 端点有足够的资源来容纳来自 Amazon Redshift 的推理调用,或者可以自动扩展 Amazon SageMaker 端点。
-
如果您不使用
SUPER
数据类型作为输入,则模型仅接受逗号分隔值(CSV)格式的输入,该格式对应于 SageMaker 中的text/CSV
内容类型。 -
如果您不使用
SUPER
数据类型作为输入,则模型的输出为单个值,其类型是在创建函数时指定的类型。输出格式为逗号分隔值(CSV),通过 SageMaker 中的text/CSV
内容类型实现。VARCHAR
数据类型不能包含在引号中,也不能包含换行,并且每个输出都必须位于新行中。 -
模型接受 null 值作为空字符串。
当输入数据类型为
SUPER
时,仅支持一个输入参数。当输入数据类型为
SUPER
时,返回的数据类型也必须是SUPER
。当输入和返回的数据类型均为 SUPER 时,需要使用 MAX_BATCH_ROWS。
当输入数据类型为
SUPER
时,端点调用的内容类型为application/json
(MAX_BATCH_ROWS 为1
时)或application/jsonlines
(所有其他情况)。当返回数据类型为
SUPER
时,端点调用接受的类型为application/json
(MAX_BATCH_ROWS 为1
时)或application/jsonlines
(所有其他情况)。
用于远程推理的 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;
以下示例使用大型语言模型(LLM)创建具备远程推理的 BYOM。托管在 Amazon SageMaker Jumpstart 上的 LLM 接受并返回 application/json
内容类型,并支持每次调用一个 JSON。输入和返回的数据类型必须为 SUPER
,且 MAX_BATCH_ROWS 必须设置为 1。
CREATE MODEL sample_super_data_model FUNCTION sample_super_data_model_predict(super) RETURNS super SAGEMAKER 'sample_super_data_model_endpoint' IAM_ROLE default SETTINGS (MAX_BATCH_ROWS 1);
带有 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 'amzn-s3-demo-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 'amzn-s3-demo-bucket'); select customer_id, customers_cluster(...) from customers;
customer_id | customers_cluster -------------------- 12345 1 12346 2 12347 4 12348
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 'amzn-s3-demo-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 'amzn-s3-demo-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 'amzn-s3-demo-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