H2O.Dlowrank模型的目标是通过柱传递损失时的NA

H2O.Dlowrank模型的目标是通过柱传递损失时的NA,r,h2o,R,H2o,我正在使用h2oglrm功能。当我试图按列传递loss\u参数,以便为数据帧中的每列指定不同的损失函数时(我有正态、泊松和二项式变量,因此我传递的是“二次”、“泊松”和“逻辑”损失),目标没有得到计算。testmodel@model$objective返回NaN。但同时总结表明,进行的迭代很少,目标是所有迭代都不适用。模型的质量很差,但原型是通过某种方式计算出来的。所以我很困惑。如何为数据集中的每个变量传递不同的损失?下面是一个(我希望)可重复的例子: df <- data.frame(p

我正在使用
h2o
glrm
功能。当我试图按列传递
loss\u
参数,以便为数据帧中的每列指定不同的损失函数时(我有正态、泊松和二项式变量,因此我传递的是“二次”、“泊松”和“逻辑”损失),目标没有得到计算。
testmodel@model$objective
返回
NaN
。但同时总结表明,进行的迭代很少,目标是所有迭代都不适用。模型的质量很差,但原型是通过某种方式计算出来的。所以我很困惑。如何为数据集中的每个变量传递不同的损失?下面是一个(我希望)可重复的例子:

df <- data.frame(p1 = rpois(100, 5), n1 = rnorm(100), b1 = rbinom(100, 1, 0.5))
df$b1 <- factor(df$b1)
h2df <- as.h2o(df)

testmodel <- h2o.glrm(h2df,
         k=3,
         loss_by_col=c("Poisson", "Quadratic", "Logistic"),
         transform="STANDARDIZE")
testmodel@model$objective
summary(testmodel)
plot(testmodel)

df请注意,这里有一张jira票

有趣的是,在运行代码段时不会出现错误。运行您的代码段时,出现以下错误:

错误:来自本地主机的DistributedException/127.0.0.1:54321:“泊松损失L(u,a)需要变量a>=0”,由java.lang.AssertionError引起:泊松损失L(u,a)需要变量a>=0


我可以通过删除
transform=“standard”
来解决此错误,因为标准化可能导致负值。有关转换的更多信息,为了方便起见,您可以查看用户指南,这里是如何使用标准化的定义标准化:标准化减去平均值,然后将每个变量除以其标准偏差。

您使用的是什么版本的h2o?我使用的是3.20.0.8,可能是我使用的原因不获取显式错误在某种程度上与版本有关。当然,泊松变量的标准化是原因。谢谢你指出这一点,从一开始我就应该明白这一点。因此,如果我在集合中有一些正态变量,我希望它们被标准化,同时有一些泊松变量,那么我知道在运行glrm之前,我应该自己标准化正态变量。非常感谢!