2017-08-16 1 views
1

Dies ist kein Bug, sondern eine Frage zu verstehen. Wenn ich getModelDump vom Booster-Objekt aus anrufe, bekomme ich nicht so viele Bäume wie ich im Parameter "num_round". Ich dachte, wenn "num_round" 100 ist, wird XGBoost 100 Bäume der Reihe nach erzeugen und ich werde alle diese Bäume sehen, wenn ich getModelDump rufe. Ich bin mir sicher, dass es einen logischen Grund dafür gibt oder mein Wissen falsch ist. Könnten Sie bitte diese Situation erklären?XGBoost erzeugt nicht so viele Bäume wie im Parameter num_round angegeben

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 Link auf die Frage https://github.com/dmlc/xgboost/issues/2610

Versionen verwenden, wie unten 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", 

Antwort