连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

 

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

一.训练误差与测试误差

1.1 基本概念

在分类任务中,通常把错分的样本数占样本总数的比例称为错误率(error rate)。比如m个样本有a个预测错了,错误率就是 E = a/m;与错误率相对的 1 - a/m 称为精度(accuracy),或者说正确率,数值上 精度 = 1 - 错误率。

更一般地,我们通常会把学习器的实际预测输出与样本的真实输出之间的差异称为误差(error)。学习器在训练集上的误差称为训练误差(training error)或者经验误差(empirical error)。而在新样本上的误差则称为泛化误差(generalization error)或者测试误差(test error;)。显然,我们希望得到泛化误差小的学习器。所以我们希望模型的泛化误差尽可能小,但现实是,我们无法知道新样本是怎样的,所以只能尽可能地利用训练数据来最小化经验误差。

如果对软件测试有兴趣,想了解更多的测试知识,解决测试问题,以及入门指导,
帮你解决测试中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,
又或者已经工作但是经常觉得难点很多,觉得自己测试方面学的不够精想要继续学习的,
想转行怕学不会的,都可以加入我们644956177。
群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!

1.2 训练误差

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

1.3 泛化误差(测试误差)

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择
连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

1.4 过拟合

是否经验误差小,泛化误差就一定小呢?这不是一定的,如果模型相比训练数据来说过于复杂,那就很有可能把训练样本自身的一些特点当作整个样本空间的特点,这样就会导致泛化性能下降,从而使得在训练数据上有很小的经验误差,但一旦面对新样本就会有很大误差,这种情况叫做过拟合(overfitting),亦称过配。相对的是欠拟合(underfitting),亦称欠配
连续苦情剧:机器学习入门笔记(一):模型性能评价与选择
有多种因素可能导致过拟合,其中最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下而造成的。

下图展示了训练误差、测试误差与模型复杂程度之间的关系:

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择
随着模型复杂程度的增加:

  • 训练误差逐渐减小,甚至为0;
  • 测试误差先减小,达到最小值后,又增大。
  • 当模型过于复杂时,将产生过拟合。

欠拟合比较容易克服,只要适当地增加模型复杂度(比方说增加神经网络的层数或者训练轮数,扩展决策树学习中的分支)就好。但过拟合是无法彻底避免的,我们所能做的只是缓解,或者说减小其风险(比如减少模型复杂度/增加训练数据),这也是机器学习发展中的一个关键阻碍。

这样,在学习时就要防止过拟合,进行最优的模型选择,即选择复杂度相当的模型,以达到使测试误差最小的学习目的。下面介绍几种常用的模型选择方法。

 

 

 

二.模型评估方法

2.1 留出法(hold-out)

“留出法” (hold-out) 直接将数据集 D 划分为两个互斥的集合,其中一个集合作为训练集 S,另一个作为测试集 T, 即 D = S∪ T, S ∩ T = ∅ 。在 S 上训练出模型后,用 T 来评估其测试误差,作为对泛化误差的估计。需注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似。

