我正在尝试使用 GridCV 在 scala 中进行超参数调整。但是我创建了我的管道和所有内容,我将我的数据集安装到管道中,它非常适合。
然后我添加了一些,然后paramGrid在 4 个阶段后进行交叉验证,它给了我错误:
scala> val cvModel = cv.fit(df)
Tracker started, with env={DMLC_NUM_SERVER=0, DMLC_TRACKER_URI=10.xx.xx.xxx, DMLC_TRACKER_PORT=9091, DMLC_NUM_WORKER=1}
Tracker started, with env={DMLC_NUM_SERVER=0, DMLC_TRACKER_URI=10.xx.xx.xxx, DMLC_TRACKER_PORT=9091, DMLC_NUM_WORKER=1}
Tracker started, with env={DMLC_NUM_SERVER=0, DMLC_TRACKER_URI=10.xx.xx.xxx, DMLC_TRACKER_PORT=9091, DMLC_NUM_WORKER=1}
Tracker started, with env={DMLC_NUM_SERVER=0, DMLC_TRACKER_URI=10.xx.xx.xxx, DMLC_TRACKER_PORT=9091, DMLC_NUM_WORKER=1}
19/02/13 09:16:33 WARN TaskSetManager: Lost task 2.0 in stage 152.0 (TID 916, ip-10.xx.xx.xxx.ec2.internal, executor 7): java.lang.ArrayIndexOutOfBoundsException: 1
at org.apache.spark.ml.linalg.DenseVector.apply(Vectors.scala:448)
at org.apache.spark.ml.evaluation.BinaryClassificationEvaluator$$anonfun$1.apply(BinaryClassificationEvaluator.scala:82)
at org.apache.spark.ml.evaluation.BinaryClassificationEvaluator$$anonfun$1.apply(BinaryClassificationEvaluator.scala:81)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
at org.apache.spark.util.collection.ExternalSorter.insertAll(ExternalSorter..
然后实际上有两三段错误。我无法弄清楚为什么会发生这种情况,因为我是第一次在 scala 中编码。但是根据我的概念和示例中给出的代码,它似乎没有锻炼。
或者有没有其他方法可以对交叉验证进行超参数调优和测试?我在setEvaluator执行代码时遇到了这个问题。我的理解是我的特征形状和 y 预测形状不匹配。但是我如何确保他们这样做呢?
PS 我在 EMR 集群上运行它。我也尝试了同样的事情,只是将算法更改为逻辑回归,它工作得很好。我正在使用 xgboost v0.8 而 spark 是 v2.2
BIG阳
相关分类