2017-08-16 12 views
1

これはバグではありませんが、理解するための質問です。ブースターオブジェクトからgetModelDumpを呼び出すと、num_roundパラメータにあるツリー数に達しません。私は "num_round"が100の場合、XGBoostは100個のツリーを順次生成し、getModelDumpを呼び出すとこれらのツリーがすべて表示されると考えていました。私は論理的な理由があるか、知識が間違っていると確信しています。この状況を説明していただけますか?質問へXGBoostはnum_roundパラメータに指定された数のツリーを生成しません

val paramMap = List(
     "eta" -> 0.1, "max_depth" -> 7, "objective" -> "binary:logistic", "num_round" ->100, 
     "eval_metric" -> "auc", "nworkers" -> 8).toMap 
    val xgboostEstimator = new XGBoostEstimator(paramMap) 
//TrainModel is another set of standard Spark features like StringIndexer, OnehotEncoding and VectorAssembler 
    val pipelineXGBoost = new Pipeline().setStages(Array(trainModel, xgboostEstimator)) 
    val cvModel = pipelineXGBoost.fit(train) 
//Below call generates only 2 tree instead of 100 as num_round is 100!!! 
    println(cvModel.stages(1).asInstanceOf[XGBoostClassificationModel].booster.getModelDump()(0)) 

Githubのリンクはhttps://github.com/dmlc/xgboost/issues/2610

バージョンは以下の通りgetModelDumpの結果から、Scalaの2.11

"ml.dmlc" % "xgboost4j" % "0.7", 
    "ml.dmlc" % "xgboost4j-spark" % "0.7", 
    "org.apache.spark" %% "spark-core" % "2.2.0", 
    "org.apache.spark" %% "spark-sql" % "2.2.0", 
    "org.apache.spark" %% "spark-graphx" % "2.2.0", 
    "org.apache.spark" %% "spark-mllib" % "2.2.0", 

答えて

0

私はなっていませんでした(0 .. num_round)を使用しています。すべてのインデックスは別のツリーに対応しています。

回答済みリンクhttps://github.com/dmlc/xgboost/issues/2610

関連する問題