教程:使用线性学习器构建回归模型 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

教程:使用线性学习器构建回归模型

在本教程中,您使用来自 Amazon S3 的数据创建线性学习器模型,并使用 Amazon Redshift ML 对模型运行预测查询。SageMaker 线性学习器算法可解决回归或多类别分类问题。要了解有关回归和多类别分类问题的更多信息,请参阅《Amazon SageMaker 开发人员指南》中的机器学习范式的问题类型。在本教程中,您将解决一个回归问题。线性学习器算法并行训练许多模型,并自动确定最优化的模型。您可以在 Amazon Redshift 中使用 CREATE MODEL 操作,该操作使用 SageMaker 创建线性学习器模型,并将预测函数发送到 Amazon Redshift。有关线性学习器算法的更多信息,请参阅《Amazon SageMaker 开发人员指南》中的线性学习器算法

您可以使用 CREATE MODEL 命令导出训练数据、训练模型、导入模型以及准备 Amazon Redshift 预测函数。使用 CREATE MODEL 操作将训练数据指定为表或 SELECT 语句。

线性学习器模型可以优化连续目标或离散目标。连续目标用于回归,而离散变量用于分类。一些方法仅为连续目标提供解决方案,例如回归方法。线性学习器算法提供了比朴素超参数优化技术(如朴素贝叶斯技术)更快的速度。朴素优化技术假定每个输入变量都是独立的。要使用线性学习器算法,必须提供表示输入维度的列和表示观察值的行。有关线性学习器算法的更多信息,请参阅《Amazon SageMaker 开发人员指南》中的线性学习器算法

在本教程中,您将构建预测鲍鱼年龄的线性学习器模型。您可以对鲍鱼数据集使用 CREATE MODEL 命令,以确定鲍鱼的物理测量值之间的关系。然后,您可以使用该模型来确定鲍鱼的年龄。

使用案例示例

您可以使用线性学习器和 Amazon Redshift ML 解决其他回归问题,例如预测房屋价格。也可以使用 Redshift ML 来预测将使用城市自行车租赁服务的人数。

任务

  • 先决条件

  • 步骤 1:将数据从 Amazon S3 加载到 Amazon Redshift

  • 步骤 2:创建机器学习模型

  • 步骤 3:验证模型

先决条件

要完成此教程,必须完成 Amazon Redshift ML 的管理设置

步骤 1:将数据从 Amazon S3 加载到 Amazon Redshift

使用 Amazon Redshift 查询器 v2 运行以下查询。这些查询将示例数据加载到 Redshift 中,然后将数据划分为训练集和验证集。

  1. 以下查询将创建 abalone_dataset 表。

    CREATE TABLE abalone_dataset ( id INT IDENTITY(1, 1), Sex CHAR(1), Length float, Diameter float, Height float, Whole float, Shucked float, Viscera float, Shell float, Rings integer );
  2. 下面的查询将 Amazon S3 的鲍鱼数据集中的示例数据复制到您之前在 Amazon Redshift 中创建的 abalone_dataset 表中。

    COPY abalone_dataset FROM 's3://redshift-ml-multiclass/abalone.csv' REGION 'us-east-1' IAM_ROLE default CSV IGNOREHEADER 1 NULL AS 'NULL';
  3. 通过手动拆分数据,您将能够通过分配额外的预测集来验证模型的准确性。以下查询将数据拆分为两个集。abalone_training 表用于训练,abalone_validation 表用于验证。

    CREATE TABLE abalone_training as SELECT * FROM abalone_dataset WHERE mod(id, 10) < 8; CREATE TABLE abalone_validation as SELECT * FROM abalone_dataset WHERE mod(id, 10) >= 8;

步骤 2:创建机器学习模型

在此步骤中,您将使用 CREATE MODEL 语句,通过线性学习器算法创建机器学习模型。

以下查询使用您的 S3 桶通过 CREATE MODEL 操作创建线性学习器模型。将 DOC-EXAMPLE-BUCKET 替换为您自己的 S3 桶。

CREATE MODEL model_abalone_ring_prediction FROM ( SELECT Sex, Length, Diameter, Height, Whole, Shucked, Viscera, Shell, Rings AS target_label FROM abalone_training ) TARGET target_label FUNCTION f_abalone_ring_prediction IAM_ROLE default MODEL_TYPE LINEAR_LEARNER PROBLEM_TYPE REGRESSION OBJECTIVE 'MSE' SETTINGS ( S3_BUCKET 'DOC-EXAMPLE-BUCKET', MAX_RUNTIME 15000 );

显示模型训练的状态(可选)

