周志华《机器学习》(西瓜书) —— 学习笔记:第2章 模型评估与选择


2.1 经验误差和过拟合

错误率(error rate):分类错误的样本数占样本总数的比例,即如果在 m m m 个样本中有 a a a 个样本分类错误,则错误率 E = a / m E=a/m E=a/m
精度(accuracy) 1 − a / m 1-a/m 1a/m ,即“精度=1-错误率”,精度常写为百分比的形式 ( 1 − a m ) × 100 % (1-\frac{a}{m})×100\% (1ma)×100%
误差(error):学习器的实际预测输出与样本的真实输出之间的差异
训练误差(training error)/ 经验误差(empirical error):学习器在训练集上的误差
泛化误差(generalization error):在新样本上的误差
过拟合(overfitting):学习器把训练样本学得“太好”,把训练样本自身的一些特点当作所有潜在样本都具有的一般性质,导致泛化性能下降,这种现象在机器学习中称为“过拟合”
欠拟合(underfitting):对训练样本的一般性质尚未学好

过拟合、欠拟合的直观类比

过拟合是机器学习面临的关键障碍,各类学习算法都必然带有一些针对过拟合的措施。过拟合是无法彻底避免的,只能“缓解”或者减小其风险。


2.2评估方法

  通常,我们使用一个“测试集”(testing set)来测试学习器对新样本的判别能力,以测试集上的“测试误差”(testing error)作为泛化误差的近似。我们假设测试样本也是从样本真实分布中独立同分布采样而得。要注意测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过,否则将得到过于“乐观”的估计结果。

  对于一个包含 m m m 个样例的数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } D=\left\{\left(\boldsymbol{x}_{1}, y_{1}\right),\left(\boldsymbol{x}_{2}, y_{2}\right), \ldots,\right.\left(\boldsymbol{x}_{m}, y_{m}\right) \} D={ (x1,y1),(x2,y2),,(xm,ym)} ,通过对 D D D 进行适当的处理,从中产生出训练集 S S S 和测试集 T T T 。下面介绍几种常见的做法。

2.2.1 留出法

  “留出法”直接将数据集 D D D 划分为两个互斥的集合,其中一个集合作为训练集 S S S ,另一个作为测试集 T T T ,即 D = S ∪ T D=S \cup T D=ST S ∩ T = ∅ S \cap T=\varnothing ST= 。在 S S S 上训练出模型后,用 T T T 来评估其测试误差,作为对泛化误差的估计。

  注意一:训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。使用“分层采样”(stratified sampling)(保留类别比例的采样方式)。
  注意二:单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。

  通常将大约 2 / 3 ∼ 4 / 5 2/3\sim4/5 2/34/5 的样本用于训练,剩余样本用于测试。

2.2.2 交叉验证法

  “交叉验证法”(cross validation)先将数据集 D D D 划分为 k k k 个大小相似的互斥子集,即 D = D 1 ∪ D 2 ∪ … ∪ D k , D i ∩ D j = ∅   ( i ≠ j ) D=D_{1} \cup D_{2} \cup \ldots \cup D_{k}, D_{i} \cap D_{j}=\varnothing\ (i \neq j) D=D1D2Dk,DiDj= (i=j) ,每个子集 D i D_i Di 尽可能保持数据分布的一致性(即从 D D D 中分层采样得到),每次使用 k − 1 k-1 k1 个子集的并集作为训练集,余下的那个子集作为测试集。这样可获得 k k k 组训练/测试集,从而进行 k k k 次训练和测试,最终返回的是这 k k k 个测试结果的均值。

  交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k k k 的取值,通常把交叉验证法称为“ k k k 折交叉验证”( k k k-fold cross validation)。 k k k 最常用的取值是 10 ,此时称为 10 折交叉验证,其他常用值还有 5 、 20 等。

