教程:使用线性学习器构建回归模型
在本教程中,您使用来自 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 开发人员指南》中的线性学习器算法。
在本教程中,您将构建预测鲍鱼年龄的线性学习器模型。您可以对鲍鱼数据集
使用案例示例
您可以使用线性学习器和 Amazon Redshift ML 解决其他回归问题,例如预测房屋价格。也可以使用 Redshift ML 来预测将使用城市自行车租赁服务的人数。
任务
-
先决条件
-
步骤 1:将数据从 Amazon S3 加载到 Amazon Redshift
-
步骤 2:创建机器学习模型
-
步骤 3:验证模型
先决条件
要完成此教程,必须完成 Amazon Redshift ML 的管理设置。
步骤 1:将数据从 Amazon S3 加载到 Amazon Redshift
使用 Amazon Redshift 查询器 v2 运行以下查询。这些查询将示例数据加载到 Redshift 中,然后将数据划分为训练集和验证集。
-
以下查询将创建
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 );
-
下面的查询将 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';
-
通过手动拆分数据,您将能够通过分配额外的预测集来验证模型的准确性。以下查询将数据拆分为两个集。
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 操作创建线性学习器模型。将 amzn-s3-demo-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 'amzn-s3-demo-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 | amzn-s3-demo-bucket | | Max Runtime | 15000 | +--------------------------+----------------------------------------------------------------------------------------------------+
步骤 3:验证模型
-
以下预测查询通过计算均方误差和均方根误差来验证模型对于
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 | +-----+--------------------+
-
使用以下查询对预测函数运行 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" };
-
使用以下查询计算模型对尚未成熟的鲍鱼进行正确预测的百分比。未成熟的鲍鱼有 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 的更多信息,请参阅以下文档:
有关机器学习的更多信息,请参阅以下文档: