1.1经验误差与过拟合
分类错误的样本数占总样本数的比例称为:错误率,而把通常叫做的准确率的称为:精度。精度+错误率=1。
同时我们把学习器的实际预测输出与样本的真实输出之间的差异称为:误差,学习器在训练集上的误差称为经验误差或者训练误差,而在新样本上的误差叫做泛化误差。我们建立模型并选择各种模型是为使得泛化误差最小。
但是我们有时我们得到的模型的经验误差很小,学习器把样本数据学习的过于完美了把样本数据的一些特点当做总体数据的样本,认为所有数据都有这个特点那么就使得泛化误差增大,泛化性能下降了,这个现象就是所谓的过拟合。和过拟合相对的是欠拟合,指的是对样本的一般特性都没学习好。
欠拟合现象只需要增强模型的学习能力即可,但是过拟合现象是无法彻底避免的。
我们选择有最小泛化误差的模型,但是我们不能直接得到泛化误差,如果使用训练误差最小这又会出现过拟合现象,因此这明显是不合适的。所以我们针对数据集进行了处理。
1.2评估方法
我们通过实验测试来对学习器的泛化误差进行评估并且进行选择,因此我们需要使用一个测试集来测试学习器对新样本的判别能力。
对于测试集应该尽可能的与训练集互斥,测试样本最大可能的不在训练样本中出现,未在训练样本中使用。通常我们在学习或者比赛时我们只会获得一个数据集,但是我们对于这一个数据集既要训练又要测试:因此我们通常把这一个数据集划分出两个部分————训练集和测试集。
1.2.1划分方法(为了评估模型的性能)
一:留出法
直接将数据集D划分为两个互斥的集合,其中一个集合做训练集S,另一个做测试集T。我们在S上训练出模型,在T上去测试,作为对泛化误差的估计。
要求:1:测试集和训练集的划分要尽可能的保持数据分布的一致性,可以理解为分层抽样。
通常单次使用留出法得到的结果往往不够稳定可靠,所以一般会多次划分,重复实验取平均值。一般使用留出法会将的样本用于训练,剩余的用于测试。
二:交叉验证法
把数据D划分为k个大小相似的互斥子集,每个子集都要尽可能地保持数据分布的一致性(通过分层抽样取得)。然后每次使用k-1个子集做训练集,剩下那个子集作为测试集。这种方法又叫“k折交叉验证法”,最终返回的是k个结果的均值。
如果我们取的k恰好等于样本数,那么此时得到了交叉验证法的特例:留一法。通常留一法的评估结果比较准确,但是计算量有时过于庞大。
三:自助法
给定m个样本的数据集D,然后对它进行采样得到数据集。
:每次从D中随机挑一个样本放入
,然后原数据集不变在进行重复挑选,执行m次后我们得到了包含m个数据地样本
显然中会有重复多次出现的样本,同时D中的一部分样本也不会出现在
中。通过自主采样D中约有36.8%的样本不会出现在
中,我们将
做训练集,
中未出现的做测试集。
自助法适用于数据集较小,难以有效划分数据集和训练集的时候。
1.3性能度量
对于学习器的泛化性能进行评估,不仅需要有效可行的学习方法,还需要度量模型泛化能力的评估标准,称之为性能度量。
1.3.1查准率和查全率
对于二分类问题,根据样本的真实类别和学习器预测类别的组合划分为TP,FP,TN,FN。显而易见的是TP+FP+TN+FN=样本数。
预测 | 结果 | |
真实情况 | 正例 | 反例 |
正例 | TP | FN |
反例 | FP | TN |
查准率P与查全率R分别定义为:
通常查准率P高则查群率R就低,只有一些简单的任务里才能实现双高。
一P-R曲线
我们对学习器的预测结果进行排序,排在前面的样本是学习器认为最可能是正例的,而排在最后的则截然相反。以此顺序逐个把样本作为正例预测,则每次可以得到当前的查全率,查准率。以查准率为纵轴,查全率为横轴作图得到查准率——查全率曲线,简称P-R曲线。
评判方法:一个学习器的P-R曲线若杯另一个学习器的曲线完全包住,则可断言后者的性能优于前者。如果学习器A和B的曲线有交叉部分,通常我们通过比较两个曲线和坐标轴形成的面积大小。
但是面积大小同样不好估算所以就比较平衡点的绝对值大小,平衡点是指当:查全率=查准率,时的取值。这个值越大说明学习器的性能越好。
二ROC曲线
大多学习器的本质是为测试样本产生一个预测值,然后把这个预测值和一个分类阈值进行比较,大于阈值的归为正类,小于阈值的归于反类。
我们把预测样本的值从大到小进行排序,然后按顺序把每一个样本的预测值都作为阈值进行对样本的判断,每次计算出两个重要量的值,分别以他们为横纵坐标,就得到了ROC曲线图。
纵轴为真正例率:,横轴为假正例率:
评判方法:一个学习器的ROC曲线若杯另一个学习器的曲线完全包住,则可断言后者的性能优于前者。如果学习器A和B的曲线有交叉部分,通常我们通过比较两个曲线和坐标轴形成的面积大小。
1.4比较检验
我们用划分方法去评估某个模型的性能,但是要比较模型之间的性能优劣单单比较他们之间的大小是仅仅不够的,我们通过假设检验可以得到在同一个测试集上学习器A和B的泛化性能之间的优劣,以及有多大的把握证明他们之间的优劣关系。
二项检验:假设泛化误差,
一般来说是测试集的泛化错误率。给定置信度
,使用二项分布算出临界值
与测试错误率进行比较。
不能拒绝原假设,说明泛化误差在当置信度为 | |
拒绝原假设. |
t检验:(双边假设检验)
当我们使用多次留出法,或者交叉验法时会得到多个测试错误率,这个时候我们就应该使用t检验。
我们计算出多个测试错误率的均值,方差:
我们假设,计算
之间的差距是否为位于临界范围之内
在 | 接受原假设 |
不在 | 拒绝原假设 |
以上两个假设检验是对单个学习器的泛化性能所做的检验
交叉验证t检验:
学习器a和b使用k折交叉验证法得到的错误率分别为,
.
若两个学习器性能相同则在同一个测试集上的,
然后得到
算出这个数集的均值和方差:
如果变量 小于临界值
那么我们就不能拒绝原假设两个学习器的性能相同,否则则认为两者有显著差异。
进阶交叉t验证:(交叉验证)
每次2折交叉验证之前把数据打乱,使得五次交叉验证的数据划分不重复。对于均值我们采用第一次2折交叉验证的两个结果的均值,然后计算出五次2折的方差。
将变量和
,作比较。
这个算法时比较两个学习器之间的性能。
对于多个学习器我们通常使用Friedman和Nemenyi后续检验
Friedman和Nemenyi后续检验:
当我们需要比较多个学习器的优劣情况时,我们使用N个数据集和k算法进行比较。
原假设为所有的学习器的性能时相同的。
我们对所有算法在每个数据上的泛化性能的优劣进行排序,然后将排序的分化,最后将算法在所有数据上的得分求平均,得到每个算法的平均序值,假设
服从正态分布,方差和均值为
变量,当k和N足够大时,变量服从自由度为k-1的卡方分布。
现在我们通常不使用上述变量,而是使用变量
,此变量服从自由度为k-1和(k-1)*(N-1)的F分布。我们可以通过查表或者编程语言得到F检验的临界值,若此变量大于临界值则拒绝原假设,反之则接受原假设。
如果原假设被拒绝则进行Nemenyi后续检验:
若两个变量平均序值之差大于变量CD 则拒绝两个算法性能相同的假设。
多分类学习:
现实中经常遇到多分类任务,有些二分类学习方法可以直接推广到多分类,通常我们基于一些基本策略,利用二分类学习器来解决分类问题。
假设样本有N个类别,分别为。利用二分类学习器解决多分类任务的基本思路是拆分策略。
经典测拆分策略有三种:一对一,一对余,多对多。
一对一:
将这N个类别两两配对,从而产生N(N-1)/2个分类任务。例如为了区分我们要训练一个分类器。测试阶段同时把样本交给所有分类器,我们会得到N(N-1)/2个分类结果,最终结果由投票产生。
一对余:
每次将一个类别作为正例,其他类别均作为反例。如果有多个学习器均预测为正例,那么我们就根据置信度选择置信度最大的类别作为结果。
多对多:
每次将若干个类别作为正例,其余的作为反例。通常我们需要采用纠错输出码。
编码:对N个类别做出M次划分,每次划分一部分类别化成正类,一部分化成反类,从而形成M个分类器。
解码:M个分类器分别对测试样本进行测试,将测试标记组成一个编码,将预测类别和各个类别各自的类别进行比较,并返回最小距离的类别作为预测结果。
多分类中的类别不均问题:
类别不均问题:指的是分类问题中不同类别的训练样例数目差别很大的情况。
当训练集中正反例类别不均时,令为正例数目,
为反例数目,则观测几率为
,通常我们假设训练集是真实样本的无偏采样,那么观测几率就代编真实几率。只要分类器的预测几率高于观测几率就认定为正例。
注意通常训练集未必是无偏采样,所以通常我们采用其他方法。
方法一欠采样:去除一些反例使得正反例的数目相接近然后再学习。
方法二过采样:通过增加一些正例使得他们的数目达到平衡。
方法三阈值移动:直接基于原始的训练集进行训练,但是在使用分类器进行预测时,将观测几率嵌入决策时即可。
常见的二元分类器有:
逻辑回归分类器
随机梯度下降分类器