如果从采样(sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为分层采样(stratified sampling)。例如通过对 D 进行分层采样而获得含70%样本的训练集 S 和含30%样本的测试集 T ,若 D 包含500 个正例、500 个反例,则分层采样得到的 S 应包含350 个正例、350 个反例,而 T 则包含150 个正例和150 个反例;若 S 、T 中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差。

另一个需注意的问题是,即使在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集 D 进行分割。例如在上面的例子中,可以把 D 中的样本排序,然后把前350 个正例放到训练集中,也可以把最后350 个正例放到训练集中,……这些不同的划分将导致不同的训练/测试集,相应的,模型评估的结果也会有差别。因此单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。 例如进行100 次随机划分,每次产生一个训练/测试集用于实验评估, 100 次后就得到100 个结果,而留出法返回的则是这100 个结果的平均。

此外,我们希望评估的是用 D 训练出的模型的性能,但留出法需划分训练/测试集,这就会导致一个窘境:若令训练集 S 包含绝大多数样本,则训练出的模型可能更接近于用 D 训练出的模型, 但由于 T 比较小,评估结果可能不够稳定准确;若令测试集 T 多包含一些样本, 则训练集 S 与 D 差别更大了,被评估的模型与用 D 训练出的模型相比可能有较大差别,从而降低了评估结果的保真性(fidelity),这个问题没有完美的解决方案,常见做法是将大约2/3∼4/5 的样本用于训练,剩余样本用于测试。

2.2 正则化

模型选择的典型方法是正则化(regularization). 正则化是 结构风险最小化策略的实现,是在经验风险上加一个正则化项(eglrizer)或罚项(penalty term). 正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大.比如,正则化项可以是模型参数向量的范数.

正则化一般具有如 下形式:

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择
其中,第1项是经验风险,第2项是正则化项,λ ≥ 0为调整两者之间关系的系数.

正则化项可以取不同的形式,例如,回归问题中,损失函数是平方损失,正则化项可以是参数向量的L2范数: .

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择
正则化符合奥卡姆剃刀(Occam’s razor)原理, 奥卡姆剃刀原理应用于模型选择时变为以下想法:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型.从贝叶斯估计的角度来看,正则化项对应于模型的先验概率.可以假设复杂的模型有较大的先验概率,简单的模型有较小的先验概率.

2.3 交叉验证

“交叉验证法” (cross validation)先将数据集DDD划分为kkk个大小相似的互斥子集, 即 D = D1∪ D2∪…∪ Dk, Di ∩ Dj = ∅ (i ≠ j) 每个子集 Di 都尽可能保持数据分布的一致性,即从 D 中通过分层采样得到。然后,每次用 k−1 个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。

显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,为强调这一点,通常把交叉验证法称为"k折交叉验证" (k-fold crossvalidation)。k最常用的取值是10 ,此时称为10折交叉验证; 其他常用的k值有5、20 等。

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择
特别地,假定数据集D中包m个样本,若令k=m,则得到了交叉验证法的一个特例:留一法(Leave-One-Out,简称LOO)。这样做的好处是不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分为m个子集一一每个子集包含一个样本;留一法使用的训练集与初始数据集相比只少了一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型与期望评估的用DDD训练出的模型很相似。因此一般来说,留一法的评估结果往往被认为是比较准确的。但是!!! 留一法也有其缺陷:在数据集比较大时,训练m个模型的计算开销可能是难以忍受的(例如数据集包含1 百万个样本,则需训练1 百万个模型),而这还是在未考虑算法调参的情况下。另外,留一法的估计结果也未必永远比其他评估方法准确;"没有免费的午餐"定理对实验评估方法同样适用。

2.4 自助法

我们希望评估的是用 D 训练出的模型。但在留出法和交叉验证法中,我们都需要对数据集进行划分,保留了一部分样本用于测试,从而使得实际评估的模型所用的数据集比 D 小,引入了一些因训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但计算复杂度又太高了。有没有什么办法可以减少训练样本规模不同造成的影响,同时还能比较高效地进行实验估计呢?

自助法(bootstrapping) 正是我们需要的答案,以自助采样(bootstrap sampling) 为基础,对包含 m 样本的数据集 D 进行有放回的 m 次采样以获得同等规模的训练集。在这 m 次采样中都不被抽到的概率大约为0.368,也即数据集 D 中有大约1/3的样本是训练集中没有的。因此,我们可以采用这部分样本作为验证集,所得的结果称为包外估计(out-of-bag estimate)。

Note!!! 自助法适用于数据集小,难以划分训练/验证集的情况。此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。但是!!! 自助法产生的数据集改变了初始数据集的分布, 也因此引入了一些额外的误差。因此,在初始数据量足够时,留出法和交叉验证法更常用一些。

三.模型性能评价

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure)。性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果。比方说搭建推荐系统,两个模型中一个精度高,一个覆盖度高,如果我们想让更多的商品得到推荐可以就会选后一个模型。所以说,模型的好坏是相对的,取决于我们采用什么性能度量,而采用什么性能度量则应取决于我们的任务需求。

3.1 错误率与精度

本章开头提到了错误率和精度,这是分类任务中最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务. 错误率是分类错误的样本数占样本总数的比例精度则是分类正确的样本数占样本总数的比例. 对样例集D,分类错误率定义为
连续苦情剧:机器学习入门笔记(一):模型性能评价与选择
精度则定义为:
连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

3.2 查准率,查全率,F1,P-R曲线

错误率和精度虽常用,但并不能满足所有任务需求. 以西瓜问题为例,假定瓜农拉来一车西瓜, 我们用训练好的模型对这些西瓜进行判别,显然,错误率衡量了有多少比例的瓜被判别错误.但是 若我们关心的是“挑出的西瓜中有多少比例是好瓜”,或者“所有好瓜中有多少比例被挑了出来”, 那么错误率显然就不够用了,这时需要使用其他的性能度量.

类似的需求在信息检索、Web搜索等应用中经常出现,例如在信息检索中,我们经常会关心“检索出的信息中有多少比例是用户感兴趣的”“用户感兴趣的信息中有多少被检索出来了” . “ 查准率”(precision)与“查全率”(recall) 是更为适用于此类需求的性能度量.

假设我们正常处理一个二分类问题,按照模型预测值和真实值可以把测试样本划分为四种情形:真正例(true positive),假正例(false positive),真反例(true negative),假反例(false negative)。 可以把结果表示为下图这个矩阵——混淆矩阵(confusion matrix)。

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

