2016-05-06 20 views
0

我正在训练DRFModel,同时评估接收异常:Exception in thread "main" java.lang.ClassCastException: hex.ModelMetricsRegression cannot be cast to hex.ModelMetricsBinomial如何在scala中强制类型为Integer的H2OFrame列?

数据有一个名为“label”的列,其中包含0或1,并且这是目标列:dRFParameters._response_column = "label"。看起来模型将目标列值视为实数。

我对python API也有这个问题,并通过使用以下H2OFramehdf['label'] = hdf['label'].asfactor()来修复。我是scala和h2o的新手。我想知道什么是迫使h2o将H2OFrame中的目标列设置为二进制(Integer)的最佳方法。

(这是我的堆栈溢出的第一个问题。让我知道如果我需要更具体的或附加的全部代码。谢谢。)

回答

1

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

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

这解决了我的问题。

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() 
+0

感谢。用'.remove()'好的提示! –

相关问题