本文目录如下:
- 第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
里面同时也提供了Vector
和Linalg
等的实现。
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
2.1.2 Breeze 元素访问
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 向量-向量运算
2.2.2 BLAS 矩阵-向量运算
2.2.3 BLAS 矩阵-矩阵运算
2.3 分类效果评估指标
在有监督分类问题中, 存在每个数据点的真实输出,以及模型生成的预测输出。因此, 每个数据点的结果均可分配到如下四个类别中:
-
真正类(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
):
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=D1
并D2
并D3
… 并Dk
,每个子集之间没有交集。 - (2) 然后每次用
k-1
个子集的并集作为训练集,余下的那个作为测试集,这样得到k
组训练/测试集。 - (3) 可以进行
k
次训练和测试,最终返回的是这k
个结果的均值。 - (4) 可以随机使用不同的划分多次,比如
10
次10
折交叉验证通常把交叉验证法称为 “k折交叉验证
”(k-fold cross validation),k
最常用的取值是10
,为10
折交叉验证。
声明:本文是学习时记录的笔记,如有侵权请告知删除!