我想知道是否有可能(使用 SparkR 的内置功能或任何其他解决方法)提取 SparkR 中包含的某些分类算法的类概率。特别感兴趣的是。



目前,当我在这些模型上使用 predict 函数时,我能够提取预测,但不能提取实际概率或“置信度”。

我已经看到其他几个与此主题类似的问题,但没有一个是特定于 SparkR 的,而且许多问题都没有与 Spark 的最新更新有关。

最佳答案

我遇到了同样的问题,现在按照 this 答案使用 SparkR:::callJMethod 将概率 DenseVector(R 无法反序列化)转换为 Array(R 读作 List)。它不是很优雅或快速,但它可以完成工作:

  denseVectorToArray <- function(dv) {
    SparkR:::callJMethod(dv, "toArray")
  }

例如。:
开始你的 Spark session
#library(SparkR)
#sparkR.session(master = "local")

生成玩具数据
data <- data.frame(clicked = base::sample(c(0,1),100,replace=TRUE),
                  someString = base::sample(c("this", "that"),
                                           100, replace=TRUE),
                  stringsAsFactors=FALSE)

trainidxs <- base::sample(nrow(data), nrow(data)*0.7)
traindf <- as.DataFrame(data[trainidxs,])
testdf <- as.DataFrame(data[-trainidxs,])

训练随机森林并运行预测:
rf <- spark.randomForest(traindf,
                        clicked~.,
                        type = "classification",
                        maxDepth = 2,
                        maxBins = 2,
                        numTrees = 100)

predictions <- predict(rf, testdf)

收集你的预测:
collected = SparkR::collect(predictions)

现在提取概率:
collected$probabilities <- lapply(collected$probability, function(x)  denseVectorToArray(x))
str(probs)

当然,SparkR:::callJMethod 的函数包装器有点矫枉过正。您也可以直接使用它,例如使用 dplyr:
withprobs = collected %>%
            rowwise() %>%
            mutate("probabilities" = list(SparkR:::callJMethod(probability,"toArray"))) %>%
            mutate("prob0" = probabilities[[1]], "prob1" = probabilities[[2]])

关于r - 从 SparkR ML 分类函数中提取类概率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41942974/

10-12 19:35