从SparkR ML分类函数中提取类别概率

4
我想知道是否可能(使用SparkR内置功能或其他解决方法)提取包含在SparkR中的某些分类算法的类别概率。 特别感兴趣的是:
spark.gbt() spark.mlp() spark.randomForest()
目前,当我使用这些模型的预测函数时,我能够提取预测值,但无法提取实际的概率或“置信度”。
我看过一些与此主题类似的问题,但没有一个是特定于SparkR的,许多问题在Spark的最新更新方面也没有得到回答。
1个回答

1
我遇到了同样的问题,并且按照this的答案,现在使用SparkR:::callJMethod将概率DenseVector(无法反序列化)转换为Array(R将其读取为List)。这并不是非常优雅或快速,但它完成了工作。
  denseVectorToArray <- function(dv) {
    SparkR:::callJMethod(dv, "toArray")
  }

开始你的Spark会话。
#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]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接