Fork me on GitHub

西瓜书《机器学习》学习笔记(1):评估方法与度量指标

笔记直接跳过了第一章,从第二章开始。

本次笔记主要回顾评估方法与性能度量指标。

经验误差与过拟合(2.1, P23)

学习器在训练集上的误差称为训练误差(training error)或经验误差(empirical error),在新样本上的误差称为泛化误差(generalization error),我们希望得到泛化误差小的学习器。

过拟合(overfitting),欠拟合(underfitting)。

多种因素导致过拟合,最常见的就是由于学习能力过于强大,以至于把训练样本不太一般的特性都学到了。欠拟合相反。

欠拟合比较容易克服,如在决策树学习中学习扩展分支,在神经网络学习中增加训练轮数等。

过拟合无法彻底避免。只能“缓解”,减小风险。

评估方法(2.2, P24)

测试集(testing set)上的测试误差(testing error) 作为泛化误差的近似。

留出法(2.2.1, P25)

“留出法”(hold-out) 将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即$D=S\cup T,S\cap T=\oslash $。

常见的划分为:大约2/3-4/5的样本用作训练,剩下的用作测试。

注意:

  • 训练/测试集的划分需要尽可能保持数据分布的一致性
  • 由于划分的随机性,单次留出法得到的评估结果往往不够稳定可靠,一般采用若干次随机划分、重复进行实验评估后取平均值

交叉验证法(2.2.2, P26)

“交叉验证法”(cross validation)先将数据集D划分为k个大小相似的互斥子集,即$D=D_1\cup D_2 \cup \cdots\cup D_k,D_i \cap D_j =\oslash (i\neq j)$

每次用k-1个子集作为训练集,余下的那个子集作为测试集;这样就可以得到k组训练/测试集。从而可进行k次训练和测试,最终返回k次测试结果的均值。

故通常把交叉验证法称为“k折交叉验证”(k-fold cross validation)。
10折交叉验证示意图:

10折交叉验证示意图

与留出法类似,将数据集D划分为K个子集的过程具有随机性,因此K折交叉验证通常也要重复p次,称为p次k折交叉验证,常见的是10次10折交叉验证,即进行了100次训练/测试。特殊地当划分的k个子集的每个子集中只有一个样本时,称为“留一法”,显然,留一法的评估结果比较准确,但对计算机的消耗也是巨大的。

自助法(2.2.3, P27)

“自助法”(bootstrapping)以自助采样法(bootstrapping sampling)为基础。
每次随机从包含m个样本的数据集D中挑选一个样本,将其拷贝到$D’$,然后再将该样本放回D中,使得该样本下次采样时仍有可能被采到。
重复执行m次后,就得到包含m个样本的数据集$D’$。

我们将$D’$用作训练集,$D-D’$(D中除了$D’$以外的样本)用作测试集。

在m次采样中,样本始终不被采到的概率取极限为:

自助法在数据集较小、难以有效划分训练/测试集时很有用。

调参与最终模型(2.2.4, P28)

大多数学习算法都有些参数(parameter) 需要设定,参数配置不同,学得模型的性能往往有显著差别,这就是通常所说的”参数调节”或简称”调参” (parameter tuning)。

当选定好模型和调参完成后,我们需要使用初始的数据集D重新训练模型,即让最初划分出来用于评估的测试集也被模型学习,增强模型的学习效果。

学得模型(训练后的模型)实际使用中遇到的数据称为测试数据,在模型评估选择中用于评估测试的数据集称为“验证集”(calidation set)。【和吴恩达讲得差不多(略有区别?)。吴恩达说,通常将数据分为三类:训练集,验证集与测试集。】

性能度量performance measure(2.3, P28)

分类和回归属于监督学习。

  • 【分类】:对是离散值的结果进行预测。

  • 【回归】:对是连续值的结果进行预测。

回归任务和分类任务的常用性能度量如下图所示。

预测任务:学习器预测结果$f(x)$与真实标记$y$进行比较。

回归任务:“均方误差”(mean squared error)
$$E(f;D) = \frac 1m \sum_{i=1}^m (f(x_i)-y_i)^2 $$

下面将依次介绍上图中分类任务的四类性能度量。

错误率与精度(2.3.1, P29)

错误率:分类错误的样本占样本总数的比例:
$$E(f;D) = \frac 1m \sum_{i=1}^m |(f(x_i)\neq y_i) $$
精度:分类正确的样本占样本总数的比例:
$$acc(f;D) = \frac 1m \sum_{i=1}^m |(f(x_i)= y_i) = 1-E(f;D) $$

错误率+精度=1。

查准率、查全率与F1(2.3.2, P30)

查准率就是准确率,查全率就是召回率。

更具体的,可参考我的这篇文章:准确率、召回率与F1值
【重点,单独列出】

ROC 与AUC(2.3.3, P33)

ROC:受试者工作特性(Receiver Operating Characteristic)。

ROC图的纵坐标为“真正例率”,横坐标为“假正例率”。

真正例率(TPR):【真正例样本数】与【真实情况是正例的样本数】的比值。(查全率)

假正例率(FPR):【假正例样本数】与【真实情况是反例的样本数】的比值。

如图,理想模型是真正例率为100%,假正例率为0%的一点。随机猜测模型则是真正例率与假正例率持平的直线。由此可知,在随机猜测模型左上方的曲线和在其右下方的曲线都代表了什么。(右下方的模型,还不如随机猜测准。)

现实中通常是有限个测试样例来绘制ROC图。无法产生光滑的ROC曲线图。

同样地,进行模型的性能比较时,若一个学习器A的ROC曲线被另一个学习器B的ROC曲线完全包住,则称B的性能优于A。若A和B的曲线发生了交叉,则不太好判断。此时,AUC应运而生。

AUC(Area Under ROC Curve):判断两个ROC曲线的性能,AUC计算的是ROC曲线下的面积。面积越大,性能越好。

代价敏感错误率与代价曲线(2.3.4, P35)

上面的方法中,将学习器的犯错同等对待,但在现实生活中,将正例预测成假例与将假例预测成正例的代价常常是不一样的,例如:将无疾病–>有疾病只是增多了检查,但有疾病–>无疾病却是增加了生命危险。以二分类为例,由此引入了“代价矩阵”(cost matrix)。

二分类代价矩阵

在非均等错误代价下,我们希望的是最小化“总体代价”,这样“代价敏感”(cost sensitive)的错误率为:

同样对于ROC曲线,在非均等错误代价下,性能度量的方法演变成了“代价曲线”,代价曲线横轴是取值在[0,1]之间的正例概率代价,式中p表示正例的概率,纵轴是取值为[0,1]的归一化代价。


代价曲线的绘制:设ROC曲线上一点的坐标为(TPR,FPR) ,则可相应计算出FNR,然后在代价平面上绘制一条从(0,FPR) 到(1,FNR) 的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价,如图所示:

代价曲线

参考

------ 本文结束感谢您的阅读 ------
坚持原创技术分享,您的支持将鼓励我继续创作!