前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《机器学习》-- 第二章:模型评估与选择

《机器学习》-- 第二章:模型评估与选择

作者头像
fireWang
发布2019-07-31 18:02:09
8710
发布2019-07-31 18:02:09
举报
文章被收录于专栏:零维领域零维领域

本文目录:

  • 2.1 经验误差与过拟合
    • 2.1.1 概念解析
    • 2.1.2 注意事项
  • 2.2 评估方法(数据集划分方法)
    • 2.2.1 留出法 LOO
    • 2.2.2 交叉验证 CV
    • 2.2.3 自助法 bootstrapping
    • 2.2.4 调参与最终模型
  • 2.3 性能度量
    • 2.3.1 错误率与精度
    • 2.3.2 查准率、查全率与F1(混淆矩阵)
    • 2.3.3 ROC与AUC
    • 2.3.4 代价敏感错误率与代价曲线

第二章 模型评估与选择

2.1 经验误差与过拟合

2.1.1 概念解析

(1) 误差:学习器的实际预测输出与样本的真实输出之间的差异;其中学习器在训练集上的误差称为”训练误差“(training error),在新样本上的误差称为”泛化误差“(generalization error)。值得一提的是,学习器就是在训练集上训练出来的,但实际上在回到训练集上对样本预测结果时,仍有误差。(即结果值与标记值不同)

(2) 错误率:分类错误的样本数占样本总数的比例,

个样本错误,

个样本总数)

(3) 精度:与错误率的概念相反,

(4) 过拟合(overfitting):学习器学习的”太好了“,把训练样本自身的特点当作了所有潜在样本都会有的一般性质。(注意:过拟合会造成泛化性能下降)

(5) 欠拟合(underfitting):对训练样本的性质尚未学好

(4) 过拟合(overfitting):学习器学习的”太好了“,把训练样本自身的特点当作了所有潜在样本都会有的一般性质。(注意:过拟合会造成泛化性能下降)

(5) 欠拟合(underfitting):对训练样本的性质尚未学好

过拟合和欠拟合图示

2.1.2 注意事项

(1)泛化误差

我们一直希望得到泛化误差最小的学习器。但是我们实际能做的就是努力使经验误差最小化。注意:努力使经验误差最小化≠让经验误差达到最小值,即训练集的分类错误率为 0%。因为在训练集上表现很好的学习器,泛化能力却并不强。

(2)欠拟合与过拟合

欠拟合比较容易克服,往往因为学习器学习能力过强造成的过拟合较难处理,但是实际上过拟合是机器学习过程中必须面对的障碍。我们必须认识到过拟合我们无法彻底避免,我们只能尽可能”缓解“。

从理论上讲,机器面临的问题通常是 NP 难或者更难,而有效的学习算法是在多项式时间内完成的,若可以彻底避免过拟合,则通过经验误差最小化就获得最优解,那么我们构造性的证明了 P=NP,但实际上 P≠NP,也就是说这是不可能完成的。

2.2 评估方法(数据集划分方法)

在现实任务中,我们往往有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型,那么,我们该选用哪一个学习算法、使用哪一种参数配置呢?

这就是机器学习中的“模型选择” (model selection)问题,理想的解决方案当然是对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个模型,然而如上面所讨论的,我们无法直接获得泛化误差而训练误差又由于过拟合现象的存在而不适合作为标准。

因此,通常,我们需要通过实验测试来对学习器的泛化误差进行评估从而做出选择。此时,我们需要一个“测试集”来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”作为泛化误差的近似。

(假设测试样本独立同分布)我们知道一个

个样例的数据集

,我们要对这个数据集既要训练又要测试,那么如何产生训练集

和测试集

是我们要面对的问题。

数据集划分

2.2.1 留出法 LOO

留出法 Leave-one-out:直接将数据集

划分为两个互斥的集合,其中一个集合作为训练集

,另一个作为测试集

,即

留出法(非分层采样)

如上图所示,两个同心圆。其中内圆红色部分为训练集,外环绿色部分为测试集,两部分是两个互斥的集合。

