《机器学习》系列总结(导学/复习)---第二章 模型评估与选择

《机器学习》系列总结(导学/复习)—第二章 模型评估与选择

在典型的机器学习过程中,什么模型更好,或者怎样训练出的的模型能更好的适用于没见过的数据(能够更准确的预测新的数据样本的类别等)。也就是说,我们的目标是能够让学得得模型泛化能力强!错误率低,精度高。

要到达此目标,我们得有一个评价的方式,以此确定怎么选择模型

模型选择的关键:

​ 如何获得测试结果?–>评估方法

​ 如何评估性能优劣?–>性能度量

​ 如何判断实质差别?–>比较检验

一、经验误差与过拟合

1.1 错误率、误差

学习器或者模型在预测时总会造成分类错误,那么变存在一个错误率的概念。而误差则为样本真实输出与学习器预测输出之间的差异

  • 错误率: 分类错误的样本数占样本总数的比例。m个样本里a个样本分类错误,则错误率E=a/m

  • 精度精度=1-E

  • 误差:样本真实输出与预测输出之间的差异。ε=y-yˊ

    • 训练(经验)误差:在训练集上的误差,亦称“训练误差”

    • 测试误差:在测试集上的误差

    • 泛化误差:在新样本上的误差

      这里其实也能看出来,我们最希望的是让泛化误差小

    但由于我们事先不知道新样本的特征,我们只能去努力减小训练误差(经验误差)

    另外很多能在训练集上分类错误率为零,但多数这类学习器并不是很好。很有可能过拟合了。

    eg:A死背某道数学题,没有理解。虽然这道数学题会了,但考试换了个描述的考法,就不会了。B总结这道题的做法,虽然这道数学题做的没A快,但考试遇到同类型其他描述时,B知道做的方法,最后就做出来。

1.2 过拟合(overfitting)

学习器把训练样本学习的”太好“,导致泛化性能下降

解决办法:

  • 优化目标正则项
  • early stop(早停) ----也就是说训练到一定程度就不要继续训练了

1.3 欠拟合(underfitting)

对训练样本的一般性质尚未学好

一些解决思路:增加训练轮次,决策树类型拓展分支

泛化误差\训练误差
bug?训练样本都没训好,还能适用其他的?
过拟合 欠拟合

二、评估方法

这里最开始看到可能会产生疑惑。大家请记住,强调的是测试集部分,因为我们想通过测试集来进行测试学习器对新样本的判别能力。测试集中我们有真实的输出结果,可以用来判断学习器是否学习的好。

既然如此,测试集怎么选定就很重要!!!也就是我们要评估,关键在于获得测试集

一般情况下:测试误差 ≈ 泛化误差

测试集应该与训练集“互斥”

互斥的原因在于,如果这个学习器已经见过了数据集中的某条记录,如果把这条记录又作为测试集里的一条记录数据。那当进行测试时,对于这一条记录,学习器它肯定是认识,能够分辨的,所以这样划分是不太又用的。

image-20230620174558181

数据集中划分训练集和测试集的常见做法

  • 留出法
  • 交叉验证法
  • 自助法

2.1 留出法

暴力直接,自己拍脑袋划分就行,将数据集划分成两个互斥的集合即可。

注意:

  • 直接将数据集划分为两个互斥集合。数据集=训练集+测试集
  • 训练/测试集划分要尽可能保持数据分布的一致性(避免划分引起的误差)
  • 一般若干次随机划分、重复进行实验评估后取平均值
  • 训练/测试样本比例通常为2/3~4/5(测试集不能太大、不能太小 )

2.2 交叉验证法

又叫k-折交叉验证法

将数据集分层采样划分为k个大小相似的互斥子集,即D=D_1∪D_2∪...∪D_k, D_i∩D_j=∅(i≠j)。且要求每个子集尽可能保证数据分布一致(D中分层采样得到)。

然后我们每次用k-1个子集的并集作为训练集,剩余子集作为测试集,最终返回k个测试结果的均值,k常用10

一般我们进行若干次随机划分,重复进行实验评估后取平均值(k=m留一法)

这种方法的评估结果被认为较为准确,但计算开销大

上述过程总体的思想就是,会选k次,最后训练出k个学习器,然后求平均,这样可以尽可能的利用数据集

好处:

  • 解决数据量不够大的问题
  • 解决参数调优问题

(下图展示10折交叉验证,图片来自西瓜书)

image-20230620211252879

2.3 自助法

直接以自助采样法为基础,也称“有放回采样”、“可重复采样“。

它的过程可以这样理解:

  1. 有一个数据集D,它里面有m个样本,假设采样后生成的数据集为D'
  2. 每次从D中随机选取一个样本,将其加入到D'中,之后再将该样本放回D中,注意此时D中样本数量仍然不变,仍为m个样本
  3. 重复执行第2m
  4. 最终得到包含m个样本数据的集合D'

对于D中的一部分数据,肯定会在D'中多次出现,但是也会有一部分数据在D'不出现。

样本在m次采样中始终不被采样的概率是(1-1/m)^m,取极限约等于0.368

说明数据集D中约有36.8%的样本不会出现在D'中,所以我们可以拿D'作为测试集,D\D'用作训练集

优势:

  • 训练集与原样本集同规模
  • 使用数据集小,划分难

这种类型进行测试的结果叫做包外估计

2.4 “调参”与最终模型

大部分学习算法都有参数需要设定,参数设置不同,学得的模型性能也会有差别,比如设置训练轮次、学习率等。因此进行模型评估与选择时,还需对算法的参数进行设定,即参数调节,简称调参。参数调得好不好往往对最终性能有关键影响

