1.经验误差与过拟合
通常我们把分类错误的样本数占样本总数的比例称为错误率
精度 = 1- 错误率 :如果在m个样本有a个样本分类错误,则错误率E= a/m,精度 = 1- a/m
误差:学习器在实际预测输出与样本的真实输出之间的误差称为误差
经验误差:学习器在训练集上的误差称为“训练误差”或“经验误差”,在新样本上的误差称为泛化误差
过拟合(学习能力过于强大):学习器把训练样本学得“太好”的时候,很可能已经把训练样本自身的一些特点当作了所有潜在的样本都会具有的一般性质,这样就会导致泛化性能下降,这种现象在机器学习中称为“过拟合”。与过拟合相对的是“欠拟合(学习能力低下)”,这是指对训练样本的一般性质尚未学好。
过拟合是无法彻底避免的,我们所能做的只是“缓解”,或者说是减小其风险。
2.评估方法
测试样本应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现
2.1留出法
直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即D = S∪T ,A∩T = ∅
在使用流出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
留出法的窘境:若令训练集S包含绝大多数样本,则训练出的模型可能更接近于用D训练出模型,但由于T比较小,评估结果可能不够稳定准确;若测试集T多包含一些样本,则训练集S与D差别更大了,被评估的模型与用D训练出的模型相比可能有较大差别,从而降低了评估结果的保真性。这个问题没有完美解决方案,常见做法是讲大约2/3~4/5的样本用于训练,剩余样本用于测试
2.2交叉验证法(k折交叉验证)
先讲数据集D划分为k个大小相似的互斥子集,即D = D1∪D2∪D3∪.......∪DK,Di∩Dj = ∅(i不等于j)。每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后用k-1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这个k个测试结果的均值。k常用10;其他常用值5,20等。
与留出法相似,将数据集D划分为k个子集同样存在多种划分方式,为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,评估结果是这p次k折交叉验证结果的均值,常见10次10折交叉验证。
在数据集比较大时,训练m个模型的计算开销可能是难以忍受的
2.3自助法
直接以自助采样法为基础,给定包含m个样本的数据集D,我么对它进行采样产生数据集D‘;每次随机从D中挑选一个样本,将其拷贝放入D‘,然后在将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到,这个过程重复执行m次,我们就得到了包含m个样本的数据集D‘,这就是自助采样的结果。
D中有一部分样本会在D‘中多次出现,样本在m次采样中始终不被采到的概率是(1-1/m)的每次方,
初始数据集D中约有36.8%的样本未出现在采样数据集D‘中.于是我们可将D'用作训练集,D\D‘用作测试集;这样,实际评估的模型与期望评估的模型都使用m个训练样本,而我们任有数据总量约1/3没在训练集中出现的样本用于测试,这样的测试结果,亦称“保外估计”
自助法在数据集较小、难以有效划分训练/测试集时很有用。
在初始数据量足够时,留出法和交叉验证法更常用一些
2.4调参与最终模型
在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,这就是通常所说的“参数调节”或“调参”
现实中常用做法,是对每个参数选定一个范围和变化步长,例如在【0,0.2】范围内以0.05为步长,则实际要评估的候选参数值有5个,最终是从这5个候选值中产生选定值。这样选定的参数值往往不是最佳值,但这是在计算开销和性能估计之间进行折中的结果,通过这个折中,学习过程才变得可行。
我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为 训练集和验证集,基于验证集上的性能来进行模型选择和调参
3.性能度量
对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量
模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,是决定于任务需求。
3.2查准率和查全率与F1
错误率和精度虽然常用,但不不能满足所有任务需求。例如信息检索、web搜索等我们常关心的是“检索出的信息中有多少比例是用户感兴趣的”,“查准率”与“查全率”是更为适合用于此类需求的性能对量。
查准率和查全率是一对矛盾的数量。一般来说查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。
例如:若希望将好瓜尽可能多地选出来,则可通过增加选瓜的数量来实现,如果将所有西瓜都选上,那么所有的好瓜也必然都被选上了,但这样查准率就会较低;若希望选出的瓜中好瓜比例尽可能高,则可自挑选最有把握的瓜,但这样就难免会漏掉不少好瓜,使得查全率较低,通常只有在一些简单任务中,才可能使查全率和查准率都很高。
“平衡点”就是这样一个度量,它是“查准率=查全率”时的取值,例如图2.3中学习器C的BEP是0.64,而基于BEP的比较,可认为学习器A优于B。
在一些应用中,对查准率和查全率的重视程度有所不同。例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确是用户感兴趣的,此时查准率更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要.
其中β>0度量了查全率对查准率的相对重要性。β = 1时退化为标准的F1,β>1时查全率有更大影响;β<1时查准率有更大影响。
我们希望在n个二分类混淆矩阵上综合考察查准率和查全率。
一种直接的做法是先在各混淆矩阵上分别计算出查准率和查全率,记为(P1,R1),(P2,R2),...(Pn,Rn),在计算平均值,这样就得到“宏查准率macro-P”、“宏查全率macro-R”,以及相应的“宏F1”(macro-F1):
还可先将各混淆矩阵的对应元素进行平均,的到TP、FP、TN、FN的平均值,在基于这些平均值计算出“微查准率(macro-P)",“微查全率(macro-R)”和“微F1”(micro-F1):
2.3ROC与AUC
测试样本产生一个实值或概率预测,然后将这个预测值与一个分类阀值进行比较,大于阀值为正,否则为反。
例如:预测样本测出一个[0.0,1.0]之间的实值,然后将这个值与0.5比较,大于0.5正,否则反。这个实值或概率预测的结果好坏,直接决定了学习器的泛化能力。
我们可以根据预测样本进行排序,“最可能”是正例的排在最前面,“最不可能”的排在后面。这样,分类过程就相当于在这个排序中以某个“截断点”将样本分为两部分,前一部分判作正,后一部分判作反。
“截断点”的设置:根据任务需求来采用不同的截断点
例如:重视“查准率”,则可选择排序中靠前的位置进行截断;若重视“查全率”,则可选择靠后的位置进行截断。
因此,排序本身的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏,或者说,"一般情况下"泛化性能的好坏。ROC曲线就是从这个角度出发来研究学习器泛化性能的有力工具。
ROC全称:受试者工作特征曲线,根据学习预测的结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出俩个重要量的值,分别以它们为横、纵坐标图,就得到了“ROC曲线”。
与P-R曲线使用查准率、查全率为纵、横轴不同,ROC曲线的纵轴是“真正例率”,横轴是“假正例率”
AUC:ROC曲线下的面积
代价敏感错误率与代价曲线
”非均等代价“为权衡不同类型错误所造成的不同损失,可为错误赋予”非均等代价“
其中cost ij表示将第i类样本预测为第j类样本的代价。一般来说,cost ii = 0;若将第0类判别为第1类所造成的损失更大,则cost01 > cost10;损失程度相差越大,cost01 与cost 10 值的差别越大。
2.4比较检验
1.假设检验 对单个学习器泛化性能的假设进行检验,而在现实任务中,更多时候我们需对不同学习器的性能进行比较,下面将介绍使用于此类情况的假设检验方法。
2.交叉验证t检验
3.McNemar检验
4.Friedman检验 与Nemenyi后续检验 :交叉验证t检验 和 McNemar检验都是在一个数据集上比较俩个算法的性能,而在很多时候,我们会在一组数据集上对多个算法进行比较。
当有多个算法参与比较时,一种做法是在每个数据集上分别列出两两比较的结果,而在两两比较时可使用前述方法;另一种方法更为直接,即使用基于算法排序的Friedman检验。
2.5偏差与方差
对学习算法除了通过实验估计其泛化性能,人们往往还希望了解它“为什么”具有这样的性能,“偏差-方差分解”是解释学习算法泛化性能的一种重要工具。
泛化误差可分解为偏差、方差和噪声之和。
偏差:度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。
方差:度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据忧动所造成的影响。
噪声:则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
偏差-方差分解:泛化性能是由学习算法的能力,数据的充分性以及学习任务本身的难度所共同决定的。给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据忧动产生的影响小。