除此之外,留出法还要尽可能的保持数据分布的一致性,要保持样本类别比例相似,从采样的角度看待数据采集的划分过程,保留类别比例的采样方式通常称为“分层采样”。

就好比它真是一个西瓜,按甜度将其分为七块,采样时每一块都要按照相同的所占比例去采。这七类数据集的测试集与训练集的比值应是相等的。

留出法(分层采样)

注意:单次使用留出法所得到的估计结果往往不稳定可靠,在使用留出法时,一般采用若干次随机划分、重复实验取平均值。

留出法的特点:

  1. 直接划分训练集与测试集;
  2. 训练集和测试集采取分层采样;
  3. 随机划分若干次,重复试验取平均值

2.2.2 交叉验证 CV

交叉验证法 cross-validation:先将数据集

分为

个大小相似的互斥子集,即

。每个子集

都尽可能保持数据分布的一致性,即每个子集仍然要进行分层采样。每次用

个子集作为训练集,余下作测试集,这样可以获得

组“训练/测试集”,最终返回的是

个结果的均值。

交叉验证示意图

与留出法类似,将数据集

划分为

个子集同样存在多种划分方式。为减少因样本划分不同而引入的差别,

折交叉验证通常也要重复

次实验,最后取均值。

交叉验证的特例:

留一法(LOO):

个样本划分成

个子集,每个子集包含一个样本。留一法中被实际评估的模型与期望评估的用

训练出来的模型很相似,因此,留一法的评估结果往往被认为比较准确。

留一法缺陷:当数据集过大时,计算开销、时间开销、空间开销都是难以忍受的(还未考虑算法调参)。

2.2.3 自助法 bootstrapping

留出法与交叉验证法都会使训练集比

小,这必然会引入一些因样本规模不同而导致的估计偏差。那么如何做到较少训练样本规模不同造成的影响,同时还高效地进行实验估计呢?

自助法 bootstrapping:对有

个样本的数据集

,按如下方式采样产生数据集

:每次随机取一个样本拷贝进

,取

次(有放回取

次)。

按此方法,保证了

的规模一致。但

虽然也有

个样本,其中会出现重复的样本,

中会存在

没有采到的样本,这些样本就留作测试集。

计算某样本在

次采样中均不会被采到的概率是:

,取极限可得

由此可知,理论上有36.8%的样本没有出现在在

之中,我们把

作为测试集。

优点:训练集与数据集规模一致;数据集小、难以有效划分训练/测试集时效果显著;能产生多个不同的训练集;

缺点:改变了训练集的样本分布,引入估计偏差。

2.2.4 调参与最终模型

大多数学习算法都有些参数 (parameter) 需要设定,参数配置不同,学得模型的性能往往有显著差别,因此,在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,这就是通常所说的“参数调节”或简称“调参” (parameter tuning)。

因为学习算法的参数可能是在实数域,因此对每种参数配置都训练相应的模型成为了不可行方案,通常我们对每个参数选定一个范围变化步长,显然,这样选定的参数值往往不是“最佳”值,但这是在计算开销和性能估计之间进行折中的结果,通过这个折中,学习过程才变得可行,

给定包含

个样本的数据集

,在模型评估与选择过程中由于需要留出一部分数据进行评估测试,事实上我们只使用了一部分数据训练模型。

因此,在模型选择完成后,学习算法和参数配置已选定,此时应该用数据集

重新训练模型,这个模型在训练过程中使用了所有

个样本,这才是我们最终提交给用户的模型。

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

例如,在研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集和验证集,基于验证集上的性能来进行模型选择和调参。

(1)概念详解

  • 调参 parameter tunning:对模型进行评估和选择时,对算法参数 parameter 进行标定。
  • 验证集 validation set:模型评估与选择中用于评估测试的数据集。

(2)参数的分类

  • 算法的参数:亦称超参数,数目在十以内
  • 模型的参数:数目众多。

2.3 性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要衡量模型泛化能力的评价标准,即性能度量 performance measure。不同的性能度量,模型的好坏也不同,故模型的好坏是相对的。它取决于三个方面:

  • 算法(算法类型+ 参数)
  • 数据情况
  • 任务需求
  • 原型设计阶段:离线评估 Offline evaluation
  • 应用阶段:在线评估 Online evaluation , 一般使用商业评价指标

