2017-01-30 15 views
3

Мне интересно, возможно ли это (используя встроенные функции SparkR или любой другой обходной путь), для извлечения вероятностей класса некоторых алгоритмов классификации, включенных в SparkR. Особо интересны.Извлечение вероятности класса из SparkR ML Классификация функций

spark.gbt()
spark.mlp()
spark.randomForest()

В настоящее время, когда я использую функцию предсказать, на этих моделях я могу извлечь предсказания, но не фактические вероятности или «уверенность».

Я видел несколько других вопросов, похожих на эту тему, но не относящихся к SparkR, и многие из них не получили ответа в отношении последних обновлений Spark.

ответ

1

я столкнулся с той же проблемой, и после this ответа теперь использует SparkR:::callJMethod для преобразования вероятности DenseVector (что R не может десериализацию) к Array (который R читается как List). Это не очень элегантно и быстро, но это делает работу:

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

например: начать свой искровой сеанс

#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]])