一、问题
在现实任务中,我们往往有多种学习算沾了供选择,甚至对同 -个学习算法,当使用不同的参数配置时也会产生不 同的模型 . 那么,我们该选用 哪一个学习算法、使用哪一种参数配置呢?
理想的解决方案当然是对候选模型的泛化误差进行 评估 , 然后选择泛化误差最小的那个模型。然而,我们无法直接获得泛化误差,而训练误差又由于过拟合现象的存在而不适合作为标准,那么,在现实中如何进行模型评估与选择呢?
二、模型的选择
通常,我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。可以使用一个 "测试集 " 来测试学习器对新样本的判别,然后 以测试集上的"测试误差"作为泛化误差的近似,我们假设测试样本也是从样本真实分布 中独立同分布采样而得,但需注意的是,测试集应该尽可能与训练集互斥, 即测试样本尽量不在训练集中出现、未在训练过程中使用过。
1.留出法
留出法(hold-out)直接将数据集D分为两个互斥的集合,其中一个集合做为训练集S,另一个做为测试集T,在S上训练完成后用T来评估其测试误差,做为对泛化误差的估计。
常见的做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试
2.交叉验证法
交叉验证法(cross validation)先将数据集D划分为K个大小相似的互斥子集,每个子集都是通过分层采样得到,以尽可能保持数据分布的一致性;然后每次用k-1个子集做训练集,余下的子集做测试集,这样一共可以得到k组训练集/测试集,从而可以进行k次训练和测试,最终返回k次训练的均值。
通常把交叉验证又叫做k折交叉验证,如k取10,则是10折交叉验证;
留一法(leave-One-Out):特殊的,当数据集D中有m个样本,令k=m,即每个子集只有一个样本,也即每次只留出一个做为测试集,这样的方法叫做留一法。
3.自助法
引言:我们希望评估的是在数据集D上训练出的模型,但是留出法和交叉验证法都保留了一部分样本用于测试,数据集规模要小于原来的规模,因此会引入一些因训练样本规模不同而导致的估计偏差,留一法受训练样本规模影响较小,但是计算复杂度太高了(训练集很小时还行)。
自助法(bootstrapping),对于一个拥有m个样本的数据集D,有放回的进行采样m次,就得到了一个同等规模的D*,显然D*中有的样本会出现多次,有的样本一次都不会出现,可以简单估计,样本在m次采样中始终不被采到的概率是 (1-1/m)^m,取极限得到=1/e =0.368;即 通过自助法大约有1/3的数据被用来做测试集
实际评估的模型与期望评估的模型都是用m个训练样本,而我们仍有1/3的没在训练集出现的数据用于测试,这样的测试结果也称作包外估计(out-of-bagestimate)。
三、模型评估
模型评估是指对于一种具体方法输出的最终模型,使用一些指标和方法来评价它的泛化能力。这一步骤通常在模型训练和模型选择之后,正式部署模型之前。模型评估方法不针对模型本身,只针对问题和数据,因此可以用来评价来自不同方法的模型的泛化能力,进行用于部署的最终模型的选择。我们评估一个模型,最关心的是它的泛化能力,对于监督学习问题,泛化能力可以用泛化误差来衡量。
1.错误率与精度
作用:这是分类任务中常用的性能度量
错误率是分类错误的样本数占样本总数的比例
精度是分类正确的样本数占样本总数的比例
2.查准率与查全率F1
作用:有时候我们更关注的是检索出的结果中有多少是用户关心的,或者用户感兴趣的结果有多少被检索出来
参考:
机器学习——模型评估和选择_模型评估与选择_四川兔兔的博客-CSDN博客
机器学习——模型评估与选择 - 知乎