10折交叉验证示意图

  为减小因样本划分不同而引入的差别, k k k 折交叉验证通常要随机使用不同的划分重复 p p p 次,最终评估结果是这 p p p k k k 折交叉验证结果的均值,如常见的“10 次 10 折交叉验证”(“10 次 10 折交又验证法”与“100 次留出法”都是进行了 100 次训练/测试)。

  “留一法(Leave-One-Out,简称LOO)”:交叉验证法的特例,数据集 D D D 中包含 m m m 个样本,同时令 k = m k=m k=m。留一法不受随机样本划分方式的影响,因为 m m m 个样本只有唯一的方式划分为 m m m 个子集——每个子集包含一个样本,使用的训练集与初始数据集相比只少了一个样本。在绝大多数情况下,留一法中被实际评估的模型与期望评估的用 D D D 训练出的模型很相似,评估结果往往被认为比较准确。缺陷是在数据集比较大时,训练 m m m 个模型的计算开销可能是难以忍受的。

2.2.3 自助法

  “自助法”(bootstrapping),亦称“可重复采样”或“有放回采样”,直接以自助采样法(bootstrap sampling)为基础。给定包含 m m m 个样本的数据集 D D D ,每次随机从 D D D 中挑选一个样本,将其拷贝放入 D ′ D^{\prime} D ,然后将该样本放回初始数据集 D D D 中,该样本在下次采样时仍有可能被采到。这个过程重复执行 m m m 次,可得到包含 m m m 个样本的数据集 D ′ D^{\prime} D ,这就是自助采样的结果。 D D D 中有一部分样本会在 D ′ D^{\prime} D 中多次出现,另一部分样本不出现。可以估计,样本在 m m m 次采样中始终不被采到的概率是 ( 1 − 1 m ) m \left(1-\frac{1}{m}\right)^{m} (1m1)m ,取极限得到

lim ⁡ m → ∞ ( 1 − 1 m ) m ↦ 1 e ≈ 0.368 (2.1) \lim _{m \rightarrow \infty}\left(1-\frac{1}{m}\right)^{m} \mapsto \frac{1}{e} \approx 0.368\tag{2.1} mlim(1m1)me10.368(2.1)

即通过自助采样,初始数据集 D D D 中约有 36.8 36.8% 36.8 的样本未出现在采样数据集 D ′ D^{\prime} D 中。我们可将 D ′ D^{\prime} D 用作训练集, D \ D ′ D \backslash D^{\prime} D\D 用作测试集。这样,实际评估的模型与期望评估的模型都使用 m m m 个训练样本,还有占数据总量约 1/3 的、没在训练集中出现的样本用于测试。这样的测试结果亦称“包外估计”(out-of-bag-estimate)。

  自助法在数据集较小、难以有效划分训练/测试集时很有用;自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此,在初始数据量足够时,留出法和交叉验证法更常用一些。

2.2.4 调参与最终模型

  在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,这就是通常所说的“参数调节”或简称“调参”(parameter tuning)。

  现实中常用的做法,是对每个参数选定一个范围和变化步长,例如在 [ 0 , 0.2 ] [0,0.2] [0,0.2] 范围内以 0.05 0.05 0.05 为步长,则实际要评估的候选参数值有 5 5 5 个,最终是从这 5 5 5 个候选值中产生选定值。这样选定的参数值往往不是“最佳”值,但这是在计算开销和性能估计之间进行折中的结果。通过这个折中,使学习过程变得可行。在不少应用任务中,参数调得好不好往往对最终模型性能有关键性影响。

  在模型评估与选择过程中需要留出部分数据进行评估测试,我们事实上只使用了一部分数据训练模型。因此,在模型选择完成后,学习算法和参数配置已选定,我们应该用完整的数据集重新训练模型。这个模型在训练过程中使用了所有的样本,这才是我们最终提交给用户的模型。

  另外,我们通常把学得模型在实际使用中遇到的数据称为测试数据,而在模型评估与选择中用于评估测试的数据集常称为“验证集”(validation set)。例如,在研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集和验证集,基于验证集上的性能来进行模型选择和调参。


2.3 性能度量

  “性能度量”(performance measure)是衡量模型泛化能力的评价标准。性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果。模型的“好坏”是相对的,它不仅取决于算法和数据,还取决于任务需求。

  在预测任务中,给定样例集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } D=\left\{\left(\boldsymbol{x}_{1}, y_{1}\right),\left(\boldsymbol{x}_{2}, y_{2}\right), \ldots,\left(\boldsymbol{x}_{m}, y_{m}\right)\right\} D={ (x1,y1),(x2,y2),,(xm,ym)} ,其中 y i y_i yi 是示例 x i \boldsymbol{x}_{i} xi 的真实标记。要评估学习器 f f f 的性能,就要把学习器预测结果 f ( x ) f(\boldsymbol{x}) f(x) 与真实标记 y \boldsymbol{y} y 进行比较。

  回归任务最常用的性能度量是“均方误差”(mean squared error)

