周志华机器学习西瓜书学习笔记(二)上 | 第二章:模型评估与选择

1. 经验误差与过拟合

        我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error), 学习器在训练集上的误差称为“训练误差”(training error)或“经验误差”(empirical error),在新样本上的误差称为“泛化误差”(generalization error)。

        对于学习器,我们目的是使其在新样本上也能具有较好的表现。为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的分辨。在这种情况下,如果学习器对训练样本的学习不够,就会导致“欠拟合”(underfitting);如果学习器对于训练样本学习过度,很可能将训练样本自身特点当作了潜在样本的一般性特征,这样就会导致 “过拟合”(overfitting)。欠拟合比较容易克服,例如在决策树学习中扩展分支、在神经网络学习中增加训练轮数等,而过拟合是机器学习面临的关键障碍,而且必须认识到,过拟合是无法彻底避免的。

2. 评估方法

        通常,我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此,需使用一个“测试集”(testing set)来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”(testing error)作为泛化误差的近似。通常我们假设测试样本是从样本真实分布中独立同分布采样而得。但需注意的是,测试样本要尽量不在训练集中出现、未在训练过程中使用过。

        假设只有一个包含m个样例的数据集 \\ D={(x_1,y_1),(x_2,y_2),.,(x_m,y_m)},既要训练,又要测试,可以通过以下做法对 D 进行适当的处理,从中产生出训练集 S 和测试集 T 。

2.1 留出法

        “留出法”(hold-out)直接将数据集 D 划分为两个互斥的集合,其中一个 集合作为训练集 S ,另一个作为测试集 T ,即 D=S\cup T,S\cap T=\varnothing 。在 S 上训练出模型后,用 T 来评估其测试误差,作为对泛化误差的估计。
         以二分类任务为例,假定D 包含1000个样本,将其划分为 S 包含700个样 本, T 包含300个样本,用 S 进行训练后,如果模型在T上有90个样本分类错误,那么其错误率为90/300\times 100\%=30\%,相应的,精度为1-30\%=70\%

        需注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似。如果从采样(sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”(stratified sampling)。

        另外,单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。留出法通常将大约2/3~4/5的样本用于训练,剩余样本用于测试。

2.2 交叉验证法

        “交叉验证法”(cross validation)先将数据集 D 划分为k个大小相似的互斥子集,即

D=D_1\cup D_2\cup...\cup D_k,D_i\cap D_j=\varnothing (i\neq j)

        每个子集D_j都尽可能保持数据分布的一致性,即从 D 中通过分层采样得到。然后,每次用 k-1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果 的均值。显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于k 的取值,为强调这一点,通常把交叉验证法称为“k折交叉验证”(k-fold cross validation)。例如,k最常用的取值是10,此时称为10折交叉验证。

        k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值,例如常见的有 “10次10折交叉验证”。假定数据集D中包含m个样本,若令k=m,则得到了交叉验证法的一 个特例:留一法(Leave-One-Out,简称LO0)。显然,留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分为m个子集,每个子集包含 一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似。因此,留一法的评估结果往往被认为比较准确。留一法的缺陷在于,在数据集比较大时,训练m个模型的计算量是十分庞大的。

2.3 自助法

        “自助法”(bootstrapping)是一个比较好的解决方案,它直接以自助采样法(bootstrap sampling)为基础。给定包含m个样本的数据集D,我们对它进行采样产生数据集D:

  • 每次随机从D中挑选一个样本,将其拷贝放入D'。
  • 再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到。
  • 这个过程重复执行m次后,我们就得到了包含m 个样本的数据集D',这就是自助采样的结果.

        通过自助采样,初始数据集D中约有36.8%的样本未出现在采样数据集D′ 中。于是我们可将D'用作训练集,D\D'用作测试集;这样,实际评估的模型与期望评估的模型都使用m个训练样本,而我们仍有数据总量约1/3的、没在训练集中出现的样本用于测试。这样的测试结果,亦称“包外估计”(out-of-bag estimate)。
         自助法在数据集较小、难以有效划分训练/测试集时很有用;此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。 然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此,在初始数据量足够时,留出法和交叉验证法更常用一些。

2.4 调参与最终模型

        在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,这就是通常所说的“参数调节”或 简称“调参”(parameter tuning)。给定包含m个样本的数据集D,在模型评估与选择过程中由于需要留出一部分数据进行评估测试,事实上我们只使用了一部分数据训练模型。因此,在模型选择完成后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型。这个模型在训练过程中使用了所有m个样本,这才是我们最终提交给用户的模型。
        另外,需注意的是,我们通常把学得模型在实际使用中遇到的数据称为测试数据,为了加以区分,模型评估与选择中用于评估测试的数据集常称为“验证集”(validation set)。

3. 性能度量

        对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure)。性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果。、

        在预测任务中,给定样例集\\ D={(x_1,y_1),(x_2,y_2),.,(x_m,y_m)},其中y_i是示例x_i的真实标记。要评估学习器 f 的性能,就要把学习器预测结果f(x) 与真实标记y进行比较。回归任务最常用的性能度量是“均方误差”(mean squared error):E(f;D)=\frac{1}{m}\sum_{i=1}^{m}(f(x_i)-y_i)^2

