È noto che GBT in Spark fornisce le etichette previste sin d'ora.Previsione delle probabilità delle classi in caso di alberi di incremento graduale in Spark utilizzando l'output dell'albero
stavo pensando di provare a calcolare le probabilità previste per una classe (ad esempio tutte le istanze che rientrano sotto una certa foglia)
I codici per la costruzione di 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
Questo mi dà 2 alberi di profondità 2, come di seguito per semplicità:
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
la mia domanda è: Posso usare gli alberi sopra per calcolare probabilità previste come:
Rispetto a ogni istanza nel set funzione utilizzato per la previsione
exp (punteggio foglia dal punteggio albero 0 + foglia da albero 1)/(1 + exp (punteggio foglia da albero punteggio 0 + foglia da albero 1))
Questo mi dà una sorta di probabilità. Ma non sono sicuro se sia il modo giusto per farlo. Inoltre, se esiste un documento che spiega come vengono calcolati i punteggi delle foglie (previsione). Sarei davvero grato se qualcuno potesse condividerlo.
Qualsiasi suggerimento sarebbe superbo.
Perché non si incolla qui il codice di calcolo della probabilità. Ciò aiuterà la comunità – Run2
Appena aggiunto un po 'di codice sopra – Run2
Questo è uguale alle altre risposte da exp (x)/(1 + exp (x)) = 1/(1 + exp (-x)), e il peso per albero 0 è 1 rispetto al tasso di apprendimento – Brian