(读书笔记)周志华-机器学习-第二章 模型评估与选择

一、经验误差与过拟合

1.错误率(分类错误的样本数占样本总数的比例),即如果在 m 个样本中有α个样本分类错误,则错误率E=α/m;

2.精度(1-错误率)即1-a/m;

3.误差(学习器的实际预测输出与样本的真实输出之间的差异);

   训练误差/经验误差(学习器在训练集上的误差);

   泛化误差(在新样本上的误差);

我们实际希望的,是在新样本上能表现得很好的学习器。为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的"普遍规律",这样才能在遇到新样本时做出正确的判别。基于这个会出现“过拟合”和“欠拟合”两种现象。

4.过拟合(学习器把训练样本学得太好,导致泛化性能下降);欠拟合(学习器对训练样本得一般性质尚未学好)如图所示:

 二、评估方法

1、留出法

        直接将数据集D划分为两个互斥的集合,一个为训练集S,另一个为测试集T,即D=S∪T,S∩T=Ø,在S上训练出模型后,用T来评估其测试误差;

        需注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免困数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似。

        单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。

        同时,留出法还存在一个很大的问题,若令训练集S包含绝大多数样本,则训练出的模型可能更接近于用D训练出的模型, 但由于T比较小,评估结果可能不够稳定准确;若令测试集T多包含一些样本,则训练集S与D差别更大了,被评估的模型与用D训练出的模型相比可能有较大差别,从而降低了评估结果的保真性;常见做法是将大约 2/3 ~ 4/5 的样本用于训练,剩余样本用于测试。

2、交叉验证法

        先将数据集 D 划分为 k 个大小相似的互斥子集,即D=D1∪D2∪...∪Dk,Di∩Dj=Ø(i≠j)。每个子集 Di 都尽可能保持数据分布的一致性,即从D中通过分层采样得到。每次用 k-1个子集的并集作为训练集,余下的那个子集作为测试集;获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值,因此交叉验证法又可称为为 "k折交叉验证",k最常用的取值是10。k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值。

         假定数据集D 中包含m个样本, 若令k=m,则得到了交叉验证法的一 个特例:留一法;显然, 留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分为m个子集一一每个子集包含一个样本。

3、自助法

        给定包含m个样本的数据集D,对它进行采样产生数据集D': 每次随机从D中挑选一个样本,将其拷贝放入D' ,然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次后,我们就得到了包含m 个样本的数据集D',样本在m次采样中始终不被采到的概率是(1-1/m)^m,取极限得到

 所以我们可以将D'用作训练集, D-D'用作测试集。

4、三种评估方法的优劣

        自助法在数据集较小、难以有效划分训练/测试集时很有用;能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。

        留出法和交叉验证法在初始数据量足够时更常用一些。

5、调参与最终模型

        在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,这一过程称为“参数调节”,简称“调参”。常用的做法是对每个参数选定一个范围和变化步长,显然,这样选定的参数值往往不是"最佳"值,但这是在计算开销和性能估计之间进行折中的结果,通过这个折中,学习过程才变得可行。

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

三、性能度量

        衡量模型泛化能力的评价标准即为“性能度量”。回归任务最常用的性能度量为“均方误差”

更一般的对于数据分布D与概率密度函数P(·),均方误差为

1、错误率与精度

错误率是分类错误的样本数占样本总数的比例;

精度是分类正确的样本数占样本总数的比例;

更一般的,对于数据分布Ð和概率密度函数P(·),错误率与精度可分别描述为

2、 查准率、查全率与Fl

查准率亦称"准确卒" ,查全率亦称"召回率"。

对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例TP、假正例FP、真反例TN、 假反例FN四种情形,有TP+FP+TN+FN=样例总数。分类结果的“混淆矩阵”如下所示;

查准率P与查全率R分别定义为

查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称 "P-R曲线"显示该曲线的图称为 "P-R图"。"平衡点(简称BEP)" 是"查准率=查全率"时的取值。

 但BEP还是过于简化了些,更常用的是F1度量:

 F1度量的一般形式Fß:

