如何在scala中强制类型为Integer的H2OFrame列?

时间:2016-05-06 00:42:21

标签: scala h2o sparkling-water

我正在培训DRFModel并在评估接收例外情况时Exception in thread "main" java.lang.ClassCastException: hex.ModelMetricsRegression cannot be cast to hex.ModelMetricsBinomial

数据有一个名为"标签"包含0或1,这是目标列:dRFParameters._response_column = "label"。看起来该模型将目标列值视为实数。

我也遇到了python API的问题,并使用H2OFramehdf['label'] = hdf['label'].asfactor()上的以下内容进行了修复。我是scala和h2o的新手。我想知道强制h2o将H2OFrame中的目标列视为二进制(整数)的最佳方法是什么。

(这是关于堆栈溢出的第一个问题。如果我需要更具体或附上整个代码,请告诉我。谢谢。)

2 个答案:

答案 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()