显然有TP+FP+TN+FN=样例总数。

查准率,又称准确率(precision), 用于衡量模型避免错误的能力,分母是模型预测的正例数目。

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

查全率,又称召回率(recall), 用于衡量模型避免缺漏的能力,分母是测试样本真正包含的正例数目。
连续苦情剧:机器学习入门笔记(一):模型性能评价与选择
一般来说,这两者是矛盾的,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。

例如,若希望将好瓜尽可能多地选出来,则可通过增加选瓜的数量来实现,如果将所有西瓜都选上,那么所有的好瓜也必然都被选.上了,但这样查准率就会较低;若希望选出的瓜中好瓜比例尽可能高,则可只挑选最有把握的瓜,但这样就难免会漏掉不少好瓜,使得查全率较低.通常只有在一些简单任务中,才可能使查全率和查准率都很高.

在很多情形下,我们可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为"最可能"是正例的样本,排在最后的则是学习器认为"最不可能"是正例的样本。按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率、查准率以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称" P-R 曲线"显示该曲线的图称为" P-R图"。

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

P-R图直观地显示出学习器在样本总体.上的查全率、查准率.在进行比较时, 若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者, 例如图2.3中学习器A的性能优于学习器C;如果两个学习器的P-R曲线发生了交叉,例如图2.3中的A与B,则难以-一般性地断言两者孰优孰劣,只能在具体的查准率或查全率条件下进行比较.然而,在很多情形下,人们往往仍希望把学习器A与B比出个高低.这时一个比较合理的判据.是比较P-R曲线下面积的大小,它在一定程度上表征了学习器在查准率和查全率.上取得相对“双高”的比例.但这个值不太容易估算,因此,人们设计了一一些综合考虑查准率、查全率的性能度量。

“平衡点”(Break-Event Point, 简称BEP) 就是这样一个度量, 它是“查准率=查全率”时的取值,例如图2.3中学习器C的BEP是0.64,而基于BEP的比较,可认为学习器A优于B.

但BEP 还是过于简化了些,更常用的是 F1 度量:
连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

F1,是查准率和查全率的调和平均,用于综合考虑这两个性能度量。

在一些应用中,对查准率和查全率的重视程度有所不同.例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确是用户感兴趣的,此时查准率更重要; 而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯, 此时查全率更重要. F1度量的一般形式一Fβ;, 能让我们表达出对查准率/查全率的不同偏好,它定义为:

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

其中β> 0度量了查全率对查准率的相对重要性. β = 1时退化为标准的F1; β>1时查全率有更大影响;β<1时查准率有更大影响.

3.3 ROC曲线

在不同的应用任务中,我们可根据任务需求来采用不同的截断点,例如若我们更重视“查准率”,则可选择排序中靠前的位置进行截断;若更重视“查全率",则可选择靠后的位置进行截断.因此,排序本身的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏,或者说,“一般情况下”泛化性能的好坏. ROC曲线则是从这个角度出发来研究学习器泛化性能的有力工具.

ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线, 它源于“二战”中用于敌机检测的雷达信号分析技术,二十世纪六七十年代开始被用于一些心理学、医学检测应用中,此后被引入机器学习领域.与2.3.2节中介绍的P-R曲线相似,我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了“ROC曲线”.与P-R曲线使用查准率、查全率为纵、横轴不同,ROC曲线的纵轴是“真正例率”(True Positive Rate,简称TPR),横轴是“假正例率”(False PositiveRate,简称FPR), 基于表2.1中的符号,两者分别定义为:

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

TPR其实就等于召回率。ROC曲线如下图:

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

进行学习器的比较时,与P-R图相似,若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者;若两个学习器的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣.此时如果一定要进行比较,则较为合理的判据是比较ROC曲线下的面积,即AUC(AreaUnderROC Curve), 如图2.4所示.

从定义可知,AUC可通过对ROC曲线下各部分的面积求和而得.假定ROC曲线是由坐标为{(x1,y1), (x2, y2)…(xm. ym)}的点按序连接而形成(x1=0, xm= 1),参见图2.4(b),则AUC可估算为:

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

3.4 混淆矩阵

3.4.1 多类别混淆矩阵

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择
例:基于混淆矩阵的手写体数字识别分类模型评价混淆矩阵为10行*10列
连续苦情剧:机器学习入门笔记(一):模型性能评价与选择
连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

3.4.2 基于多类别混淆矩阵的评价指标

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择

如果对软件测试有兴趣,想了解更多的测试知识,解决测试问题,以及入门指导,
帮你解决测试中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,
又或者已经工作但是经常觉得难点很多,觉得自己测试方面学的不够精想要继续学习的,
想转行怕学不会的,都可以加入我们644956177。
群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!

连续苦情剧:机器学习入门笔记(一):模型性能评价与选择