本文目录如下:

  • 第2章 Spark ML数学基础
  • 2.1 矩阵向量计算
  • 2.1.1 Breeze 创建函数
  • 2.1.2 Breeze 元素访问
  • 2.1.3 Breeze 其他函数
  • 2.2 BLAS 介绍 (一个线性代数计算库)
  • 2.2.1 BLAS 向量-向量运算
  • 2.2.2 BLAS 矩阵-向量运算
  • 2.2.3 BLAS 矩阵-矩阵运算
  • 2.3 分类效果评估指标
  • 2.3.1 评估指标 (度量指标)
  • 2.3.2 评估指标实例
  • 2.4 交叉验证方法


第2章 Spark ML数学基础

2.1 矩阵向量计算

  • Spark MLlib底层的向量、矩阵运算使用了 Breeze库,Breeze库提供了 Vector/Matrix 的实现以及相应计算的接口 (Linalg)。但是在MLlib里面同时也提供了VectorLinalg等的实现。

2.1.1 Breeze 创建函数

  • (1) 在使用 Breeze 库时,需要导入相关包:
    import breeze.linalg._import breeze.numerics._
  • (2) API:
    http://www.scalanlp.org/api/breeze/index.html#breeze.linalg.package

spark ml支持向量机 spark 向量计算_spark ml支持向量机

2.1.2 Breeze 元素访问

spark ml支持向量机 spark 向量计算_Spark ML_02

2.1.3 Breeze 其他函数

Breeze 三角函数、Breeze 对数和指数函数等。详情略。


2.2 BLAS 介绍 (一个线性代数计算库)

BLAS按照功能被分为三个级别:

  • Level 1:矢量-矢量运算,比如点积 (ddot),加法和数乘(daxpy),绝对值的和(dastum),等等;
  • Level 2:矩阵-矢量运算,最重要的函数是一般的矩阵向量乘法(dgemv);
  • Level 3:矩阵-矩阵运算,最重要的函数是一般的矩阵乘法 (dgemm);

注: 每一种函数操作都区分不同数据类型 (单精度双精度复数)

API: http://www.netlib.org/blas/

2.2.1 BLAS 向量-向量运算

spark ml支持向量机 spark 向量计算_Spark ML_03

2.2.2 BLAS 矩阵-向量运算

spark ml支持向量机 spark 向量计算_交叉验证_04

2.2.3 BLAS 矩阵-矩阵运算

spark ml支持向量机 spark 向量计算_spark ml支持向量机_05


2.3 分类效果评估指标

spark ml支持向量机 spark 向量计算_交叉验证_06


在有监督分类问题中, 存在每个数据点的真实输出,以及模型生成的预测输出。因此, 每个数据点的结果均可分配到如下四个类别中:

  • 真正类(True positive): 标签是正类并且被预测成正类
  • 假正类(False positive): 标签是负类并且被预测成正类
  • 真负类(True negative): 标签是负类并且被预测成负类
  • 假负类(false negative): 标签是正类并且被预测成负类

2.3.1 评估指标 (度量指标)

在对分类器进行评估时, 通常有以下几个评估指标:

  • 准确率(P: Precision): accuracy = (TP)/ (TP + FP)
  • 召回率(R: Recall): recall = TP / (P) = TP / (TP +FP)

准确率表示模型中判为正的样本中有多少是真正的正样本。另外,召回率则展示了测试在检测正类方面有多好。在大多数应用中,准确率和召回率之间存在一个可以接受的平衡。可将两者进行合并,从而得到一个单一度量,称为 F值(F-Measure, 又称F-Score):

spark ml支持向量机 spark 向量计算_交叉验证_07

2.3.2 评估指标实例

// 为模型评估初始化一个多类度量 (metrics包含模型的各种度量信息)
val metrics = new MulticlassMetrics(scoreAndLabels)

// 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 (F1分数)
labels.foreach(
  l => println(s"F1-Score($l) = " + metrics.fMeasure(l))
)

2.4 交叉验证方法

  • (1) 交叉验证法(cross validation)先将数据集 D 划分为 k 个大小相似的互斥子集,即 D=D1D2D3… 并Dk,每个子集之间没有交集。
  • (2) 然后每次用 k-1 个子集的并集作为训练集,余下的那个作为测试集,这样得到 k训练/测试集
  • (3) 可以进行 k 次训练和测试,最终返回的是这 k 个结果的均值
  • (4) 可以随机使用不同的划分多次,比如 1010 折交叉验证通常把交叉验证法称为 k折交叉验证(k-fold cross validation), k最常用的取值是10,为10折交叉验证。

spark ml支持向量机 spark 向量计算_Breeze_08


声明:本文是学习时记录的笔记,如有侵权请告知删除!