我有一个RDD,其元素是ml.dmlc.xgboost4j.LabeledPoint,就像
org.apache.spark.rdd.RDD[ml.dmlc.xgboost4j.LabeledPoint]
函数XGBoost.train需要DMatrix来训练数据,我查看xgboost源代码并找到DMatrix的构造函数,就像DMatrix(Iterator iter,String cacheInfo)。 DMatrix API
但是,我不知道为DMatrix构建Iterator。
任何解决方案?
此外:我只能在spark1.5中使用xgboost4j -v0.5,因此新版本中的某些功能无法使用。
答案 0 :(得分:0)
您可以在xgboost github上找到一个用法示例:https://github.com/dmlc/xgboost/blob/master/jvm-packages/xgboost4j-example/src/main/scala/ml/dmlc/xgboost4j/scala/example/spark/SparkWithRDD.scala
相关部分是:
import org.apache.spark.ml.feature.{LabeledPoint => MLLabeledPoint}
import org.apache.spark.ml.linalg.{DenseVector => MLDenseVector}
val trainRDD = MLUtils.loadLibSVMFile(sc, inputTrainPath).map(lp =>
MLLabeledPoint(lp.label, new MLDenseVector(lp.features.toArray)))
val testSet = MLUtils.loadLibSVMFile(sc, inputTestPath)
.map(lp => new MLDenseVector(lp.features.toArray))
// training parameters
val paramMap = List(
"eta" -> 0.1f,
"max_depth" -> 2,
"objective" -> "binary:logistic").toMap
val xgboostModel = XGBoost.trainWithRDD(trainRDD, paramMap, numRound, nWorkers = args(1).toInt,
useExternalMemory = true)
xgboostModel.predict(testSet, missingValue = Float.NaN)