Predicción de probabilidades de clases en el caso de árboles de aumento de gradiente en Spark utilizando la salida del árbol

Se sabe que GBT s en Spark le da etiquetas pronosticadas a partir de ahora.

Estaba pensando en tratar de calcular las probabilidades predichas para una clase (por ejemplo, todas las instancias que caen bajo una hoja determinada)

Los códigos para construir GBT

import org.apache.spark.SparkContext
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.tree.GradientBoostedTrees
import org.apache.spark.mllib.tree.configuration.BoostingStrategy
import org.apache.spark.mllib.tree.model.GradientBoostedTreesModel
import org.apache.spark.mllib.util.MLUtils

//Importing the data
val data = sc.textFile("data/mllib/credit_approval_2_attr.csv") //using the credit approval data set from UCI machine learning repository

//Parsing the data
val parsedData = data.map { line =>
    val parts = line.split(',').map(_.toDouble)
    LabeledPoint(parts(0), Vectors.dense(parts.tail))
}

//Splitting the data
val splits = parsedData.randomSplit(Array(0.7, 0.3), seed = 11L)
val training = splits(0).cache() 
val test = splits(1)

// Train a GradientBoostedTrees model.
// The defaultParams for Classification use LogLoss by default.
val boostingStrategy = BoostingStrategy.defaultParams("Classification")
boostingStrategy.numIterations = 2 // We can use more iterations in practice.
boostingStrategy.treeStrategy.numClasses = 2
boostingStrategy.treeStrategy.maxDepth = 2
boostingStrategy.treeStrategy.maxBins = 32
boostingStrategy.treeStrategy.subsamplingRate = 0.5
boostingStrategy.treeStrategy.maxMemoryInMB =1024
boostingStrategy.learningRate = 0.1

// Empty categoricalFeaturesInfo indicates all features are continuous.
boostingStrategy.treeStrategy.categoricalFeaturesInfo = Map[Int, Int]()

val model = GradientBoostedTrees.train(training, boostingStrategy)  

model.toDebugString

Esto me da 2 árboles de profundidad 2 como a continuación por simplicidad:

 Tree 0:
    If (feature 3 <= 2.0)
     If (feature 2 <= 1.25)
      Predict: -0.5752212389380531
     Else (feature 2 > 1.25)
      Predict: 0.07462686567164178
    Else (feature 3 > 2.0)
     If (feature 0 <= 30.17)
      Predict: 0.7272727272727273
     Else (feature 0 > 30.17)
      Predict: 1.0
  Tree 1:
    If (feature 5 <= 67.0)
     If (feature 4 <= 100.0)
      Predict: 0.5739387416147804
     Else (feature 4 > 100.0)
      Predict: -0.550117566730937
    Else (feature 5 > 67.0)
     If (feature 2 <= 0.0)
      Predict: 3.0383669122382835
     Else (feature 2 > 0.0)
      Predict: 0.4332824083446489

Mi pregunta es: ¿Puedo usar los árboles anteriores para calcular probabilidades pronosticadas como:

Con respecto a cada instancia en el conjunto de características utilizadas para la predicción

exp (puntaje de hoja del árbol 0 + puntaje de hoja del árbol 1) / (1 + exp (puntaje de hoja del árbol 0 + puntaje de hoja del árbol 1))

Esto me da una especie de probabilidad. Pero no estoy seguro si es la forma correcta de hacerlo. Además, si hay algún documento que explique cómo se calcula la puntuación de la hoja (predicción). Estaría realmente agradecido si alguien puede compartir.

Cualquier sugerencia sería excelente.

Respuestas a la pregunta(4)

Su respuesta a la pregunta