SparkR 2.0分类:如何获得性能矩阵?

SparkR 2.0 Classification: how to get performance matrices?

如何获取 sparkR 分类中的性能矩阵,例如 F1 分数、精度、召回率、混淆矩阵

# 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

Caret 的 confusionMatrix 将不起作用,因为它需要 R 数据帧,而您的数据在 Spark 数据帧中。

一种推荐的获取指标的方法是"collect"使用as.data.frame在本地将您的Spark数据帧发送到R,然后使用caret ETC。;但这意味着您的数据可以放入您的驱动程序机器的主内存中,在这种情况下您当然没有理由使用 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

(关于 150 个样本中的 149 个正确预测,如果你做 showDF(predictions, numRows=150) 你会看到确实有一个 virginica 样本被错误分类为 versicolor)。