机器学习——模型评估与选择(一)————(评估方法)

一、引言

在对模型进行评估与选择之前,首先要知道用什么评估方法和性能度量来评估一个模型?其次选择模型时如何比较模型?

先来解答第一个问题。

二、预备知识

了解评估方法,就需要先学习误差、精度、过拟合、欠拟合这四个概念。

1、误差

一般,我们把学习器的实际预测输出与样本的真实输出之间的差异称之为**"误差(error)"**。

误差 = 实际预测输出 --- 样本真实输出

通常,我们把分类错误的样本数样本总数比例 称之为**"错误率(error rate)"。** 比如,有m 个样本,其中有a 个样本分类错误,那么错误率 E = a/m 。而精度(accuracy) 则是 A = 1 - a/m ,即**"精度 = 1 - 错误率"**。

1.1 经验误差

学习器(模型)在训练集上 产生的误差 称之为"训练误差 (training error)或经验误差(empirical error)"。

1.2 泛化误差

学习器(模型)在新样本上 产生的误差 称之为"泛化误差(generalization error)"。

【说明】:

我们想要的是一个泛化误差很小的学习器(模型) 。但是,大多数情况 下, 我们得到 的是一个经验误差很小 、在训练集上表现很好的学习器(模型) 。我们实际希望 的是,学习器在新样本上也能够表现的很好。那为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的"普遍规律"。这样才能在遇到新样本时做出正确的判断。

2、欠拟合

2.1 欠拟合产生的原因

【原因】:学习器(模型)并没有把训练样本中一般特征学习到 ,导致学习器(模型)的学习能力低下,机器学习把这种情况称之为 "欠拟合"

2.2 欠拟合的影响

学习器(模型)欠拟合时,是比较容易克服的,比如在决策树学习中扩展分支,在神经网络学习中增加训练轮数。

3、过拟合

3.1 过拟合产生的原因

【原因】:学习器(模型)把训练样本中学的"太好了",以至于把训练样本本身的一些特点(训练样本不太一般的特性)当作所有潜在样本都会具有的一般性质 。导致学习器(模型)的泛化能力降低,这种现象在机器学习中成为**"过拟合"**。

3.2 过拟合的影响

产生过拟合 的因素很多。上述所描述的原因是最常见的情况。 它是学习器(模型)在机器学习中面临的关键障碍 ,处理起来比较麻烦,而且我们是无法彻底避免过拟合,能做的只是缓解它产生的风险。

【说明】:

关于过拟合,大致可以这样理解:

机器学习面临的问题通常是NP(非确定性多项式时间)难****,而有效的学习算法必然是要在多项式时间内运行完成,如果彻底避免过拟合,那通过最小化经验误差就可以得到了最优解,也就构造性证明了 " P = NP "。但是实际上****,P != NP ,过拟合无法彻底避免

( P问题:可以在多项式时间内找到正确答案的问题)

( NP问题:指一旦给出候选答案,能在多项式时间内验证其正确性的问题)

( NP问题,找答案很难,但是验证答案却是相对容易的)

4、总结

现实中,一个需要完成的任务,往往有很多学习算法可以选择,甚至同一个学习算法使用不同的参数配置,会产生不同的模型。我们:

(1)如何选择学习算法?

(2)使用哪一种参数配置?

这就是机器学习中 "模型选择" 问题。

理想的解决办法:就是对候选模型的泛化误差进行评估,选择泛化误差最小的那个模型。

【面临的问题】:

① 无法直接获得泛化误差;

② 训练误差由于过拟合现象的存在不适合作为标准;

所以现实中如何进行模型的评估和选择?

三、评估方法

1、测试集

1.1 测试集的来由

通常可以通过实验测试对学习器的泛化误差进行评估,从而做出选择。

既然做实验测试,那就需要用一个 "测试集(testing set)" 来测试学习器(模型)对新样

本的判别能力,并以测试集上的 "测试误差(testing error)" 作为 "泛化误差" 的近似

1.2 测试样本的要求

通常测试样本是从样本真实分布中独立同分布采样得来 。同时满足测试集与训练集互

。也就是说,测试样本尽量不在训练集中出现、未在训练过程中使用。

