机器学习》二刷超详细笔记| 第二章 模型评估与选择
博主在4月学完西瓜书时,一头雾水,觉得还是一知半解。9月开学后上完了必修的《machine learning》课程,并且自己编程实现了多种机器学习算法和论文复现后,才对机器学习有一点了解,现在再次翻阅西瓜书,很多知识点看到都豁然开朗。所以出这一系列文章,对机器学习进行回顾,总结和记录!为大家揭开机器学习的神秘面纱!
1、经验误差与过拟合
通常我们把分类错误的样本数占样本总数的比例称为“错误率”(error rate),即如果在m个样本中有a个样本分类错误,则错误率E=a/m;相应的1-a/m就是“精度”(accuracy),即“精度=1-错误率”。
我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error),学习器在训练集上的误差称为 “训练误差” 或 “经验误差”,在新样本上的误差称为“泛化误差”。
-
过拟合:学习器把训练样本学的“太好了”,已经把训练样本自身的一些特点当作了所有潜在样本都具有的一般性质,这样就会导致泛化性能下降。
-
欠拟合:对训练样本的一般性质尚未学好。
有多种因素导致过拟合,其中最常见的就是学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,欠拟合是由于学习能力底下低下造成的。欠拟合比较容易克服,例如在决策树中扩展分支、在神经网络学习中增加训练轮次等;而过拟合很难解决,而且是无法彻底避免的,我们所能做的只是“缓解”,或者说减小其风险。
2、评估方法
在讲评估方法前,我们先来回顾一下训练集和测试集的概念。
大家从小到大肯定经过无数次期末考试了,对考试一定不会陌生。假设这样一个场景:在考试前,老师发给大家历年的试卷(训练集),让大家回去复习,然后考试时的试卷(测试集)上的题目全部是原题。
训练样本相当于老师给同学们练习的习题,测试过程相当于考试。显示,如果测试样本被用来训练了,那得到的将是过于“乐观”的估计结果,人均90不是梦。(像极了本科的期末考试
)
2.1、留出法
留出法直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即S∪T=D,S ∩ T=∅。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。
以二分类任务为例,假定D包含1000个样本,将其划分为S包含700个样本,T包含300个样本,用S进行训练后,如果模型在T上有90个样本分类错误,则错误率为(90/300) x 100%=30%,相应的,精度为1-30%=70%。所以我们可以说这个模型的精度为70%,不能说成准确率哦,后面会谈到准确率。
2.2、交叉验证法
它的思想就是将数据集D分成k个大小相似的互斥子集,即D=D1∪D2∪…U Dk,其中> 博主在4月学完西瓜书时,一头雾水,觉得还是一知半解。9月开学后上完了必修的《machine learning》课程,并且自己编程实现了多种机器学习算法和论文复现后,才对机器学习有一点了解,现在再次翻阅西瓜书,很多知识点看到都豁然开朗。所以出这一系列文章,对机器学习进行回顾,总结和记录!为大家揭开机器学习的神秘面纱!
@TOC
1、经验误差与过拟合
通常我们把分类错误的样本数占样本总数的比例称为“错误率”(error rate),即如果在m个样本中有a个样本分类错误,则错误率E=a/m;相应的1-a/m就是“精度”(accuracy),即“精度=1-错误率”。
我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error),学习器在训练集上的误差称为 “训练误差” 或 “经验误差”,在新样本上的误差称为“泛化误差”。
-
过拟合:学习器把训练样本学的“太好了”,已经把训练样本自身的一些特点当作了所有潜在样本都具有的一般性质,这样就会导致泛化性能下降。
-
欠拟合:对训练样本的一般性质尚未学好。
有多种因素导致过拟合,其中最常见的就是学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,欠拟合是由于学习能力底下低下造成的。欠拟合比较容易克服,例如在决策树中扩展分支、在神经网络学习中增加训练轮次等;而过拟合很难解决,而且是无法彻底避免的,我们所能做的只是“缓解”,或者说减小其风险。
2、评估方法
在讲评估方法前,我们先来回顾一下训练集和测试集的概念。
大家从小到大肯定经过无数次期末考试了,对考试一定不会陌生。假设这样一个场景:在考试前,老师发给大家历年的试卷(训练集),让大家回去复习,然后考试时的试卷(测试集)上的题目全部是原题。
训练样本相当于老师给同学们练习的习题,测试过程相当于考试。显示,如果测试样本被用来训练了,那得到的将是过于“乐观”的估计结果,人均90不是梦。(像极了本科的期末考试
)
2.1、留出法
留出法直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即S∪T=D,S ∩ T=∅。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。
以二分类任务为例,假定D包含1000个样本,将其划分为S包含700个样本,T包含300个样本,用S进行训练后,如果模型在T上有90个样本分类错误,则错误率为(90/300) x 100%=30%,相应的,精度为1-30%=70%。所以我们可以说这个模型的精度为70%,不能说成准确率哦,后面会谈到准确率。
2.2、交叉验证法
它的思想就是将数据集D分成k个大小相似的互斥子集,即D=D1∪D2∪…U Dk,其中每个子集的交集都为∅。然后,每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集,这样就得到了k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。
交叉验证法评估结果的稳定性和真实性很大程度上取决于k的取值,所以通常把交叉验证法称为“k折交叉验证”,k的常用取值是10,此时称为10折交叉验证。
2.3、自助法
给定包含m个样本的数据集D,我们对它进行采样产生数据集D’:每次随机从D中选出一个样本,拷贝到D’中,然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次,我们就得到了包含m个样本的数据集D’,这就是自助采样。
如果训练集中的样本没有在测试集中出现过,那么这样的测试结果称为“包外估计”。
2.4、调参与最终模型
大多数学习算法都有些参数(parameter)需要设定,参数配置不同,学得模型的性能往往有显著差别。因此,在进行模型评估与选择时,除了要对适用算法进行选择,还需要对算法参数进行设定,这就是通常所说的“参数调节”或简称“调参”。(parameter tuning)
我们已经知道训练集和测试集的概念了,下面来介绍下验证集。
模型评估与选择中用于评估测试的数据集称为“验证集”,也就是说在调参过程中,用来测试模型性能的数据集就叫做验证集,换句话说,验证集就是用来调参和模型选择的。
3、性能度量
要评估学习器 f 的性能,就要把学习器预测结果f(x)与真实标记y进行比较。
这一节大家掌握混淆矩阵就可以了,关于ROC、AUC和代价曲线等,稍微了解即可。
查准率(precision):又称“准确率”,用P表示,关心我们选出的西瓜中有多少是好瓜。
查全率(recall):又称“召回率”,用R表示,关心所有好瓜中有多少好瓜被我们挑了出来。
对于二分类问题,可将样例根据其真实学习类别与学习器预测类别的组合划分为真正例,假真例,真反例,假反例四种情形,令TP、FP、TN、FN表示其对应的样例数,显然有TP+FP+TN+FN=样例总数。分类结果的混淆矩阵如下:
这里的T和F是True和False的缩写,后面的P和N是Positive和Negative的缩写。
*****************记忆秘诀****************
所谓的真和假是根据真实情况和预测结果进行同或,
相同则为1(真),不同为0(假);
所谓的正例和反例是根据预测结果来定。
查准率P和查全率R分别定义为:
查准率和查全率是一对矛盾的度量,一般来说,查准率高时,查全率往往偏低,而查全率高时,查准率往往偏低,从书上的P-R曲线可以明显看出来。
4、比较检验
机器学习中性能比较比大家想象的复杂的多,有几点原因:
- 首先,我们希望比较的是泛化性能,然而评估获取到的只是测试集上的性能,二者对比结果未必相同。
- 测试集上的性能与测试集本身的选择有很大关系。
- 很多机器学习算法本身有一定的随机性,即便用相同的参数设置在同一个测试集上多次运行,其结果也会不同。
统计假设检验为我们进行机器学习性能比较提供了重要依据。
5、偏差与方差
方差和偏差是用来研究学习器为什么具有这样的性能的工具。
偏差:描述的是预测值(估计值)的期望与真实值之间的差距。偏差越大,越偏离真实数据,如下图第二行所示。
方差:描述的是预测值的变化范围,离散程度,也就是离其期望值的距离。方差越大,数据的分布越分散,如下图右列所示。
- 点赞
- 收藏
- 关注作者
评论(0)