通常机器学习过程包括两个阶段,原型设计阶段和应用阶段 原型设计阶段是使用历史数据训练一个适合解决目标任务的一个或多个机器学习模型,并对模型进行验证( Validation )与离线评估( Offline evaluation ),然后通过评估指标选择一个较好的模型。比如准确率( accuracy )、精确率-召回率( precision-recall)等 应用阶段是当模型达到设定的指标值时便将模型上线,投入生产,使用新生成的数据来对该模型进行在线评估( Online evaluation ),以及使用新数据更新模型。在线评估中,一般使用一些商业评价指标,如用户生命周期价值( Customer Lifetime Value, CLV )、广告点击率(ClickThrough Rate, CTR)、用户流失率( Customer Churn Rate, CCR)等,这些指标才是模型使用者最终关心的一些指标。

预测任务中,给定样例数据集

,其中

是示例

的真实标记。评估学习器

的性能,需要将学习器的预测结果

同真实标记

进行比较。

本节内容,原书都以分类任务的常用性能度量为例。

2.3.1 错误率与精度

错误率 error rate:

其中

为指示函数 indicator function ,若表达式为真则取值为1,否则取值0

精度 accuracy:

更一般的,对于数据分布

和概率密度函数

,错误率和精度可分别描述为

2.3.2 查准率、查全率与F1(混淆矩阵)

当需要反映的不是判断正确与否的能力,而是正例、反例查出的准确率时,就不能用错误率和精度作为判断分类任务模型的性能度量了,查准率(准确率) precision 和查全率(召回率) recall 应运而生。(因为各个翻译版本的不同,下文都以英文表示)

为了说明 precision 和 recall,我们引入混淆矩阵 confusion matrix。可以说,confusion matrix 很直观地表示了各个指标的定义、来源以及作用意义。

以 维基百科 给出的表格释义最为直观与全面

confusion_matrix

其中,True condition 表示数据集中各数据样本的真实标记值,一般即为

,Predicted condition 表示学习算法给出的预测值。

True positive (TP):真正例,即真实值为1,预测为1 False positive (FP):假正例,即真实值为0,预测为1 False negtive (FN):假反例,即真实值为1,预测为0 True negtive (TN): 真反例,即真实值为0,预测为0

有了confusion matrix ,我们就可以很直观地知道其他指标的定义了

precision(Positive predictive value,PPV) :预测为正例的样本中真正例的比例

Recall(True positive rate, TPR, Sensitivity) :真实值为正例中被预测为正例的比例

可以发现,precision 反映准确性,recall 反映全面性,他们是一对矛盾的存在。为了找到 P、R之间的平衡点,我们将以 precision 为纵轴,recall 为横轴,建立直角坐标系,就得到”P-R“图

P-R图

根据 P-R 曲线,我们就可以去评价学习器性能的优劣

  • 当曲线没有交叉的时候:外侧曲线的学习器性能优于内侧;
  • 当曲线有交叉的时候(此时无法根据 P-R 图得到哪个学习器更优,需要在具体情境下比较):
  • 比较曲线下面积(值不容易计算)
  • 比较两条曲线的平衡点 Break-Even Point (BEP),平衡点是“precision=recall”时的取值,在上图中表示为曲线和对角线的交点,平衡点在外侧的曲线的学习器性能优于内侧

度量和

度量。

是基于查准率与查全率的调和平均 harmonic mean ,

则是加权调和平均

其中,

度量了recall 对 precision 的相对重要性,

退化为标准

时 recall 有更大影响,反之,precision 有更大影响。

对于我们有多个二分类混淆矩阵的情况,例如进行多次训练/测试,每次得到一个混淆矩阵;或是在多个数据集上进行训练/测试,希望估计学习算法的“全局”性能;

甚或是执行多分类任务,每两两类别的组合都对应一个混淆矩阵……总之,我们希望在n个二分类混淆矩阵上综合考察查准率 precision 和查全率recall,