E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 (2.2) E(f ; D)=\frac{1}{m} \sum_{i=1}^{m}\left(f\left(\boldsymbol{x}_{i}\right)-y_{i}\right)^{2}\tag{2.2} E(f;D)=m1i=1m(f(xi)yi)2(2.2)

  更一般的,对于数据分布 D \mathcal{D} D 和概率密度函数 p ( ⋅ ) p(\cdot) p() ,均方误差可描述为

E ( f ; D ) = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d x (2.3) E(f ; \mathcal{D})=\int_{\boldsymbol{x} \sim \mathcal{D}}(f(\boldsymbol{x})-y)^{2} p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x}\tag{2.3} E(f;D)=xD(f(x)y)2p(x)dx(2.3)

  以下主要介绍分类任务中常用的性能度量。

2.3.1 错误率与精度

  错误率和精度是分类任务中最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务。错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。对样例集 D D D ,分类错误率定义为

E ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) (2.4) E(f ; D)=\frac{1}{m} \sum_{i=1}^{m} \mathbb{I}\left(f\left(\boldsymbol{x}_{i}\right) \neq y_{i}\right)\tag{2.4} E(f;D)=m1i=1mI(f(xi)=yi)(2.4)

  精度则定义为

acc ⁡ ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) = 1 − E ( f ; D ) (2.5) \begin{aligned} \operatorname{acc}(f ; D) &=\frac{1}{m} \sum_{i=1}^{m} \mathbb{I}\left(f\left(\boldsymbol{x}_{i}\right)=y_{i}\right) \\\\ &=1-E(f ; D) \end{aligned}\tag{2.5} acc(f;D)=m1i=1mI(f(xi)=yi)=1E(f;D)(2.5)

  更一般的,对于数据分布 D \mathcal{D} D 和概率密度函数 p ( ⋅ ) p(\cdot) p() ,错误率与精度可分别描述为

E ( f ; D ) = ∫ x ∼ D I ( f ( x ) ≠ y ) p ( x ) d x (2.6) E(f ; \mathcal{D})=\int_{\boldsymbol{x} \sim \mathcal{D}} \mathbb{I}(f(\boldsymbol{x}) \neq y) p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x}\tag{2.6} E(f;D)=xDI(f(x)=y)p(x)dx(2.6)

acc ⁡ ( f ; D ) = ∫ x ∼ D I ( f ( x ) = y ) p ( x ) d x = 1 − E ( f ; D ) (2.7) \begin{aligned} \operatorname{acc}(f ; \mathcal{D}) &=\int_{x \sim D} \mathbb{I}(f(\boldsymbol{x})=y) p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x} \\\\ &=1-E(f ; \mathcal{D}) \end{aligned}\tag{2.7} acc(f;D)=xDI(f(x)=y)p(x)dx=1E(f;D)(2.7)

2.3.2 查准率、查全率与 F1

  在信息检索中,我们经常会关心“检索出的信息中有多少比例是用户感兴趣的”、“用户感兴趣的信息中有多少被检索出来了”,“查准率”(“准确率”)(precision)与“查全率”(“召回率”)(recall)是适用于此类需求的性能度量。

  对于二分类问题,将样例根据其真实类别与学习器预测类别的组合,划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)四种情形,分别用 T P 、 F P 、 T N 、 F N TP、FP、TN、FN TPFPTNFN 表示其对应的样例数,则 T P + F P + T N + F N TP+FP+TN+FN TP+FP+TN+FN = 样例总数 。分类结果的“混淆矩阵”(confusion matrix)如表 2.1 所示

分类结果混淆矩阵

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

P = T P T P + F P (2.8) P=\frac{TP}{TP+FP}\tag{2.8} P=TP+FPTP(2.8)

R = T P T P + F N (2.9) R=\frac{TP}{TP+FN}\tag{2.9} R=TP+FNTP(2.9)

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

  根据学习器的预测结果对样例进行排序,“最可能”是正例的样本排在前面,“最不可能”是正例的样本排在最后,按此顺序逐个把样本作为正例进行预测,每次计算出当前的查全率、查准率,以查准率为纵轴、查全率为横轴作图,就得到查准率-查全率曲线,简称“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 过于简化,更常用的是 F 1 F1 F1 度量:

