r - 当按列传递损失时,H2O.GeneralizedLowRankModel 目标为 NA
问题描述
我正在使用h2o
glrm
功能。当我试图传递loss_by_col
参数以便为我的 DataFrame 中的每一列指定不同的损失函数时(我有正常、泊松和二项式变量,所以我传递“二次”、“泊松”和“逻辑”损失),目标没有得到计算。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)
解决方案
请注意,这里有一张 jira票
有趣的是,当您运行代码片段时不会出现错误。当我运行您的代码片段时,我收到以下错误:
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"
,因为标准化会导致负值。有关转换的更多信息,您可以查看此处的用户指南为方便起见,这里是如何使用标准化的定义标准化:标准化减去平均值,然后将每个变量除以其标准差。
推荐阅读
- karate - 如何在空手道 API 测试中使用正则表达式验证模板中的响应结构
- amazon-web-services - Route53 不会传播到 Elastic Beanstalk
- centos - 如何使用 cephFS 将 Docker 服务部署到 swarm?
- android - 在 Android 项目上初始化过滤器“drawtext”时出现 FFMpeg 错误
- php - 如何使用 Xpath 抓取 Url
- php - .htaccess:此处不允许的选项 cwp
- android - 带有 PageRow 的leanback BrowseFragment 的自定义标题
- numpy - 将 2D 重塑为 4D 数组
- regex - 在 Fluentd 中查找两个正则表达式的匹配项
- php - 删除数组 PHP 中的数组 0