1.3 要求测试集与训练集互斥的原因

【举例】 以这个场景理解:

老师出了10道练习题供学生练习,考试老师依然用这10道题作为考试题考试,那学

生最终的考试成绩能反映出学生学的好不好嘛?

当然不能!因为有些学生只能做这10道题也能得高分。

回到测试集与训练集互斥的原因上来。

我们最终希望得到泛化性能强的模型,这就类似于希望同学对课程学习的很好、获

得了对所学知识 " 举一反三" 的能力;训练样本就相当于给同学练习的习题,测试样本

就相当于考试的考题,显然,如果测试样本被拿去训练,最终得到的将是一个过于"乐观"

的结果。

2、训练集和测试集划分方法

2.1 引言

若我们有一个包含m个样例的数据集D={ (x1, y1), (x2, y2), (x3, y3), ..., (xm, ym) },那怎

么对数据集D进行处理,产生训练集S和测试集T分别用在训练与测试过程。下面详细介绍

种常见的方法

2.2 留出法 (hold-out)

该方法直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为

测试集T,即D = S T,S T = 。在S上训练出模型后,在T上评估模型的测试误差,将

测试误差作为泛化误差进行近似。

【举例】:①以二分类任务为例。

假设D 包含1000个样本 ,将其划分为S包含700个样本T包含300个样本

S 上训练之后,若模型在T 上有90个样本分类错误

E (错误率) = (90/300) ×100% = 30%

A (精度) = 1 - 30% = 70%

【注意】:在训练集和测试集划分时要尽可能保持数据分布一致。避免因为数

据划分过程引入额外的偏差对最终结果产生影响。

【补充说明1】: 在分类任务中要尽量保证样本类别比例相似。

从采样角度看待数据集划分过程,则保留类别比例的采样方式通常称为 "

分层采样( stratified sample) "。

【例子】:D 进行分层采样 得到含 70% 样本的训练集 S ,包含30% 样本的

测试集 TD 中包含500 个正例、 500个反例 ,分层采样得到的S

应包含 350 个正例350个反例 ,而 T 包含 150 个正例150个反例

(若 S 与 T 样本类别比例差别很大,那么误差估计将由于训练集/测试集数据分

布的差异而产生偏差)

【补充说明2】: 给定训练集和测试集的样本比例之后,仍然存在多种划分方式数据集

D 进行分割

【比如】:将 D 中的样本排序,然后将前350个正例放入训练集中,或者

将最后 350 个正例放入训练集中,......。

【影响】: 这些不同的划分将导致不同的训练集和测试集,那么模型评估

的结果也会有差别。因此,单次使用留出法得到的估计结果往

往不够稳定。

【解决办法】:采用若干次随机划分、重复进行实验评估,取所有评估结

果的平均值作为留出法的评估结果。

(如:进行100次随机划分,每次产生的训练/测试集用于实验评估,

100次后得到100个结果,留出法则是取这100个结果的平均)

【留出法的局限】:留出法是在划分训练集和测试集。这就导致一个窘境

① 若令训练集 S 包含绝大多数样本,那么训练出的模型可能更接

近用D训练出的模型,但是测试集 T 比较少,评估结果可能不

稳定准确

② 若令测试集 T 多包含一些样本,那么训练集 S 与 D 差别更大

了,被评估的模型与用 D 训练出的模型相比可能差别较大,也

降低了评估结果的保真性

【总结】:这个局限没有完美的解决方案,所以常见的做法就是将大约2/3~4/5

的样本用于训练剩下的样本用于测试

2.3 交叉验证法 (cross validation)

交叉验证法先将数据集 D 划分为k 个大小相似互斥子集,即:

D = D1 D2 D3 ... Dk , Di Dj = ( i j )

每个子集 Di都尽可能保持数据分布的一致性,即每个子集Di从 D 中通过分层采样得到。接下来,每次用k-1 个子集的并集作为训练集剩下的那个子集作为测试集 ;这样便可以得到k 组训练集和测试集,从而进行 k 次训练和测试,最终返回的是这 k 个测试结果的均值。

【注意】:交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k 的取值!

