0

如何獲得性能矩陣在sparkR分類,例如,F1分數,準確率,召回,混淆矩陣SparkR 2.0分類:如何獲得性能矩陣?

# Load training data 
df <- read.df("data/mllib/sample_libsvm_data.txt", source = "libsvm") 
training <- df 
testing <- df 

# Fit a random forest classification model with spark.randomForest 
model <- spark.randomForest(training, label ~ features, "classification", numTrees = 10) 

# Model summary 
    summary(model) 

# Prediction 
    predictions <- predict(model, testing) 
    head(predictions) 

# Performance evaluation 

我試過caret::confusionMatrix(testing$label,testing$prediction)它顯示錯誤:

Error in unique.default(x, nmax = nmax) : unique() applies only to vectors 

回答

2

插入符號的confusionMatrix會不起作用,因爲當數據在Spark數據框中時它需要R數據幀。

一個推薦的方法讓你的指標是「收集」本地您星火dataframes至R使用as.data.frame,然後用caret等;但這意味着您的數據可以放在您的驅動器的主內存中,當然您絕對沒有理由使用Spark ...

所以,這裏有一種方法可以獲得分佈式方式(即,沒有在本地收集數據),使用iris數據爲例:

sparkR.version() 
# "2.1.1" 

df <- as.DataFrame(iris) 
model <- spark.randomForest(df, Species ~ ., "classification", numTrees = 10) 
predictions <- predict(model, df) 
summary(predictions) 
# SparkDataFrame[summary:string, Sepal_Length:string, Sepal_Width:string, Petal_Length:string, Petal_Width:string, Species:string, prediction:string] 

createOrReplaceTempView(predictions, "predictions") 
correct <- sql("SELECT prediction, Species FROM predictions WHERE prediction=Species") 
count(correct) 
# 149 
acc = count(correct)/count(predictions) 
acc 
# 0.9933333 

(關於149所正確預測出的150個樣本,如果做一個showDF(predictions, numRows=150)你確實會看到,有一個單個virginica樣品誤分類爲versicolor)。