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

svmlkihl  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(68)

我得到一个错误。当我在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)
hlswsv35

hlswsv351#

是的,路易斯·费利佩是正确的。请确保
1.你设置分布=“多项”
1.将dat_h20更改为H2O帧,如data_h2o <- as.h2o(dat_h20)
1.确保响应列是因子:data_h2o[,4] <- as.factor(data_h2o[,4]假设第四列是响应列。
通常情况下,如果你有2和3,H2O深度学习将能够自动找出它是一个多类分类。

brtdzjyr

brtdzjyr2#

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

相关问题