如何解决BigQuery ML Standard Scaler“无法计算均值”
尝试使用BigQuery ML建立逻辑回归时,出现以下错误:
由于相应列'x'中的条目均为NULL,因此无法计算均值。
这是一个可重复的查询-确保更改数据集名称:
CREATE MODEL `samples.TEST_MODELS_001`
TRANSFORM (
flag,split_col,ML.standard_scaler(SAFE_CAST(x as FLOAT64)) OVER() as x
)
OPTIONS
( MODEL_TYPE='LOGISTIC_REG',AUTO_CLASS_WEIGHTS=TRUE,INPUT_LABEL_COLS=['flag'],EARLY_STOP=true,DATA_SPLIT_METHOD='CUSTOM',DATA_SPLIT_COL='split_col',L2_REG = 0.3) AS
SELECT
*,train_test_split = 0 as split_col
FROM (
select
0 as train_test_split,1 as flag,"" as x
union all
select 0,"0"
union all
select 0,1,"1"
union all
select 1,""
union all
select 1,"1"
)
问题似乎与缩放有关,因为如果我使用ML.MIN_MAX_SCALER
而不是ML.STANDARD_SCALER
,它将按预期工作。不确定为什么会发生这种情况,因为显然不是所有x
的值都在训练测试拆分组中NULLs
。
我想知道这是否是一个错误,或者我在这里做错了什么。
解决方法
如果在TRANSFORM之外使用ML.STANDARD_SCALER函数,它将正确返回结果。根据此功能上的documentation:
在TRANSFORM子句中使用此变量时,为标准化表达式而计算的STDDEV和MEAN将自动用于预测。
这意味着它必须计算MEAN和STDDEV才能将结果放在第一位,因此看来应该可以。
我将其报告为BigQuery问题here。我建议订阅问题跟踪程序,以便在BigQuery团队进行更新时接收通知。
更新
这在issue tracker中得到了回答。
分割后,将ML.STANDARD_SCALER函数应用于训练数据。这意味着适用的正确SQL如下:
-- training data: 1,null,null
select ml.standard_scaler(x) over() from (select 1 as x)
union all select null as x
union all select null as x
-- Result:
-- null
-- null
-- null
这就是为什么消息中提到空列的原因。通过将一个记录添加到训练数据的x列的“ 0”值中,您可以进一步看到这种情况。
CREATE MODEL `samples.TEST_MODELS_001`
TRANSFORM (
flag,split_col,ML.standard_scaler(SAFE_CAST(x as FLOAT64)) OVER() as x
)
OPTIONS
( MODEL_TYPE='LOGISTIC_REG',AUTO_CLASS_WEIGHTS=TRUE,INPUT_LABEL_COLS=['flag'],EARLY_STOP=true,DATA_SPLIT_METHOD='CUSTOM',DATA_SPLIT_COL='split_col',L2_REG = 0.3) AS
SELECT
*,train_test_split = 0 as split_col
FROM (
select
0 as train_test_split,1 as flag,"" as x
union all
select 0,"0"
union all
select 0,1,"1"
union all
select 1,""
union all
select 1,"0"
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。