2017-02-13 11 views
0

фон:RandomForest КЛАССИФИКАЦИИ: Как вывести вероятность класса из «probabilityCol»

Я бег случайных лесного классификатора на dataFrame с классами меток как [0,1]. Моя цель - извлечь вероятность метки «1» из столбца вероятностиCol.

Согласно spark ml docs,

probabilityCol Вектор длины # классов, равных rawPrediction нормализованы к полиномиального распределения

Вопрос:

  1. Что такое упорядочение целевых классов внутри вектора вероятностьCol? Можем ли мы определить то же самое?

  2. Incase Я хочу извлечь возможность данного класса ('1' в моем случае), что является рекомендуемым способом для его извлечения.

Любые провода будут оценены.

ответ

0

1) Заказ соответствует числовым значениям labelCol (имя целевого столбца). В классе векторов вероятности всегда идет первый, затем идет класс '1' и т. Д. RandomForest работает только с числовыми значениями класса, поэтому они всегда действуют как индексы.

2) Предположим, что у вас есть dataframe предсказание с колонки вероятностью. Чтобы получить вероятность для класса 1, вы можете использовать функцию 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"))