《西瓜书》阅读笔记——第二章

第二章 模型评估与选择

2.1 经验误差与过拟合

  • 错误率(error rate):分类错误的样本数占样本总数的比例。

    错误率 $E=a/m $ (m个样本,a个样本分类错误)

  • 精度(accuracy)

    精度 a c c u r a c y = 1 − 错 误 率 = 1 − E = 1 − a / m accuracy = 1-错误率 = 1 - E = 1-a/m accuracy=1=1E=1a/m

  • 误差(error):学习器的实际预测输出与样本的真实输出之间的差异。

    • 训练误差(training error)经验误差(empirical error):在训练集上的误差。
    • 泛化误差(generalization error):在新样本上的误差。

我们希望得到泛化误差小的学习器,我们可以学习一个经验误差小的学习器,但是当经验误差为0时,这个学习器在多数情况下都不好。

  • 过拟合(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=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\} D={(x1,y1),(x2,y2),...,(xm,ym)}既要训练又要测试,于是我们对 D D D进行处理,从中产生训练集 S S S 和测试集 T T T

2.2.1 留出法(hold-out)

将D划分成两个互斥的集合, D = S ⋃ T , S ⋂ T = ∅ D=S\bigcup T,S \bigcap T= \varnothing D=ST,ST=.在S上训练,用T估计泛化误差。

ep:二分类中: m=1000, |S|=700,T=|300|.

用S训练后,在T上有90个样本分类错误,则E = (90 / 300) * 100% = 30%;Acc = 1 - 30% = 70%

数据集的划分要保持数据分布的一致性,避免因数据划分引入额外的偏差,如在分类任务重要保持样本类别比例相似。通常采用**“分层采样”(stratified sampling)**。

对D采样获得70%样本的训练集S和30%样本的T,若D有500正例500反例,则S有350正例350反例;T有150正例150反例。

不同的划分会导致不同的训练、测试集,同时,模型评估的方式也会有差别。因此,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为评估结果。

留出法的缺点是:若训练集S包含绝大多是样本,则训练出的模型可能更接近于用D训练除的模型,但由于T比较小,评估结果不准确;若令测试集T多包含一些样本,则S与D的差别更大了,从而降低了评估结果的保真性(fidelity)

这个缺点没有完美的解决方案,常见做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试。

2.2.2 交叉验证法(cross validation)

将D划分为k个大小相似的互斥子集,即 D = D 1 ⋃ D 2 ⋃ . . . ⋃ D k , D i ⋂ D j = ∅ ( i ≠ j ) D=D_1\bigcup D_2 \bigcup ... \bigcup D_k, D_i\bigcap D_j=\varnothing(i\not=j) D=D1D2...Dk,DiDj=(i=j)

每个子集 D i D_i Di都尽可能保持数据分布的一致性:即从D中分层采样得到。

每次用k-1个子集的并集作为S,剩下的那一个作为T

因此可以进行k次训练和测试,最后返回的是这k个测试结果的均值。

交叉验证法评估结果的稳定性和保真性很大程度上决定于k的取值,为强调这点,通常把交叉验证称为“k折交叉验证”(k-fold cross validation),k常取10,此时称为10折交叉验证。

请添加图片描述

与留出法相似,将数据集D划分为k个子集同样存在很多划分方式。为了减小英样本划分不同引入的误差,k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值。

若D中含有m个样本,若令k=m,则得到了交叉验证的特例:留一法(Leave-One-Out,简称LOO)

LOO不受随机样本划分方式影响,因为m个样本只有唯一的方式划分为m个子集——每个子集包含一个样本。LOO使用的S与D相比只缺少了一个样本,这就使得在绝大多数情况下,LOO的评估比较准确;缺点是在D比较庞大的时候,计算开销很大。

2.2.3 自助法(bootstrapping)

我们一直都希望评估的是使用D训练出的模型,除了LOO受训练样本规模变化的影响较小,上述两种方法都是使用D的一部分用于训练。

而自助法可以减少驯良样本规模不同造成的影响,同时高效的进行实验估计。

给定包含m个样本的数据集D,对他进行采样产生数据集 D ′ D\prime D:每次随机从D中挑选一个样本,将其拷贝放入 D ′ D\prime D ,然后将该样本放回D,使得该样本在下次采样时仍可能被采样到。

重复采样m次,我们就获得了包含m个样本的数据集 D ′ D\prime D.

显然,有一部分样本不会在 D ′ D\prime D中出现,而另一部分会出现多次。

在m次采样中始终不被采样到的概率是 ( 1 − 1 m ) m (1-{1\over{m}})^m (1m1)m,取极限: lim ⁡ m → ∞ ( 1 − 1 m ) m ↦ 1 e ≈ 0.368 \lim\limits_{m\to \infty}(1-{1\over{m}})^m \mapsto \frac{1}{e} \approx 0.368 mlim(1m1)me10.368

通过自助采样,D中约有36.8%的样本未出现在 D ′ D\prime D中,于是我们可以将 D ′ D\prime D作为训练集S, D − D ′ D-D\prime DD作为测试集T.

这样的测试结果称为外包估计(out-of-bag estimate)

优点

  1. 在数据集小、难以有效划分训练、测试集时很有用;
  2. 自助法能从初始数据集中产生多个不同的训练集,这对集成学习有很大好处。

缺点

  1. 改变了初始数据集的分布,这会引入估计误差。

在数据量足够的时候,留出法和交叉验证法更常用。

2.2.4 调参与最终模型

  • 调参(parameter tuning):

    参数配置不同,模型的性能往往有显著差别。因此,在模型评估与选择时,除了算法选择,还要对算法参数设定。