也正是这个原因,通常把交叉验证法称之为 "k折交叉验证 (k-flod cross validation)"。其常用的 k 值为 5、20等。

为了方便大家理解,可以看这个示意图。

**【补充说明1】:**与留出法相似,将数据集 D 划分为 k 个子集同样存在多种划分方式。为了减

少因为样本划分不同而引入的差异。k 折交叉验证通常要随机使用不同的划

分重复 p 次,最终的评估结果是这 p 次 k 折交叉验证结果的均值。

【举例】:假设数据集 D 中包含m个样本,令 k = m,则得到一个交叉验证的特例:

留一法 (Leave-One-Out, 简称LOO)。留一法不受随机样本划分的影响。

【留一法优势】:因为 m 个样本只有唯一的方式划分为 m 个子集(每个子集包含一

个样本);留一法使用训练集与初始数据集相比只少了一个样本

这就使得在绝大多数情况下,留一法中被实际评估的模型 与 期望

评估所用的 D 训练出的模型很相似

(因此,留一法的评估结果往往被认为比较准确)

【留一法的缺陷】:在数据集比较大时,训练 m 个模型的计算开销非常大,而且这还

是在没有考虑算法调参的情况下。

(留一法的估计结果业未必永远比其他评估方法准确!)

2.4 自助法

自助法是一个直接以自助采样法为基础 ,给定包含 m 个样本的数据集 D ,对它进行采样产生数据集 D',然后再将该样本放回初始数据集 D 中 ,使得该样本在下次采样的时候仍然有可能被采样到;这个过程重复执行 m 次之后,我们就得到了包含 m 个样本的数据集 D',这就是自助采样的结果。

【注意】:

① 自助法,D中有一部分样本会在D'中多次出现,而另一部分样本不出现。可以做一个简

单的估计,样本在 m 次采样中始终不被采到的概率是1/e 0.368。也就是通过自助采

样,初始数据集 D 中大约有 36.8% 的样本未出现在现在采样数据集 D' 中

(可以将 D' 用做训练集,D\D' 做为测试集。这样实际评估的模型与期望评估的模型都

使用了 m 个训练样本,而且仍然有数据总量大约1/3没在训练集中出现,刚好将这些样

本用于测试。这样得到的测试结果,也成为 " 外包估计 (out-if-bag estimate) ")

② 自助法在数据集较小、难以有效划分训练集和测试集的时候很有用!

③ 自助法能从初始的数据集产生很多不同的训练集,这对集成学习等方法有很大的好处。

【缺点】:

自助法产生的数据集改变初始数据集的分布 ,会因此引入估计偏差 。因此,初始数据集足

够的时候,留出法和交叉验证法更常用


希望能给读者带来一些帮助。

(博客文字较多,知识点较为密集,可以多停留一下,耐心看完)

相关推荐
xx_xxxxx_2 小时前
多模态动态融合模型Predictive Dynamic Fusion论文阅读与代码分析4-代码架构
论文阅读·机器学习·transformer·多模态
nap-joker2 小时前
【临床笔记+生理信号+医学影像】多模态风险预测,结合生理信号、医学影像和临床笔记
人工智能·机器学习·临床笔记+医学影像·早期融合·中期融合·晚期融合
放下华子我只抽RuiKe52 小时前
机器学习核心算法全景指南
人工智能·python·深度学习·算法·机器学习·机器人·交互
FluxMelodySun2 小时前
机器学习(二十四) 降维 : MDS降维方法与线性降维方法
人工智能·算法·机器学习
白小筠2 小时前
# 决策树
算法·决策树·机器学习
乾元3 小时前
职业进阶: 传统安全工程师如何转型为 AI 安全专家?
网络·人工智能·安全·web安全·机器学习·网络安全·安全架构
zh路西法3 小时前
【宇树机器人强化学习】(五):go2奖励函数的实现与模型检验
python·深度学习·算法·机器学习·机器人
二进制的Liao3 小时前
从“龙虾”到失控:自主AI智能体安全性博弈
人工智能·机器学习·ai·aigc·ai-native
青火coding3 小时前
Embedding是什么?从文本转向量
java·机器学习·ai·embedding