2017-01-30 21 views
3

SparkRに含まれる分類アルゴリズムのクラス確率を抽出することが可能かどうか(SparkRの組み込み機能またはその他の回避策を使用することができますか?関心のある特定のものがあります。SparkR ML分類関数からクラス確率を抽出する

spark.gbt()
spark.mlp()
spark.randomForest()現在

、私はこれらのモデルで予測関数を使用するとき、私は予測を抽出することができています、実際の確率または「信頼度」は考慮されません。

このトピックに類似した他のいくつかの質問がありますが、SparkRに固有のものはありません。また、Sparkの最新の更新に関して多くの回答がありませんでした。

答えて

1

私は同じ問題に遭遇した、と今this答えを、以下のこと(RがListとして読み込み)Arrayに(Rをデシリアライズすることはできません)確率DenseVectorを変換するSparkR:::callJMethodを使用しています。それは非常にエレガントまたは高速ではないが、それは仕事をしていません:

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]]) 
関連する問題