我正在使用h2o
glrm
函数。当我尝试传递loss_by_col
参数以便为DataFrame中的每一列指定不同的损失函数时(我具有正态变量,泊松变量和二项式变量,因此我传递了“ Quadratic”,“ Poisson”和“ Logistic”损失),则无法计算目标。 testmodel@model$objective
返回NaN
。但同时,摘要显示几乎没有进行任何迭代,所有迭代的目标均为NA。模型的质量很差,但是原型是以某种方式计算的。所以我很困惑。如何为数据集中的每个变量传递不同的损失?这是(我希望)可复制的示例:
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)
答案 0 :(得分:1)
请注意,此here
有一张吉拉票。有趣的是,您在运行代码段时不会出现错误。当我运行您的代码片段时,出现以下错误:
Error: DistributedException from localhost/127.0.0.1:54321: 'Poisson loss L(u,a) requires variable a >= 0', caused by java.lang.AssertionError: Poisson loss L(u,a) requires variable a >= 0
我可以通过删除transform="STANDARDIZE"
来解决此错误,因为标准化会导致出现负值。有关转换的更多信息,为方便起见,您可以查看用户指南here,这里是标准化用法的定义标准化:标准化减去平均值,然后将每个变量除以平均值标准偏差。