其中 ß>O度量了查全率对查准率的相对重要性。ß = 1 时退化为标准的F1;ß> 1 时查全率有更大影响;ß < 1 时查准率有更大影响。

很多时候我们会有多个二分类混淆矩阵,我们希望在n个二分类混淆矩阵上综合考察查准率和查全率,即可以是先在各混淆矩阵上分别计算出查准率和查全率, 记为 (P1,R1)、(P2,R2)、...、(Pn,Rn),再计算平均值,这样就得到"宏查准率"、 "宏查全率" ,以及相应的"宏F1" :

还可先将各泪淆矩阵的对应元素进行平均,得到TP、 FP、 TN、 FN 的 平均值,,再基于这些平均值计算出"微查准率"、 "徽查全率" 和"微F1" :

 3、ROC 与 AUC

根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图就得到了 "ROC曲线"与P-R曲线使用查准率、查全率为纵、横轴不同,ROC曲线的纵轴是"真正例率" (简称 TPR),横轴是"假正例率" (简称 FPR):

 ROC曲线的图称为 "ROC图":

 AUC可通过对ROC曲线下各部分的面积求和而得,可估算为:

 AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。给定m+个正例和m-个反例,令D+和D-分别表示正、反例集合, 则排序"损失"定义为:

4、代价敏感错误率与代价曲线

如下图所示,其中costij表示将第i类样本预测为第j类样本的代价。一般来说,costii=0;若将第0类判别为第1类所造成的损失更大,则 cost01 > cost10; 损失程度相差越大,cost01与 cost10 值的差别越大。

 则"代价敏感"错误率为:

 ROC曲线上每一对应了代价平面上的二条线段,设ROC曲线上点的坐标为(TPR,FPR),则可相应计算出 FNR=1-TPR,然后在代价平面上绘制一条从 (0,FPR) 到 (1,FNR) 的线段,线段下的面积即表示了该条件下的期望总体代价。

四、比较检验

1、假设校验

        泛化错误率为ϵ的学习器在一个样本上犯错的概率是ϵ;测试错误率 ϵ ^ 是指在m个测试样本中恰有ϵ ^个被误分类。假定测试样本是从样本总体分布中独立采样而得,那么泛化错误率为ϵ的学习器将其中 m'个样本误分类、 其余样本全部分类正确的概率是;由此可估算出其恰将ϵ ^ x m个样本误分类的概率为

解 可知,;二项分布图如下:

 在很多时候我们并非仅做一次留出法估计,而是通过多次重复留出法或是交叉验证法等进行多次训练/测试,这样会得到多个测试错误率, 此时可使用 "t检验" 。假定我们得到了 k个测试错误率,则平均测试错误率μ和方差σ2为

 考虑到这k个测试错误率可看作泛化错误率ϵ0的独立采样,则变量

服从自由度为k-1的t分布,如下图所示: 

对假设"μ = ϵ0"和显著度α,我们可计算出当测试错误率均值为 ϵ0时,在1-α概率内能观测到的最大错误率,即临界值 。.若平均错误率 μ 与 ϵ0之差 |μ - ϵ0l 位于临界值范围[t_α/2,tα/2]内,则不能拒绝假设"μ = ϵ0",即可认为泛化错误率为 ϵ0,置信度为 1-α; 否则可拒绝该假设。一些常用临界值如下图所示:

 2、交叉验证t检验

        对两个学习器A和B,若我们使用 k折交叉验证法得到的测试错误率分别为,其中是在相同的第i折训练/测试集上得到的结果,则可用k折交叉验证"成对t检验"来进行比较检验。

        对k折交叉验证产生的k对测试错误率:先对每对结果求差, ;若两个学习器性能相同,则差值均值应为零。因此,可根据差值来对"学习器 A 与 B 性能相同"这个假设做 t 检验,计算出差值的均值μ和方差σ2,在显著度α下,若变量

 小于临界值,则假设不能被拒绝,即认为两个学习器的性能没有显著差差别;;否则可认为两个学习器的性能有显著差别,且平均错误率较小的那个学习器性能较优。

