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

背景:

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

根据spark ml docs

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

问题

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

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

任何线索将不胜感激。

【问题讨论】:

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


    【解决方案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"))
    

    【讨论】:

      猜你喜欢
      • 2014-05-28
      • 2018-09-13
      • 2015-05-03
      • 2013-01-10
      • 2016-01-28
      • 2021-12-04
      • 2016-06-09
      • 2018-10-23
      • 2019-09-05
      相关资源
      最近更新 更多