我正在培训DRFModel
并在评估接收例外情况时Exception in thread "main" java.lang.ClassCastException: hex.ModelMetricsRegression cannot be cast to hex.ModelMetricsBinomial
。
数据有一个名为"标签"包含0或1,这是目标列:dRFParameters._response_column = "label"
。看起来该模型将目标列值视为实数。
我也遇到了python API的问题,并使用H2OFrame
:hdf['label'] = hdf['label'].asfactor()
上的以下内容进行了修复。我是scala和h2o的新手。我想知道强制h2o将H2OFrame
中的目标列视为二进制(整数)的最佳方法是什么。
(这是关于堆栈溢出的第一个问题。如果我需要更具体或附上整个代码,请告诉我。谢谢。)
答案 0 :(得分:1)
如果有人仍能为我原来的问题提供优雅的答案,那就不胜感激了。但我发现.replace()
上的H2OFrame
方法很有帮助。我不得不使用类似的东西
for( i <- 0 until h2oFrame.numCols()) h2oFrame.replace(i, h2oFrame.vec(i).toCategoricalVec)
解决了我的问题。
答案 1 :(得分:0)
您提到的解决方案是目前仅在H2O上提供的解决方案。
如果你不再需要这个Vec,你可以通过删除退回的Vec来做得更好。它从内部H2O的DKV商店中删除以前的Vector。删除不是自动完成的,因为在某些情况下,您可能会决定保留旧的Vec。
for( i <- 0 until h2oFrame.numCols()){
h2oFrame.replace(i, h2oFrame.vec(i).toCategoricalVec).remove()
}
如果您只想将一列转换为分类,则可以执行
h2oFrame.replace(h2oFrame.find("target"),h2oFrame.vec("target").toCategoricalVec).remove()