0

我正在训练 aDRFModel并且在评估接收异常时: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视为二进制(整数)的最佳方法是什么。

(这是我关于堆栈溢出的第一个问题。让我知道是否需要更具体或附加整个代码。谢谢。)

4

2 回答 2

1

如果有人仍然可以为我原来的问题提供一个优雅的答案,那将不胜感激。但我发现这些.replace()方法H2OFrame很有帮助。我不得不使用类似的东西

for( i <- 0 until h2oFrame.numCols()) h2oFrame.replace(i, h2oFrame.vec(i).toCategoricalVec)

这解决了我的问题。

于 2016-05-06T04:01:40.920 回答
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()
于 2016-05-07T08:21:10.810 回答