F 1 = 2 × P × R P + R = 2 × T P 样 例 总 数 + T P − T N (2.10) F 1=\frac{2 \times P \times R}{P+R}=\frac{2 \times TP}{样例总数+TP-TN}\tag{2.10} F1=P+R2×P×R=+TPTN2×TP(2.10)
  在一些应用中,对查准率和查全率的重视程度有所不同。例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容的确是用户感兴趣的,此时查准率更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要。 F 1 F1 F1 度量的一般形式—— F β F_\beta Fβ ,能让我们表达出对查准率/查全率的不同偏好,它定义为

F β = ( 1 + β 2 ) × P × R ( β 2 × P ) + R (2.11) F_{\beta}=\frac{\left(1+\beta^{2}\right) \times P \times R}{\left(\beta^{2} \times P\right)+R}\tag{2.11} Fβ=(β2×P)+R(1+β2)×P×R(2.11)

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

   F 1 F1 F1 是基于查准率与查全率的调和平均定义的

1 F 1 = 1 2 ⋅ ( 1 P + 1 R ) \frac{1}{F 1}=\frac{1}{2} \cdot\left(\frac{1}{P}+\frac{1}{R}\right) F11=21(P1+R1)

   F β F_{\beta} Fβ 则是加权调和平均

1 F β = 1 1 + β 2 ⋅ ( 1 P + β 2 R ) \frac{1}{F_{\beta}}=\frac{1}{1+\beta^{2}} \cdot\left(\frac{1}{P}+\frac{\beta^{2}}{R}\right) Fβ1=1+β21(P1+Rβ2)
  很多时候我们有多个二分类混淆矩阵,我们希望在 n n n 个二分类混淆矩阵上综合考察查准率和查全率。

  一种直接的做法是先在各混淆矩阵上分别计算出查准率和查全率,记为 ( P 1 , R 1 ) , ( P 2 , R 2 ) , … , ( P n , R n ) \left(P_{1}, R_{1}\right),\left(P_{2}, R_{2}\right), \ldots,\left(P_{n}, R_{n}\right) (P1,R1),(P2,R2),,(Pn,Rn) ,再计算平均值,这样就得到“宏查准率”(macro- P P P)、“宏查全率”(macro- R R R),以及相应的“宏 F 1 F1 F1 ”(macro- F 1 F1 F1

macro- ⁡ P = 1 n ∑ i = 1 n P i (2.12) \operatorname{macro-}P=\frac{1}{n} \sum_{i=1}^{n} P_{i}\tag{2.12} macro-P=n1i=1nPi(2.12)

macro- ⁡ R = 1 n ∑ i = 1 n R i (2.13) \operatorname{macro-}R=\frac{1}{n} \sum_{i=1}^{n} R_{i}\tag{2.13} macro-R=n1i=1nRi(2.13)

macro- ⁡ F 1 = 2 × macro- ⁡ P × macro-R ⁡ macro- ⁡ P + macro- ⁡ R (2.14) \operatorname{macro-}F 1=\frac{2 \times \operatorname{macro-} P \times \operatorname{macro-R}}{\operatorname{macro-} P+\operatorname{macro-}R}\tag{2.14} macro-F1=macro-P+macro-R2×macro-P×macro-R(2.14)
  还可先将各混淆矩阵的对应元素进行平均,得到 T P 、 F P 、 T N 、 F N TP、FP、TN、FN TPFPTNFN 的平均值,分别记为 T P ‾ 、 F P ‾ 、 T N ‾ 、 F N ‾ \overline{TP}、\overline{FP}、\overline{TN}、\overline{FN} TPFPTNFN ,再基于这些平均值计算出“微查准率”(micro- P P P)、“微查全率”(micro- R R R)和“微 F 1 F1 F1 ”(micro- F 1 F1 F1

micro- ⁡ P = T P ‾ T P ‾ + F P ‾ (2.15) \operatorname{micro-} P=\frac{\overline{T P}}{\overline{T P}+\overline{F P}}\tag{2.15} micro-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值