Spark ML机器学习库评估指标示例

本文主要对 Spark ML库下模型评估指标的讲解,以下代码均以Jupyter Notebook进行讲解,Spark版本为2.4.5。模型评估指标位于包org.apache.spark.ml.evaluation下。

模型评估指标是指测试集的评估指标,而不是训练集的评估指标

1、回归评估指标

RegressionEvaluator

Evaluator for regression, which expects two input columns: prediction and label.

评估指标支持以下几种:

val metricName: Param[String]

  • "rmse" (default): root mean squared error
  • "mse": mean squared error
  • "r2": R2 metric
  • "mae": mean absolute error

Examples

# import dependencies
import org.apache.spark.ml.regression.LinearRegression
import org.apache.spark.ml.evaluation.RegressionEvaluator

// Load training data
val data = spark.read.format("libsvm")
  .load("/data1/software/spark/data/mllib/sample_linear_regression_data.txt")

val lr = new LinearRegression()
  .setMaxIter(10)
  .setRegParam(0.3)
  .setElasticNetParam(0.8)

// Fit the model
val lrModel = lr.fit(training)

// Summarize the model over the training set and print out some metrics
val trainingSummary = lrModel.summary
println(s"Train MSE: ${trainingSummary.meanSquaredError}")
println(s"Train RMSE: ${trainingSummary.rootMeanSquaredError}")
println(s"Train MAE: ${trainingSummary.meanAbsoluteError}")
println(s"Train r2: ${trainingSummary.r2}")

val predictions = lrModel.transform(test)

// 计算精度
val evaluator = new RegressionEvaluator()
  .setLabelCol("label")
  .setPredictionCol("prediction")
  .setMetricName("mse")
val accuracy = evaluator.evaluate(predictions)
print(s"Test MSE: ${accuracy}")

输出:

Train MSE: 101.57870147367461
Train RMSE: 10.078625971513905
Train MAE: 8.108865602095849
Train r2: 0.039467152584195975

Test MSE: 114.28454406581636

2、分类评估指标

2.1 BinaryClassificationEvaluator

Evaluator for binary classification, which expects two input columns: rawPrediction and label. The rawPrediction column can be of type double (binary 0/1 prediction, or probability of label 1) or of type vector (length-2 vector of raw predictions, scores, or label probabilities).

评估指标支持以下几种:

val metricName: Param[String]
param for metric name in evaluation (supports "areaUnderROC" (default), "areaUnderPR")

Examples

import org.apache.spark.ml.classification.LogisticRegression
import org.apache.spark.ml.evaluation.BinaryClassificationEvaluator
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator

// Load training data
val data = spark.read.format("libsvm").load("/data1/software/spark/data/mllib/sample_libsvm_data.txt")

val Array(train, test) = data.randomSplit(Array(0.8, 0.2))

val lr = new LogisticRegression()
  .setMaxIter(10)
  .setRegParam(0.3)
  .setElasticNetParam(0.8)

// Fit the model
val lrModel = lr.fit(train)

// Summarize the model over the training set and print out some metrics
val trainSummary = lrModel.summary
println(s"Train accuracy: ${trainSummary.accuracy}")
println(s"Train weightedPrecision: ${trainSummary.weightedPrecision}")
println(s"Train weightedRecall: ${trainSummary.weightedRecall}")
println(s"Train weightedFMeasure: ${trainSummary.weightedFMeasure}")

val predictions = lrModel.transform(test)
predictions.show(5)

// 模型评估
val evaluator = new BinaryClassificationEvaluator()
  .setLabelCol("label")
  .setRawPredictionCol("rawPrediction")
  .setMetricName("areaUnderROC")
val auc = evaluator.evaluate(predictions)
print(s"Test AUC: ${auc}")

val mulEvaluator = new MulticlassClassificationEvaluator()
  .setLabelCol("label")
  .setPredictionCol("prediction")
  .setMetricName("weightedPrecision")
val precision = evaluator.evaluate(predictions)
print(s"Test weightedPrecision: ${precision}")

输出结果:

Train accuracy: 0.9873417721518988
Train weightedPrecision: 0.9876110961486668
Train weightedRecall: 0.9873417721518987
Train weightedFMeasure: 0.9873124561568825