3、McNemar 检验

         若我们做的假设是两学习器性能相同,则应有 e01=e10,那么变量 le01 - e10l 应当服从正态分布,且均值为 1,方差为 e01 十e10。因此变量

服从自由度为1的χ2 分布,即标准正态分布变量的平方。给定显著度α,当以上变量小于临界值时,不能拒绝假设,即认为两学习器的性能没有显著差 别;否则拒绝假设,即认为两者性能有显著差别,且平均错误率较小的那个学习器性能较优。

4、Friedman 检验与 Nemenyi 后续检验

假定我们用 D1、D2、 D3 和 D4 四个数据集对算法A、 B、 C进行比较。首先使用留出法或交叉验证法得到每个算法在每个数据集上的测试结果,然后在每个数据集上根据测试性能由好到坏排序,并赋予序值1, 2, ...,若算法的测试性能相同,则平分序值。

假定我们在N个数据集上比较k个算法,令ri表示第i个算法的平均序值,ri服从正态分布,其均值和方差分别为(k+1)/2和(k2-1)/12。变量

 在k和N都较大时,服从自由度为 k-1 的χ2分布。现在通常使用变量

服从自由度为k-1和(k- l)(N - 1)的F分布。 若"所有算法的性能相同"这个假设被拒绝,则说明算法的性能显著不同。这时需进行"后续检验" 来进一步区分各算法。常用的有 Nemenyi 后续检验。Nemenyi 检验计算出平均序值差别的临界值域

α=0.05和0.1时常用的如下图所示

 五、偏差与方差

 对测试样本x,令yd为x在数据集中的标记,y为x的真实标记, f(x;D) 为训练集D上学得模型f在x上的预测输出。

期望预测为:

方差为:度量了闰 样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;

噪声为:表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度;

期望输出与真实标记的差别称为偏差:,度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;

为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并 且使方差较小,即使得数据扰动产生的影响小。

假定噪声期望为0,即ED[yd-y]=0。通过简单的多项式展开合并,可对算法的期望泛化误差进行分解:

得到 也就是说泛化误差可分解为偏差、方差与噪声之和。