学习算法的很多参数都是在实数范围中取值,因此,对每种参数配置都训练出模型是不可行的。

现实中常用做法是:

​ 对每个参数选定一个范围和步长,例如在[0,0.2]范围中以0.05作为步长,则实际要评估的参数只有5个。但是,显然这样的参数值往往不是“最佳”的,但这是计算开销和性能估计之间折中的结果。


在包含m各样本的数据集D中,我们只用了一部分数据训练模型,另一部分用于模型评估。

在模型选择完成之后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型,这个训练的过程用了所有m个样本。

通常把学得模型在实际使用过程中遇到的数据成为测试数据,为了加以区分,模型评估与选择中用于评估测试的数据集常称为“验证集”(validation set)。


  • 训练集:用来训练模型或确定模型参数

  • 验证集:用来做模型选择(model selection),例如网络结构或者控制模型复杂程度的参数

  • 测试集:检验最终选择最优的模型的性能

2.3 性能度量

  • 性能度量(performance measure):衡量模型泛化能力的评价标准。

性能度量反映了任务需求,不同的性能度量导致不同的评价结果;

模型的好坏是相对的,它不仅取决于算法和数据,还决定于任务需求。

请添加图片描述

  • 回归任务
    • 均方误差(mean squared error)
      • E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f;D)=\frac{1}{m}\displaystyle\sum_{i=1}^m(f(x_i)-y_i)^2 E(f;D)=m1i=1m(f(xi)yi)2
      • E ( f ; D ) = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d x E(f;D)=\int_{x\sim D}(f(x)-y)^2p(x)dx E(f;D)=xD(f(x)y)2p(x)dx

2.3.1 错误率与精度(针对分类问题)

  • 错误率:

    • E ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) E(f;D)=\frac{1}{m}\displaystyle \sum _{i=1}^mI(f(x_i)\not=y_i) E(f;D)=m1i=1mI(f(xi)=yi)
    • E ( f ; D ) = ∫ x ∼ D I ( f ( x ) ≠ y ) p ( x ) d x E(f;D)=\int_{x\sim D}I(f(x)\not=y)p(x)dx E(f;D)=xDI(f(x)=y)p(x)dx

    I ( ) I() I()是指示函数,当括号内为真取值为1

  • 精度:

    • a c c ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) = 1 − E ( f ; D ) acc(f;D)=\frac{1}{m}\displaystyle\sum_{i=1}^mI(f(x_i)=y_i)=1-E(f;D) acc(f;D)=m1i=1mI(f(xi)=yi)=1E(f;D)
    • a c c ( f ; D ) = ∫ x ∼ D I ( f ( x ) = y ) p ( x ) d x = 1 − E ( f ; D ) acc(f;D)=\int_{x\sim D}I(f(x)=y)p(x)dx=1-E(f;D) acc(f;D)=xDI(f(x)=y)p(x)dx=1E(f;D)

2.3.2 查全率、查准率与F1

请添加图片描述

  • 查准率(precision)

    P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP

  • 查全率、召回率(recall)

    R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP

如何理解:

T、F是对预测值是否正确的判断;

P、N是预测的值。

  • True Positive-TP: 预测值为1,预测结果正确,即TP
  • False Positive-FP: 预测值为1,预测结果错误,即FP
  • False Negative-TN: 预测值为0,预测结果错误,即FN
  • True Negative-FN:预测值为0,预测结果正确,即TN
  • 准确率:正确分类的样本在总样本的占比
    • A c c u r a c y = T P + T N A L L Accuracy=\frac{TP+TN}{ALL} Accuracy=ALLTP+TN
  • 查准率:预测为P的样本中,实际为P的样本占比。
  • 查全率:实际为P的样本中,预测为P的样本占比。

查准率就是看你预测的准不准,也就是预测值为1的样本中实际值为1的样本占比;而查全率就是看你预测的全不全,即实际值为1的样本中预测值为1的样本占比。


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


  • PR曲线

一个阈值对应PR曲线上的一个点。通过选择合适的阈值,比如50%,对样本进行划分,概率大于50%的就认为是正例,小于50%的就是负例,从而计算相应的精准率和召回率。(选取不同的阈值,就得到很多点,连起来就是PR曲线)

举个例子:(true这列表示正例或者负例,hyp这列表示阈值0.5的情况下,概率是否大于0.5)

请添加图片描述

那么根据这个表格我们可以计算:TP=6,FN=0,FP=2,TN=2。故recall=6/(6+0)=1,precison=6/(6+2)=0.75,那么得出坐标(1,0.75)。同理得到不同阈下的坐标,即可绘制出曲线。

请添加图片描述

**如果一个学习器的P-R曲线被另一个学习器的P-R曲线完全包住,则可断言后者的性能优于前者,例如上面的A和B优于学习器C。**但是A和B的性能无法直接判断,我们可以根据曲线下方的面积大小来进行比较,但更常用的是平衡点或者是F1值。平衡点(BEP)是P=R时的取值,如果这个值较大,则说明学习器的性能较好。而F1 = 2 * P * R /( P + R ),同样,F1值越大,我们可以认为该学习器的性能较好。

  • F1分数

F 1 = 2 ∗ P ∗ R P + R = 2 ∗ T P 样 例 总 数 + T P − T N F1=\frac{2*P*R}{P+R}=\frac{2*TP}{样例总数+TP-TN} F1=P+R2PR=+TPTN2TP

参考资料

  • [性能评估之PR曲线与ROC曲线 - 简书 (jianshu.com)](https://www.jianshu.com/p/ac46c- b7e6f87)

  • 周志华-机器学习

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值