+-----+--------------------+--------------------+--------------------+----------+
|label|            features|       rawPrediction|         probability|prediction|
+-----+--------------------+--------------------+--------------------+----------+
|  0.0|(692,[122,123,148...|[0.29746771419036...|[0.57382336211209...|       0.0|
|  0.0|(692,[125,126,127...|[0.42262389447949...|[0.60411095396791...|       0.0|
|  0.0|(692,[126,127,128...|[0.74220898710237...|[0.67747871191347...|       0.0|
|  0.0|(692,[126,127,128...|[0.77729372618481...|[0.68509655708828...|       0.0|
|  0.0|(692,[127,128,129...|[0.70928896866149...|[0.67024402884354...|       0.0|
+-----+--------------------+--------------------+--------------------+----------+

Test AUC: 1.0

Test weightedPrecision: 1.0

2.2 MulticlassClassificationEvaluator

Evaluator for multiclass classification, which expects two input columns: prediction and label.

注:既然适用于多分类,当然适用于上面的二分类

评估指标支持如下几种:

val metricName: Param[String]
param for metric name in evaluation (supports "f1" (default), "weightedPrecision", "weightedRecall", "accuracy")

Examples

import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.classification.DecisionTreeClassificationModel
import org.apache.spark.ml.classification.DecisionTreeClassifier
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.feature.{IndexToString, StringIndexer, VectorIndexer}

// Load the data stored in LIBSVM format as a DataFrame.
val data = spark.read.format("libsvm").load("/data1/software/spark/data/mllib/sample_libsvm_data.txt")

// Index labels, adding metadata to the label column.
// Fit on whole dataset to include all labels in index.
val labelIndexer = new StringIndexer()
  .setInputCol("label")
  .setOutputCol("indexedLabel")
  .fit(data)
// Automatically identify categorical features, and index them.
val featureIndexer = new VectorIndexer()
  .setInputCol("features")
  .setOutputCol("indexedFeatures")
  .setMaxCategories(4) // features with > 4 distinct values are treated as continuous.
  .fit(data)

// Split the data into training and test sets (30% held out for testing).
val Array(trainingData, testData) = data.randomSplit(Array(0.7, 0.3))

// Train a DecisionTree model.
val dt = new DecisionTreeClassifier()
  .setLabelCol("indexedLabel")
  .setFeaturesCol("indexedFeatures")

// Convert indexed labels back to original labels.
val labelConverter = new IndexToString()
  .setInputCol("prediction")
  .setOutputCol("predictedLabel")
  .setLabels(labelIndexer.labels)

// Chain indexers and tree in a Pipeline.
val pipeline = new Pipeline()
  .setStages(Array(labelIndexer, featureIndexer, dt, labelConverter))

// Train model. This also runs the indexers.
val model = pipeline.fit(trainingData)

// Make predictions.
val predictions = model.transform(testData)

// Select example rows to display.
predictions.select("predictedLabel", "label", "features").show(5)

// Select (prediction, true label) and compute test error.
val evaluator = new MulticlassClassificationEvaluator()
  .setLabelCol("indexedLabel")
  .setPredictionCol("prediction")
  .setMetricName("accuracy")
val accuracy = evaluator.evaluate(predictions)
println(s"Test Error = ${(1.0 - accuracy)}")

输出结果:

+--------------+-----+--------------------+
|predictedLabel|label|            features|
+--------------+-----+--------------------+
|           0.0|  0.0|(692,[95,96,97,12...|
|           0.0|  0.0|(692,[122,123,124...|
|           0.0|  0.0|(692,[122,123,148...|
|           0.0|  0.0|(692,[126,127,128...|
|           0.0|  0.0|(692,[126,127,128...|
+--------------+-----+--------------------+
only showing top 5 rows

Test Error = 0.040000000000000036

原文地址:https://www.cnblogs.com/songxitang/p/12404873.html

时间: 2024-07-29 20:49:36

Spark ML机器学习库评估指标示例的相关文章

机器学习模型评估指标汇总

在使用机器学习算法过程中,针对不同的问题需要不用的模型评估标准,这里统一汇总.主要以两大类分类与回归分别阐述. 一.分类问题 1.混淆矩阵 混淆矩阵是监督学习中的一种可视化工具,主要用于比较分类结果和实例的真实信息.矩阵中的每一行代表实例的预测类别,每一列代表实例的真实类别. 真正(True Positive , TP):被模型预测为正的正样本. 假正(False Positive , FP):被模型预测为正的负样本. 假负(False Negative , FN):被模型预测为负的正样本. 真

机器学习性能评估指标

因为接触到机器学习的部分知识,不是很懂.以下内容来自知乎,作为笔记留存. 作者原文博客:http://charleshm.github.io/2016/03/Model-Performance/ 作者:Charles Xiao 链接:https://www.zhihu.com/question/19645541/answer/91694636 精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是对的.那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测

掌握Spark机器学习库 大数据开发技能更进一步

第1章 初识机器学习在本章中将带领大家概要了解什么是机器学习.机器学习在当前有哪些典型应用.机器学习的核心思想.常用的框架有哪些,该如何进行选型等相关问题.1-1 导学1-2 机器学习概述1-3 机器学习核心思想1-4 机器学习的框架与选型.. 第2章 初识MLlib本章中,将介绍Spark的机器学习库,对比Spark当前两种机器学习库(MLLib/ML)的区别,同时介绍Spark机器学习库的应用场景以及行业应用优势.2-1 MLlib概述2-2 MLlib的数据结构2-3 MLlib与ml2-

掌握Spark机器学习库 大数据开发技能更进一步 高清无密

掌握Spark机器学习库 大数据开发技能更进一步 "大数据时代"已经不是一个新鲜词汇了,随着技术的商业化推广,越来越多的大数据技术已经进入人们的生活.与此同时,大数据技术的相关岗位需求也越来越多,更多的同学希望向大数据方向转型.本课程主要讲解Spark机器学习库,侧重实践的讲解,同时也以浅显易懂的方式介绍机器学习算法的内在原理.学习本课程,可以为想要转型大数据工程师或是入行大数据工作的同学提供实践指导作用.欢迎感兴趣的小伙伴们一起来学习. 第1章 初识机器学习 在本章中将带领大家概要了

【机器学习】性能评估指标

机器学习性能评估指标 TP.TN.FP.FN FN:False(假的) Negative(反例),模型判断样本为负例,但模型判断错了,事实上是正样本.(漏报率)FP:False(假的) Positive(正例),模型判断样本为正例,但模型判断错了,事实上是负样本.(误报率)TN:True(真的) Negative(负例),模型判断样本为负例,事实上也是负样本,模型的判断是对的.TP:True(真的) Positive(正例),模型判断样本为正例,事实上也是正样本,模型判断是对的. Precisi

离线轻量级大数据平台Spark之MLib机器学习库概念学习

Mlib机器学习库 1.1机器学习概念 机器学习有很多定义,倾向于下面这个定义.机器学习是对能通过经验自动改进的计算机算法的研究.机器学习依赖数据经验并评估和优化算法所运行出的模型.机器学习算法尝试根据训练数据使得表示算法行为的数学目标最大化,并以此来进行预测或作出决定.机器学习问题分类为几种,包括分类.回归.聚类.所有的机器学习算法都经过一条流水线:提取训练数据的特征->基于特征向量训练模型->评估模型选择最佳.特征提取主要是提取训练数据中的数值特征,用于数学建模.机器学习一般有如下分类:

机器学习算法分类及其评估指标

机器学习的入门,我们需要的一些基本概念: 机器学习的定义 M.Mitchell<机器学习>中的定义是: 对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么我们称这个计算机程序从经验E中学习. 算法分类 两张图片很好的总结了(机器学习)的算法分类: 评估指标 分类(Classification)算法指标: Accuracy准确率 Precision精确率 Recall召回率 F1 score 对于分类问题的结果可以用下表表示(说明:True或者False

掌握Spark机器学习库-07.6-线性回归实现房价预测

数据集 house.csv 数据概览 代码 package org.apache.spark.examples.examplesforml import org.apache.spark.ml.feature.VectorAssembler import org.apache.spark.ml.regression.LinearRegression import org.apache.spark.sql.SparkSession import org.apache.spark.{SparkCon

机器学习基础 | 分类模型评估指标

目录 成对指标 综合指标 图形指标 在处理机器学习的分类问题中,我们需要评估分类结果的好坏以选择或者优化模型,本文总结二分类任务中常用的评估指标.对于多分类任务的评估指标,可以参考这篇文章 先从我们最熟知的混淆矩阵(confusion matrix)说起. source 鉴于混淆矩阵看着比较抽象,可以参考下图 常用的评估指标可以分为3类: 成对指标,包括正确率(精度)&错误率,Precision&Reall,TPR(Sentitivity)&TNR(Specificity)等; 综