Randomforest clasification:如何从" probabilityCol"中推断出类概率。

时间:2017-02-13 22:19:08

标签: apache-spark random-forest apache-spark-ml

背景

我在dataFrame上运行随机林分类器,标签类为[0,1]。我的目标是提取标签' 1'的概率。来自 probabilityCol 列。

根据spark ml docs

  

probabilityCol 长度#等级的向量等于rawPrediction归一化为多项分布

问题

  1. 向量 probabilityCol 中目标类的排序是什么?我们甚至可以确定相同的吗?

  2. 如果我想提取给定课程的可能性(在我的情况下是' 1'),提取相同课程的推荐方法是什么。

  3. 任何线索都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

1)排序对应于labelCol(您的目标列名称)的数值。在概率向量中,类'0'总是先行,然后变为类'1'等等.RandomForest只对数值类值起作用,因此它们总是像索引一样。

2)假设您的数据框预测,列概率。要获得第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"))