您可以使用 SHOW MODEL 命令来了解模型何时准备就绪。

使用以下查询监控模型训练的进度。

SHOW MODEL model_abalone_ring_prediction;

模型准备就绪后,上一个操作的输出内容应类似于以下示例。请注意,输出提供了 validation:mse 指标,这是均方误差。在下一个步骤中,您将使用均方误差验证模型的准确性。

+--------------------------+----------------------------------------------------------------------------------------------------+ | Model Name | model_abalone_ring_prediction | +--------------------------+----------------------------------------------------------------------------------------------------+ | Schema Name | public | | Owner | awsuser | | Creation Time | Thu, 30.06.2022 18:00:10 | | Model State | READY | | validation:mse | 4.168633 | | Estimated Cost | 4.291608 | | | | | TRAINING DATA: | | | Query | SELECT SEX , LENGTH , DIAMETER , HEIGHT , WHOLE , SHUCKED , VISCERA , SHELL, RINGS AS TARGET_LABEL | | | FROM ABALONE_TRAINING | | Target Column | TARGET_LABEL | | | | | PARAMETERS: | | | Model Type | linear_learner | | Problem Type | Regression | | Objective | MSE | | AutoML Job Name | redshiftml-20220630180010947843 | | Function Name | f_abalone_ring_prediction | | Function Parameters | sex length diameter height whole shucked viscera shell | | Function Parameter Types | bpchar float8 float8 float8 float8 float8 float8 float8 | | IAM Role | default-aws-iam-role | | S3 Bucket | DOC-EXAMPLE-BUCKET | | Max Runtime | 15000 | +--------------------------+----------------------------------------------------------------------------------------------------+

步骤 3:验证模型

  1. 以下预测查询通过计算均方误差和均方根误差来验证模型对于 abalone_validation 数据集的准确性。

    SELECT ROUND(AVG(POWER((tgt_label - predicted), 2)), 2) mse, ROUND(SQRT(AVG(POWER((tgt_label - predicted), 2))), 2) rmse FROM ( SELECT Sex, Length, Diameter, Height, Whole, Shucked, Viscera, Shell, Rings AS tgt_label, f_abalone_ring_prediction( Sex, Length, Diameter, Height, Whole, Shucked, Viscera, Shell ) AS predicted, CASE WHEN tgt_label = predicted then 1 ELSE 0 END AS match, CASE WHEN tgt_label <> predicted then 1 ELSE 0 END AS nonmatch FROM abalone_validation ) t1;

    上一个查询的输出应类似于以下示例。均方误差指标的值应类似于由 SHOW MODEL 操作的输出所显示的 validation:mse 指标。

    +-----+--------------------+ | mse | rmse | +-----+--------------------+ | 5.1 | 2.2600000000000002 | +-----+--------------------+
  2. 使用以下查询对预测函数运行 EXPLAIN_MODEL 操作。该操作将返回模型可解释性报告。有关 EXPLAIN_MODEL 操作的更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的 EXPLAIN_MODEL 函数

    SELECT EXPLAIN_MODEL ('model_abalone_ring_prediction');

    以下信息是之前的 EXPLAIN_MODEL 操作生成的模型可解释性报告的示例。每个输入的值都是 Shapley 值。Shapley 值表示每个输入对模型预测的影响,值较高的输入对预测的影响更大。在此示例中,值较高的输入对预测鲍鱼年龄的影响更大。

    { "explanations": { "kernel_shap": { "label0": { "expected_value" :10.290688514709473, "global_shap_values": { "diameter" :0.6856910187882492, "height" :0.4415323937124035, "length" :0.21507476107609084, "sex" :0.448611774505744, "shell" :1.70426496893776, "shucked" :2.1181392924386994, "viscera" :0.342220754059912, "whole" :0.6711906974084011 } } } }, "version" :"1.0" };
  3. 使用以下查询计算模型对尚未成熟的鲍鱼进行正确预测的百分比。未成熟的鲍鱼有 10 个或更少的环,正确的预测精确到实际环数的一个环内。

    SELECT TRUNC( SUM( CASE WHEN ROUND( f_abalone_ring_prediction( Sex, Length, Diameter, Height, Whole, Shucked, Viscera, Shell ), 0 ) BETWEEN Rings - 1 AND Rings + 1 THEN 1 ELSE 0 END ) / CAST(COUNT(SHELL) AS FLOAT), 4 ) AS prediction_pct FROM abalone_validation WHERE Rings <= 10;

有关 Amazon Redshift ML 的更多信息,请参阅以下文档:

有关机器学习的更多信息,请参阅以下文档: