AWS Redshift 错误:CREATE MODEL 不支持数字列类型作为 TARGET / RETURN

问题描述 投票:0回答:1

我在 Redshift 中使用以下 SQL 语法来创建线性回归模型:

CREATE MODEL CostRegressionModel
FROM ( SELECT 
age,
sex,
bmi,
children,
smoker,
region,
charges as target_label
FROM
"dev"."public"."payout_training") 
TARGET target_label
FUNCTION CostRegression
IAM_ROLE 'arn:aws:iam::070649885991:role/LabRole'
MODEL_TYPE LINEAR_LEARNER 
PROBLEM_TYPE REGRESSION
OBJECTIVE 'MSE'
SETTINGS(
    S3_BUCKET 'acmemlout',
    MAX_RUNTIME 15000
);

我已阅读此处的文档,但找不到任何反映此问题的内容: https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html

这是表的 SQL 创建语句:

CREATE TABLE public.payout_training (
    id bigint ENCODE az64,
    age integer ENCODE az64,
    sex character varying(256) ENCODE lzo,
    bmi numeric(10, 2) ENCODE az64,
    children integer ENCODE az64,
    smoker character varying(256) ENCODE lzo,
    region
        character varying(256) ENCODE lzo,
        charges numeric(10, 2) ENCODE az64
) DISTSTYLE AUTO;

我不太确定与此相关的方式、内容或原因,但真的可以在此事上提供一些帮助。

sql postgresql amazon-web-services amazon-redshift
1个回答
0
投票

来自https://docs.aws.amazon.com/redshift/latest/dg/r_CAST_function.html

select cast(pricepaid as integer) from sales where salesid=100;

已付价格 ---------- 162(1 排)

到目前为止似乎有效的脚本更改:

CREATE MODEL CostRegressionModel
FROM ( SELECT 
age,
sex,
bmi,
children,
smoker,
region,
CAST(charges as float) as target_label
FROM
"dev"."public"."payout_training") 
TARGET target_label
FUNCTION CostRegression
IAM_ROLE 'arn:aws:iam::070649885991:role/LabRole'
MODEL_TYPE LINEAR_LEARNER 
PROBLEM_TYPE REGRESSION
OBJECTIVE 'MSE'
SETTINGS(
    S3_BUCKET 'acmemlout',
    MAX_RUNTIME 15000
);

我曾尝试执行 ALTER TABLE ALTER COLUMN TYPE 但 Redshift 不允许这样做。

但是上面的改变,在查询中转换类型使模型进入训练模式。

以防万一有人再次遇到同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.