如何修复拟合 h2o 模型时 R 中的“实际列必须包含二进制类标签,但发现基数”错误?

How to fix "Actual column must contain binary class labels, but found cardinality" error in R when fitting the h2o model?

提问人:statsstudent 提问时间:10/1/2023 最后编辑:jonrsharpestatsstudent 更新时间:10/1/2023 访问量:48

问:

我收到错误。当我在 R 中使用 h2o 中的深度学习功能时,就会发生这种情况。我的响应是一个分类变量,它有 3 个值,所以我不能将其更改为二进制标签。

错误:java.lang.IllegalArgumentException:实际列必须包含二进制类标签,但发现基数为 3!

这是我的输入:

h2o.init()
dat_h20 = data.frame(Event=as.factor(space_data$Event), TrajA= space_data$TrajA, AcousticA = space_data$AcousticA, HullScan= as.factor(space_data$HullScan), MCStatus = as.factor(space_data$MCStatus))
set.seed(2023)

set = sample(1:150, 150 , replace = FALSE)
data_train = as.h2o(dat_h20[set,])
head(data_train)
data_val = as.h2o(dat_h20[-set,])

value = exp(seq(-10,-3, length = 20))
value
validation_errors = numeric(20) # validation error for each regularisation parameter
?h2o.deeplearning
dat_h20[1]
for (i in 1:length(value))
{
model = h2o.deeplearning(x = 2:5, y = 1 ,
                         training_frame = data_train, 
                         validation_frame = data_val,
                         standardize = TRUE, 
                         hidden = c(5,5), 
                         activation = 'Rectifier', 
                         distribution = 'multinomial',
                         loss = 'CrossEntropy',
                         l2 = value[i],
                         rate = 0.01,
                         adaptive_rate = FALSE,
                         epochs = 1000,
                         reproducible = TRUE,
                         seed = 2,
                         )
validation_errors[i]= h2o.logloss(model, train = TRUE, valid = TRUE)
}

plot(value, validation_errors)
R 深度学习 H2O

评论

0赞 Ron 10/1/2023
参加参观。另请参阅“如何提问”,并在您的问题中添加一个最小的可重现示例
0赞 Darren Cook 10/1/2023
@statsstudent 展开您的问题,以包括触发错误的代码。即调用或您正在使用的任何算法。这将帮助人们回答您(或将您指向文档 docs.h2o.ai/h2o/latest-stable/h2o-docs/index.html 的特定页面h2o.deeplearning()

答:

0赞 Luis Felipe 10/1/2023 #1

确保多类设置:在 H2O 的深度学习函数中,分类的默认行为是期望二进制标签。对于多类分类,当提供具有两个以上级别的分类响应列时,系统应自动处理它。如果已将响应变量编码为数字,则这可能是问题的根源。最好将其作为一个因素

评论

0赞 Luis Felipe 10/1/2023
在将数据发送到 H2O 模型之前,请确保响应列是具有三个级别的因子。例如,如果您的数据框是 df,而响应列是 response,则可以使用如下所示的 somting 将其转换为因子,df$response <- as.factor(df$response)
0赞 statsstudent 10/1/2023
非常感谢您提供的有用信息。您知道如何确保多类设置处于打开状态吗?
1赞 Wendy 10/1/2023 #2

是的,路易斯·费利佩是对的。请确保

  1. 设置 distribution=“multinomial”
  2. 将您的dat_h20更改为 H2O 框架为 data_h2o <- as.h2o(dat_h20)
  3. 确保响应列是一个因子:data_h2o[,4] <- as.factor(data_h2o[,4],假设第四列是响应列。

通常,如果你有 2 和 3,H2O 深度学习将能够自动确定它是一个多类分类。

评论

0赞 statsstudent 10/1/2023
谢谢。我分别在训练和验证数据上使用了 as.h2o,因为当我首先在数据帧上使用它时,我的训练数据会出错。我仍然收到基数错误