【发布时间】:2016-09-16 04:10:29
【问题描述】:
我在 R 中有一个 lm 模型,我已经对其进行了训练和序列化。在函数内部,我将模型和特征向量(一个数组)作为输入传递,我有:
CREATE OR REPLACE FUNCTION lm_predict(
feat_vec float[],
model bytea
)
RETURNS float
AS
$$
#R-code goes here.
mdl <- unserialize(model)
# class(feat_vec) outputs "array"
y_hat <- predict.lm(mdl, newdata = as.data.frame.list(feat_vec))
return (y_hat)
$$ LANGUAGE 'plr';
这会返回错误的y_hat!!我知道这一点是因为这个其他解决方案有效(这个函数的输入仍然是模型(在字节数组中)和一个 feat_vec(数组)):
CREATE OR REPLACE FUNCTION lm_predict(
feat_vec float[],
model bytea
)
RETURNS float
AS
$$
#R-code goes here.
mdl <- unserialize(model)
coef = mdl$coefficients
y_hat = coef[1] + as.numeric(coef[-1]%*%feat_vec)
return (y_hat)
$$ LANGUAGE 'plr';
我做错了什么??它是相同的未序列化模型,第一个选项也应该给我正确的答案...
【问题讨论】:
-
这是R代码吗?它看起来像半条蟒蛇;冒号在 R 中不起作用,
return或+也不起作用。 -
是的,它是 R + 伪代码 - 你可以忽略函数声明 实际上 - 这是 Postgres 的 PL/R 函数内部,但我不想把重点放在 Postgres 上
-
...那么伪代码如何返回结果,正确与否?
-
我对我的问题进行了一些修改,希望现在很清楚。第一个选项返回错误的数字,而第二个选项返回正确的预测!但是我没有错误
-
更好,但如果没有a reproducible example,仍然无法回答。
标签: r postgresql lm predict plr