【问题标题】:How to force an H2OFrame column as of type Integer in scala?如何在 scala 中强制使用 Integer 类型的 H2OFrame 列?
【发布时间】:2016-05-07 16:21:10
【问题描述】:

我正在训练 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 中的目标列视为二进制(整数)的最佳方法是什么。

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

【问题讨论】:

    标签: scala h2o sparkling-water


    【解决方案1】:

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

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

    解决了我的问题。

    【讨论】:

      【解决方案2】:

      您提到的解决方案是 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()
      

      【讨论】:

      • 谢谢。 .remove() 的好提示!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 2016-09-14
      • 1970-01-01
      • 2022-08-21
      • 2017-04-02
      • 1970-01-01
      • 2010-10-19
      相关资源
      最近更新 更多