注意区分:

  • 算法的参数:一般由人工设定,亦称“超参数”
  • 模型的参数:一般由学习确定

这里新定义一个概念验证集:在模型评估与选择中用于评估测试的数据集。用于模型选择和调参

类别 验证集 测试集
是否被训练到
作用 用于调超参数,监控模型是否发生过拟合(以决定是否停止训练) 为了评估最终模型泛化能力
使用次数 多次使用,以不断调参 仅仅使用一次

三、性能度量

用来衡量模型泛化能力的评价标准,反应任务的需求。性能度量是一种方式,采取这种方式(或标准)来衡量模型的泛化能力。

采用不同的性能度量往往会得到不同的评判结果。

不同场景下通常所采取的性能度量方式

分类任务中,常常采用错误率和精度两种性能度量

  • 错误率:分错样本占样本总数的比例。

    image-20230621011713056

    耐心看,虽然这公式第一眼看好像长得乱七八糟,但是实际很简单,m个样本数据,f(xi)代表第i个样本在模型预测下的结果,yi为该样本的实际结果,当两者不相等时,加一,最后用这个和除以m。完整看即为预测错误的样本数量除以样本总数,也就是定义啦!!!

  • 精度:分对样本占样本总数的比例。

    image-20230621011803435

    将预测对的样本数除以样本总数,也就等于1-E

在信息检索、Web搜索等场景中经常需要衡量预测出来的正例真的是正例的比率, 所有正例被预测出来是正例的比率。此时进行描述采用查准率查全率更为合适。

image-20230621012901626

  • 查准率P
    P = T P ( T P + F P ) P=\frac{TP}{(TP+FP)} P=(TP+FP)TP

  • 查全率R
    R = T P T P + F N R = \frac{TP}{TP+FN} R=TP+FNTP

  • P-R曲线:查准率P做纵轴,查全率R做横轴作图,得到的曲线即为查准率-查全率曲线(P-R曲线)。显示该曲线的图即为“P-R图”。若一个学习器的P-R曲线包住另一个学习器的P-R曲线,则断言前者性能优于后者

  • 平衡点BEP:一种综合查准率和查全率的度量方式,它是查准率=查全率时的取值。基于BEP进行比较时,认为BEP值大的学习器更优秀

在此定义一个概念调和平均数
1 F 1 = 1 2 ( 1 P + 1 R ) \frac{1}{F_1} = \frac{1}{2}(\frac{1}{P}+\frac{1}{R}) F11=21(P1+R1)
比上述所说BEP更常用的度量方式是F₁度量,0<F₁<1,F₁越大越好:

image-20230621022316717

另外相较于F₁更加一般的形式:

image-20230621022408512

  • β = 1:就是标准的F₁
  • β > 1:偏重查全率(逃犯信息检索)
  • β < 1:偏重查准率(商品推荐系统)

ROC曲线:以“假正例率”为横轴,“真正例率”为纵轴可得到的曲线,全称“受试者工作特征”。

ROC曲线绘制方法:给定m^+个正例和m^-个负例,根据学习器预测结果对样例进行排序,将分类阈值设为每个样例的预测值,当前标记点坐标为(x,y),当前若为真正例,则对应标记点的坐标为(x,y+1/m^+ );当前若为假正例,则对应标记点的坐标为(x+1/m^- ,y),然后用线段连接相邻点.

ROC曲线衡量比较方式

  • 若某个学习器的ROC曲线被另一个学习器的曲线“包住”,则后者性能优于前者;
  • 如果曲线交叉,可以根据ROC曲线下面积大小进行比较,这个面积也叫做AUC值

AUC衡量了样本预测的排序质量

AUC可估算为:

image-20230621023926758

排序损失定义为:

image-20230621024009000

另外AUC = 1 - "损失",也就是说“损失” = 1 - AUC

代价敏感错误率

往往日常生活中,如果我们犯错,会造成一定的损失,而犯不同的错往往会造成不同的损失。此时我们就需要考虑“非均等代价”,意思是说,需要考虑模型预测错时“付出的”代价时不均等的。

代价敏感错误率

image-20230621024808818

四、比较检验

用来判断实质差别

我们在采用不同评估方式测得了学习器某个性能的度量结果,但我们最后如何对其进行比较,选择更好的呢?此处重点在于如何进行比较。

  • 假设检验-二项检验

    记泛化错误率为 ε,测试错误率为ε实际 ,假定测试样本从 ε<= ε0样本总体分布中独立采样而来,我们可以使用“二项检验”

  • 假设检验-t检验

    面对多次重复留出法或者交叉验证法进行多次训练/测试时

如果两个学习器比较(同数据集)

  • 交叉验证 t 检验 (基于成对 t 检验)

    k 折交叉验证; 5*2交叉验证

  • McNemar 检验 (基于列联表,卡方检验)

如果多学习器比较(一组数据)

  • Friedman + Nemenyi
    • Friedman检验 (基于序值,F检验; 判断”是否都相同”)
    • Nemenyi 后续检验 (基于序值,进一步判断两两差别)

五、偏差与方差

偏差-方差分解可以用来解释学习算法的泛化性能。

泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度共同决定

一般而言,偏差与方差存在冲突:

  • 训练不足时,学习器拟合能力不强,偏差主导(欠拟合)
  • 随着训练程度加深,学习器 拟合能力逐渐增强,方差逐渐主导
  • 训练充足后,学习器的拟合能力很强,方差主导(过拟合)

好的泛化性能:偏差小(充分拟合),且方差小(数据扰动影响小)

猜你喜欢

转载自blog.csdn.net/zhihong2002/article/details/131319146