于是就有了宏查准率 (macro-P)、 宏查全率(macro-R)、宏F1(macro-F1)以及微查准率 (micro-P)、 微查全率(micro-R)、微F1(micro-F1)

宏 macro :在 n 个混淆矩阵中分别计算出 precision、recall,再计算均值,就得到“宏查准率, macro-P”、“宏查全率, macro-R ”和“宏F1, macro-F1”

微 micro :先将n个混淆矩阵的对应元素

进行平均得到

,再计算precison, recall 和 F1,就得到“微查准率,micro-P”、“微查全率,micro-R”和 “微F1,micro-F1”。

2.3.3 ROC与AUC

很多学习器是为测试样本产生一个实值或概率预测,然后将这个预测值与一个分类阈值(threshold)进行比较,若大于阔值则分为正类,否则为反类。例如,神经网络在一般情形下是对每个测试样本预测出一个[0.0,1.0]之间的实值,然后将这个值与 0.5 进行比较,大于 0.5 则判为正例,否则为反例,这个实值或概率预测结果的好坏,直接决定了学习器的泛化能力。

实际上,根据这个实值或概率预测结果,我们可将测试样本进行排序, “最可能”是正例的排在最前面,“最不可能”是正例的排在最后面,这样,分类过程就相当于在这个排序中以某个“截断点” (cut point)将样本分为两部分,前一部分判作正例,后一部分则判作反例

在不同的应用任务中,我们可根据任务需求来采用不同的截断点,例如若我们更重视precision,则可选择排序中靠前的位置进行截断;若更重视 recall,则可选择靠后的位置进行截断。

因此,排序本身的质量好坏,体现了综合考虑学习器在不同任务下的期望泛化性能的好坏,或者说, “一般情况下”泛化性能的好坏。ROC曲线(Receiver Operating Characteristic curve)则是从这个角度出发来研究学习器泛化性能的有力工具。

ROC 名为”受试者工作特征“曲线,源于二战中用于敌机检测的雷达信号分析技术。与之前的P-R曲线相似,需要对样例进行排序,然后按顺序逐个将样本作为正例进行预测。

ROC曲线以真正例率(TPR,即Recall)为纵轴,假正例率(FPR)为横轴,ROC曲线下的面积为AUC(Area Under ROC Curve)

真正例率(TPR):【真正例样本数】与【真实情况是正例的样本数】的比值。反映预测正类中实际正类越多

假正例率(FPR):【假正例样本数】与【真实情况是反例的样本数】的比值。反映预测正类中实际负类越多

ROC-AUC

如图,理想模型是真正例率为100%,假正例率为 0% 的一点(左上角)。随机猜测模型则是真正例率与假正例率持平的直线。对角线对应于“随机猜测”模型,而点(0, 1)则对应于将所有正例排在所有反例之前的“理想模型”。

然而,现实任务中通常是利用有限个测试样例来绘制 ROC 图,此时仅能获得有限个(真正例率,假正例率)坐标对,ROC曲线绘图过程很简单:给定m+ (即 Condition positive)个正例和 m- (即Condition negtive)个反例,根据学习器预测结果对样例进行排序,然后把分类阈值设为最大,即把所有样例均预测为反例,此时真正例率和假正例率均为0,在坐标 (0,0) 处标记一个点,

然后,将分类阈值依次设为每个样例的预测值(从大到小),即依次将每个样例划分为正例,设前一个标记点坐标为

当前若为真正例,则对应标记点的坐标为

当前若为假正例,则对应标记点的坐标为

然后用线段连接相邻点即得。

利用ROC曲线比较学习器的性能优劣

  • 若一个学习器的ROC曲线被另一个学习器的曲线完全“包住” ,则可断言后者的性能优于前者
  • 若两个学习器的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣,此时如果一定要进行比较,则较为合理的判据是比较ROC曲线下的面积,即AUC

从定义可知,AUC可通过对ROC曲线下各部分的面积求和而得,假定ROC曲线是由坐标为

的点按序连接而形成

,则AUC可估算为

这里的估算方式实际上是使用了梯形公式(

),其中

为高,

分别为上底和下底,更详细的解析可以参考南瓜书

