迁移指南:如何迁移到 XGBoost4j-Spark jvm 3.x

XGBoost4j-Spark jvm 包在 3.0 版本中经历了重大修改,这可能会导致与现有用户代码的兼容性问题。

本指南将引导您完成更新代码的过程,以确保它与 XGBoost4j-Spark 3.0 及更高版本兼容。

XGBoost4j Spark 包

XGBoost4j-Spark 3.0 已将 xgboost4j 包集成到 xgboost4j-spark_2.12-3.0.0.jar 中,这意味着您现在可以直接在应用程序中使用 xgboost4j-spark

  • 对于 CPU

    <dependency>
        <groupId>ml.dmlc</groupId>
        <artifactId>xgboost4j-spark_${scala.binary.version}</artifactId>
        <version>3.0.0</version>
    </dependency>
    
  • 对于 GPU

    <dependency>
        <groupId>ml.dmlc</groupId>
        <artifactId>xgboost4j-spark-gpu_${scala.binary.version}</artifactId>
        <version>3.0.0</version>
    </dependency>
    

将 XGBoost 应用程序提交到 Spark 集群时,您只需指定单个 xgboost4j-spark 包即可。

  • 对于 CPU

    spark-submit \
      --jars xgboost4j-spark_2.12-3.0.0.jar \
      ... \
    
  • 对于 GPU

    spark-submit \
      --jars xgboost4j-spark-gpu_2.12-3.0.0.jar \
      ... \
    

XGBoost 排序

使用 XGBoostRegressor 进行排序学习已被专门的 XGBoostRanker 取代,该类专门设计用于支持排序算法。

// before xgboost4j-spark 3.0
val regressor = new XGBoostRegressor().setObjective("rank:ndcg")

// after xgboost4j-spark 3.0
val ranker = new XGBoostRanker()

已移除的参数

从 xgboost4j-spark 3.0 开始,以下参数已被移除。

  • cacheTrainingSet

    如果您希望缓存训练数据集,可以选择在将数据拟合到估计器之前在代码中实现缓存。

    val df = input.cache()
    val model = new XGBoostClassifier().fit(df)
    
  • trainTestRatio

    可以使用以下方法进行评估。

    val Array(train, eval) = trainDf.randomSplit(Array(0.7, 0.3))
    val classifier = new XGBoostClassifer().setEvalDataset(eval)
    val model = classifier.fit(train)
    
  • tracker_conf

    可以使用以下方法配置 RabitTracker。

    val classifier = new XGBoostClassifer()
      .setRabitTrackerTimeout(100)
      .setRabitTrackerHostIp("192.168.0.2")
      .setRabitTrackerPort(19203)
    
  • rabitRingReduceThreshold

  • rabitTimeout

  • rabitConnectRetry

  • singlePrecisionHistogram

  • lambdaBias

  • objectiveType