2017-02-13 3 views
0

Contexte:clasification forêt d'arbres décisionnels: Comment déduire la probabilité de classe de « probabilityCol »

Je courais un classificateur forêt aléatoire sur une trame de données avec des classes d'étiquette [0,1]. Mon but est d'extraire la probabilité de l'étiquette '1' de la colonne probabilityCol.

Selon le spark ml docs,

probabilityCol vecteur de longueur classes # égal à rawPrediction normalisé à une distribution multinomiale

Question:

  1. Quel est le classement des classes cibles dans le vecteur probabilityCol? Peut-on même déterminer la même chose? Incase je veux extraire la possibilité d'une classe donnée ('1' dans mon cas), quelle est la méthode recommandée pour extraire le même.

Toutes les pistes seront appréciées.

Répondre

0

1) La commande correspond aux valeurs numériques de labelCol (votre nom de colonne cible). Dans la classe de vecteurs de probabilité, '0' passe toujours en premier, puis passe en classe '1', etc. RandomForest ne fonctionne qu'avec des valeurs de classe numériques, de sorte qu'ils agissent toujours comme des index.

2) Supposons que vous ayez dataframe prédiction avec colonne probabilité. Pour obtenir la probabilité pour la classe 1, vous pouvez utiliser la fonction UDF:

import org.apache.spark.ml.linalg.DenseVector 
import org.apache.spark.sql.functions.udf 

val classNum = 1 

def getTop(x : DenseVector) : Double = { 
    x.toArray(classNum) 
} 
val udfGetTop = udf(getTop _) 

val predictionTop = prediction 
    .select("labelIndexed", "probability") 
    .withColumn("label1Prob", udfGetTop($"probability"))