示意图如下:

  • 32
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本章主要介绍了概率图模型的基本概念和常见类型,以及如何利用Python实现这些模型。下面是一些笔记和代码示例。 ## 概率图模型的基本概念 概率图模型是一种用于表示和处理不确定性的图形化模型,它能够将一个复杂的联合概率分布表示为多个简单的条件概率分布的乘积形式,从而简化概率推理和模型学习的过程。概率图模型主要包括两种类型:有向图模型和无向图模型。 有向图模型(Directed Acyclic Graph, DAG)又称为贝叶斯网络(Bayesian Network, BN),它用有向边表示变量之间的因果关系,每个节点表示一个随机变量,给定父节点的条件下,每个节点的取值都可以用一个条件概率分布来描述。有向图模型可以用贝叶斯公式进行概率推理和参数学习。 无向图模型(Undirected Graphical Model, UGM)又称为马尔可夫随机场(Markov Random Field, MRF),它用无向边表示变量之间的相互作用关系,每个节点表示一个随机变量,给定邻居节点的取值,每个节点的取值都可以用一个势函数(Potential Function)来描述。无向图模型可以用和有向图模型类似的方法进行概率推理和参数学习。 ## 概率图模型的Python实现 在Python中,我们可以使用`pgmpy`库来实现概率图模型。该库提供了一个简单而强大的接口来定义和操作概率图模型,支持有向图模型和无向图模型的构建、概率推理、参数学习等功能。 ### 有向图模型 以下是一个简单的有向图模型的示例: ```python from pgmpy.models import BayesianModel model = BayesianModel([('A', 'B'), ('C', 'B'), ('B', 'D')]) ``` 其中,`BayesianModel`是有向图模型的类,`('A', 'B')`表示A节点指向B节点,即B节点是A节点的子节点,依此类推。我们可以使用以下代码查看模型的结构: ```python print(model.edges()) # 输出:[('A', 'B'), ('B', 'D'), ('C', 'B')] ``` 接下来,我们可以为每个节点定义条件概率分布。以下是一个简单的例子: ```python from pgmpy.factors.discrete import TabularCPD cpd_a = TabularCPD(variable='A', variable_card=2, values=[[0.2, 0.8]]) cpd_c = TabularCPD(variable='C', variable_card=2, values=[[0.4, 0.6]]) cpd_b = TabularCPD(variable='B', variable_card=2, values=[[0.1, 0.9, 0.3, 0.7], [0.9, 0.1, 0.7, 0.3]], evidence=['A', 'C'], evidence_card=[2, 2]) cpd_d = TabularCPD(variable='D', variable_card=2, values=[[0.9, 0.1], [0.1, 0.9]], evidence=['B'], evidence_card=[2]) model.add_cpds(cpd_a, cpd_c, cpd_b, cpd_d) ``` 其中,`TabularCPD`是条件概率分布的类,`variable`表示当前节点的变量名,`variable_card`表示当前节点的取值个数,`values`表示条件概率分布的值。对于有父节点的节点,需要指定`evidence`和`evidence_card`参数,表示当前节点的父节点和父节点的取值个数。 接下来,我们可以使用以下代码进行概率推理: ```python from pgmpy.inference import VariableElimination infer = VariableElimination(model) print(infer.query(['D'], evidence={'A': 1})) # 输出:+-----+----------+ # | D | phi(D) | # +=====+==========+ # | D_0 | 0.6000 | # +-----+----------+ # | D_1 | 0.4000 | # +-----+----------+ ``` 其中,`VariableElimination`是概率推理的类,`query`方法用于查询给定变量的概率分布,`evidence`参数用于指定给定变量的取值。 ### 无向图模型 以下是一个简单的无向图模型的示例: ```python from pgmpy.models import MarkovModel model = MarkovModel([('A', 'B'), ('C', 'B'), ('B', 'D')]) ``` 其中,`MarkovModel`是无向图模型的类,与有向图模型类似,`('A', 'B')`表示A节点和B节点之间有相互作用关系。 接下来,我们可以为每个节点定义势函数。以下是一个简单的例子: ```python from pgmpy.factors.discrete import DiscreteFactor phi_a = DiscreteFactor(['A'], [2], [0.2, 0.8]) phi_c = DiscreteFactor(['C'], [2], [0.4, 0.6]) phi_b = DiscreteFactor(['A', 'C', 'B'], [2, 2, 2], [0.1, 0.9, 0.3, 0.7, 0.9, 0.1, 0.7, 0.3]) phi_d = DiscreteFactor(['B', 'D'], [2, 2], [0.9, 0.1, 0.1, 0.9]) model.add_factors(phi_a, phi_c, phi_b, phi_d) ``` 其中,`DiscreteFactor`是势函数的类,与条件概率分布类似,需要指定变量名、变量取值个数和势函数的值。 接下来,我们可以使用以下代码进行概率推理: ```python from pgmpy.inference import BeliefPropagation infer = BeliefPropagation(model) print(infer.query(['D'], evidence={'A': 1})) # 输出:+-----+----------+ # | D | phi(D) | # +=====+==========+ # | D_0 | 0.6000 | # +-----+----------+ # | D_1 | 0.4000 | # +-----+----------+ ``` 其中,`BeliefPropagation`是概率推理的类,与有向图模型类似,`query`方法用于查询给定变量的概率分布,`evidence`参数用于指定给定变量的取值。 ## 总结 本章介绍了概率图模型的基本概念和Python实现,包括有向图模型和无向图模型的构建、条件概率分布和势函数的定义、概率推理等。使用`pgmpy`库可以方便地实现概率图模型,对于概率模型的学习和应用都有很大的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值