提问人:statsstudent 提问时间:10/1/2023 最后编辑:jonrsharpestatsstudent 更新时间:10/1/2023 访问量:48
如何修复拟合 h2o 模型时 R 中的“实际列必须包含二进制类标签,但发现基数”错误?
How to fix "Actual column must contain binary class labels, but found cardinality" error in R when fitting the h2o model?
问:
我收到错误。当我在 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)
答:
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
是的,路易斯·费利佩是对的。请确保
- 设置 distribution=“multinomial”
- 将您的dat_h20更改为 H2O 框架为 data_h2o <- as.h2o(dat_h20)
- 确保响应列是一个因子:data_h2o[,4] <- as.factor(data_h2o[,4],假设第四列是响应列。
通常,如果你有 2 和 3,H2O 深度学习将能够自动确定它是一个多类分类。
评论
0赞
statsstudent
10/1/2023
谢谢。我分别在训练和验证数据上使用了 as.h2o,因为当我首先在数据帧上使用它时,我的训练数据会出错。我仍然收到基数错误
评论
h2o.deeplearning()