3.1 错误率与精度

        错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。对样例集D,分类错误率定义为

E(f;D)=\frac{1}{m}\sum_{i=1}^{m}\parallel (f(x_i)\neq y_i)

        精度则定义为

acc(f;D)=\frac{1}{m}\sum_{i=1}^{m}\parallel (f(x_i)= y_i)\\ \\ =1-E(f;D)

3.2 查准率、查全率与F1

        对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、 假反例(false negative)四种情形,令TP、FP、TN、FN分别表示其对应的样例数,则显然有TP+FP+TN+FN=样例总数。

        查准率P查全率R分别定义为

P=\frac{TP}{TP+FP}\\ \\ R=\frac{TP}{TP+FN}\\

        查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。

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

        P-R图直观地显示出学习器在样本总体上的查全率、查准率。在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者,例如图2.3中学习器A的性能优于学习器C;如果两个学习器的P-R曲线发生了交叉,例如图2.3中的A与B,这时一个比较合理的判据是比较P-R曲线下面积的大小。人们还设计了一些综合考虑查准率、查全率的性能度量。 “平衡点”(Break-Event Point,简称BEP)就是这样一个度量,它是“查准率=查全率”时的取值,例如图2.3中学习器C的BEP是0.64,而基于BEP 的比较,可认为学习器A优于B。

        此外,F1度量更常用:

F1=\frac{2\times P\times R}{P+R}

        对于多个二分类任务,一种直接的做法是先在各混淆矩阵上分别计算出查准率和查全率, 记为(P_1,R_1),(P_2,R_2),.,(P_n,R_n),再计算平均值,这样就得到“宏查准率”(macro-P)、“宏查全率”(macro-R),以及相应的“宏F1”(macro-F1):

macro-P=\frac{1}{n}\sum_{i=1}^{n}P_i\\ \\ macro-R=\frac{1}{n}\sum_{i=1}^{n}R_i\\ \\ macro-F1=\frac{2\times macro-P\times macro-R}{macro-P +macro-R}

        还可先将各混淆矩阵的对应元素进行平均,得到TP、FP、TN、FN的平均值,分别记为TP、FP、TN、FN,再基于这些平均值计算出“微查准率”(micro-P)、“微查全率”(micro-R)和“微F1”(micro-F1):

micro-P=\frac{\overline{TP}}{\overline{TP}+\overline{FP}}\\ micro-R=\frac{\overline{TP}}{\overline{TP}+\overline{FN}}\\ \\ micro-F1=\frac{2\times micro-P\times micro-R}{micro-P +micro-R}

3.3 ROC与AUC

        ROC(Receiver Operating Characteristic)曲线,我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了“ROC曲线”。与P-R曲线使用查准率、查全率为纵、横轴不同,ROC曲线的纵轴是“真正例率”(True Positive Rate,简称TPR),横轴是“假正例率”(False Positive Rate,简称FPR),两者分别定义为:

TPR=\frac{TP}{TP+FN}\\ \\ FPR=\frac{FP}{TN+FP}

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

 \\ AUC=1-l_{rank}

3.4 代价敏感错误率与代价曲线

        以二分类任务为例,我们可根据任务的领域知识设定一个“代价矩阵”(cost matrix),如表2.2所示,其中cost_{ij}表示将第i类样本预测为第j类样本的代价。一般来说,cost_{ii}=0;若将第0类判别为第1类所造成的损失更大,则cost_{01}>cost_{10};损失程度相差越大,cost_{01}cost_{10}值的差别越大。

        在非均等代价下,我们所希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”(total cost)。若将表2.2中的第0类作为正类、第1类作为反类,令D^+D^-分别代表样例集D的正例子集和反例子集,则“代价敏感”(cost-sensitive)错误率为:

        在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线”(cost curve)则可达到该目的。代价曲线图的横轴是取值为[0,1] 的正例概率代价:

        其中p是样例为正例的概率;纵轴是取值为[0,1]的归一化代价:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值