当按列传递损失时,H2O.GeneralizedLowRankModel目标为NA

时间:2018-10-02 10:52:54

标签: r h2o

我正在使用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)

1 个答案:

答案 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,这里是标准化用法的定义标准化:标准化减去平均值,然后将每个变量除以平均值标准偏差。