Spark MLlib数据挖掘7--评估矩阵

Spark MLlib数据挖掘7–评估矩阵

Spark MLlib附带了许多机器学习算法,可用于学习和预测数据。当这些算法应用于构建机器学习模型时,需要根据某些标准评估模型的性能。而为了对模型的性能进行评价,Spark MLlib还提供了一套度量标准,用于评估机器学习模型的性能,如分类模型评估和回归模型评估。

分类模型评估
分类算法有很多,但分类模型的评估都具有相似的原理。在监督分类问题中,存在每个数据点的真实输出和模型生成的预测输出。因此,每个数据点的结果可以分配到以下四个类别之一:
真阳性(TP) - 标签为正,预测也为正。
真阴性(TN) - 标签为阴性,预测也为阴性。
假阳性(FP) - 标签为阴性但预测为阳性。
假阴性(FN) - 标签为正,但预测为负。

二分类问题模型评估参数回顾:
二进制分类器用于将给定数据集的元素分成两个可能的组中的一个(例如欺诈或非欺诈),是多类分类的特殊情况。大多数二进制分类度量可以推广到多类分类度量。评估参数如下:
Spark MLlib数据挖掘7--评估矩阵_第1张图片
Spark MLlib中二分类问题模型评估样例代码如下:

import org.apache.spark.mllib.classification.LogisticRegressionWithLBFGS
import org.apache.spark.mllib.evaluation.BinaryClassificationMetrics
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.util.MLUtils
val metrics = new BinaryClassificationMetrics(predictionAndLabels)
val precision = metrics.precisionByThreshold
precision.foreach { case (t, p) => println(s“Threshold: $t, Precision: $p”) } //准确率
val recall = metrics.recallByThreshold
recall.foreach { case (t, r) =>  println(s“Threshold: $t, Recall: $r”)} //召回率
val PRC = metrics.pr
val f1Score = metrics.fMeasureByThreshold //F1值
f1Score.foreach { case (t, f) =>  println(s"Threshold: $t, F-score: $f, Beta = 1")}
val beta = 0.5
val fScore = metrics.fMeasureByThreshold(beta)
f1Score.foreach { case (t, f) =>  println(s"Threshold: $t, F-score: $f, Beta = 0.5")}
val auPRC = metrics.areaUnderPR //
val thresholds = precision.map(_._1)
val roc = metrics.roc//ROC值
val auROC = metrics.areaUnderROC

多分类问题评估参数回顾:
一个多类分类描述类大于2的分类问题时,用到的评估指标如下:
Spark MLlib数据挖掘7--评估矩阵_第2张图片
Spark MLlib数据挖掘7--评估矩阵_第3张图片
Spark MLlib中多分类模型评估样例代码如下:

// Instantiate metrics object
val metrics = new MulticlassMetrics(predictionAndLabels)
// Confusion matrix
println("Confusion matrix:")
println(metrics.confusionMatrix) //输出混淆矩阵
val precision = metrics.precision //计算准确率
val recall = metrics.recall ////计算召回率
val f1Score = metrics.fMeasure //计算F1值
// Precision by label
val labels = metrics.labels
labels.foreach { l =>  println(s"Precision($l) = " + metrics.precision(l))}
// Recall by label
labels.foreach { l =>  println(s"Recall($l) = " + metrics.recall(l))}
// False positive rate by label
labels.foreach { l =>  println(s"FPR($l) = " + metrics.falsePositiveRate(l))}
// F-measure by label
labels.foreach { l =>  println(s"F1-Score($l) = " + metrics.fMeasure(l))}

关于回归模型评估:
当从多个独立变量预测连续输出变量时,使用回归分析。评估指标如下:
Spark MLlib数据挖掘7--评估矩阵_第4张图片
Spark MLlib中回归模型评估样例代码如下:

import org.apache.spark.mllib.evaluation.RegressionMetrics
import org.apache.spark.mllib.linalg.Vector
import org.apache.spark.mllib.regression.{LabeledPoint, LinearRegressionWithSGD}
// Load the data
val data = spark.read.format("libsvm").load("data/mllib/sample_linear_regression_data.txt")
  .rdd.map(row => LabeledPoint(row.getDouble(0), row.get(1).asInstanceOf[Vector])).cache()
val numIterations = 100
val model = LinearRegressionWithSGD.train(data, numIterations) //训练随机梯度下降模型
// Get predictions
val valuesAndPreds = data.map{ point => val prediction = model.predict(point.features) (prediction, point.label)}
val metrics = new RegressionMetrics(valuesAndPreds)   //获取回归模型评估矩阵
println(s“MSE = ${metrics.meanSquaredError})//计算误差平方和
println(s“RMSE = ${metrics.rootMeanSquaredError}) //计算均方根误差
println(s“R-squared = ${metrics.r2}) // 计算测定系数
println(s“MAE = ${metrics.meanAbsoluteError}) //计算均方绝对误差
println(s“Explained variance = ${metrics.explainedVariance}) //计算解释差异

你可能感兴趣的:(大数据学习)