AUC 指标用来评估分类器性能,可以兼顾样本中类别不平衡的情况(当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变),这一点上要比分类准确率更加具有参考价值。

整体而言,混淆矩阵给我们呈现了一个清晰可见的分类模型效果评估工具,而基于混淆矩阵的评估指标可以从不同侧面来评价分类器性性能,至于在实际操作中使用什么样的评估指标来进行评价,还要视具体的分析目标而定。

(可参考文末的网站内容)

2.3.4 代价敏感错误率与代价曲线

从混淆矩阵中我们可以看到,存在两种错判的情况(FP 为 1型错误,FN为 2型错误),在前面介绍的性能度量标准下,它们都隐式地假设了均等代价(两种错判情况造成影响相等),然而,两种错误类型会造成的后果(错误代价)是不一致的。

例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了“一次错误” ,但后者的影响是增加了进一步检查的麻烦,前者的后果却可能是丧失了拯救生命的最佳时机;

再如,门禁系统错误地把可通行人员拦在门外,将使得用户体验不佳,但错误地把陌生人放进门内,则会造成严重的安全事故。

为权衡不同类型错误所造成的不同损失,为错误赋予“非均等代价”(unequal cost)。在非均等代价下,目标不再是简单地最小化错误次数,而是最小化总体代价 total cost 。

实现方式是,可根据任务的领域知识设定代价矩阵 cost matrix

代价矩阵cost matrix

其中

表示将第

类样本预测为第

类样本的代价。一般来说,

就对应于第一类错误,

就对应于第二类错误。如上图所示,第1类作为正类、第0类作为反类,令

分别代表样例集

的正例子集和反例子集,则“代价敏感” (cost-sensitive)错误率为

类似的,可给出基于分布定义的代价敏感错误率,以及其他一些性能度量如精度(precision)的代价敏感版本,若令

中的

取值不限于0、1,则可定义出多分类任务的代价敏感性能度量。

在非均等代价下, ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线” (cost curve)则可达到该目的,代价曲线图的横轴是取值为 [0,1] 的正例概率代价, 纵轴是取值为 [0,1] 的归一化代价

其中 FPR 是假正例率,FNR=1-TPR是假反例率,代价曲线的绘制很简单: ROC曲线上每一点对应了代价平面上的一条线段,设ROC曲线上点的坐标为(TPR, FPR),则可相应计算出 FNR ,然后在代价平面上绘制一条从 (0, FPR) 到(1, FNR) 的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价

代价曲线cost_curve

2.4 比较检验

2.5 偏差与方差

本文项目地址:

https://github.com/firewang/lingweilingyu/blob/master/contents/Machine_Learning_Zhi-Hua_Zhou.md

参考网址:

  • https://scikit-learn.org/stable/modules/classes.html#module-sklearn.model_selection
  • https://scikit-learn.org/stable/modules/cross_validation.html#cross-validation
  • https://en.wikipedia.org/wiki/Confusion_matrix
  • https://zhuanlan.zhihu.com/p/31458989
  • http://blog.csdn.net/qq1449301756/article/details/39207293
  • http://blog.csdn.net/dc_726/article/details/16862149
  • https://www.cnblogs.com/dlml/p/4403482.html
  • http://alexkong.net/2013/06/introduction-to-auc-and-roc/
  • https://datawhalechina.github.io/pumpkin-book/#/chapter2/chapter2
  • 周志华 著. 机器学习, 北京: 清华大学出版社, 2016年1月.
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 零维领域 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第二章 模型评估与选择
    • 2.1 经验误差与过拟合
      • 2.1.1 概念解析
      • 2.1.2 注意事项
    • 2.2 评估方法(数据集划分方法)
      • 2.2.1 留出法 LOO
      • 2.2.2 交叉验证 CV
      • 2.2.3 自助法 bootstrapping
      • 2.2.4 调参与最终模型
    • 2.3 性能度量
      • 2.3.1 错误率与精度
      • 2.3.2 查准率、查全率与F1(混淆矩阵)
      • 2.3.3 ROC与AUC
      • 2.3.4 代价敏感错误率与代价曲线
    • 2.4 比较检验
      • 2.5 偏差与方差
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档