随机森林分类:如何从“probabilityCol”推断类别概率

Posted

技术标签:

【中文标题】随机森林分类:如何从“probabilityCol”推断类别概率【英文标题】:Randomforest clasification : How to infer class probability from "probabilityCol" 【发布时间】:2017-07-02 01:25:40 【问题描述】:

背景:

我在标签类为 [0,1] 的数据帧上运行随机森林分类器。我的目标是从 probabilityCol 列中提取标签“1”的概率。

根据spark ml docs,

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

问题

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

    如果我想提取给定类的可能性(在我的例子中是“1”),那么推荐的提取方法是什么。

任何线索将不胜感激。

【问题讨论】:

【参考方案1】:

1) 排序对应于 labelCol 的数值(您的目标列名)。在概率向量中,“0”类总是首先出现,然后是“1”类等。RandomForest 仅适用于数字类值,因此它们总是像索引一样。

2) 假设您的数据框 prediction 包含 probability 列。要获得第 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"))

【讨论】:

以上是关于随机森林分类:如何从“probabilityCol”推断类别概率的主要内容,如果未能解决你的问题,请参考以下文章

分类算法 - 随机森林

如何测量随机森林分类器的准确性?

如何序列化大型随机森林分类器

如何使用随机森林分类器确定用于预测类别的特征值范围

如何在 Spark 中处理最新的随机森林中的分类特征?

随机森林回归器的特征选择