机器学习(周志华):chapter 2 模型评估与选择

本节主要总结以下几个内容:

  • 对model泛化能力进行评估的实验方法
  • model性能的度量指标
  • 用统计检验的方法 比较不同model之间性能的差异
  • 解析 model 的 bias and variance

一、对model泛化能力进行评估的实验方法

当我们训练好一个模型时,往往希望知道的并不是他在training_data上的表现,而是在实际应用中的预测精度,接下来介绍3种在实际中常用的用来评估model泛化能力的方法:

  1. 留出法
    1)将training data分为 train_set 和 test_set,利用train_set训练 机器学习模型,用test_set来测试机器学习模型的 泛化能力。
    2)需要注意的是,train_set和test_set的distribution应该尽可能的保持一致(可以采用分层采样的方法保证distribution的一致性)。
    3)一般train_set应占 training data 的 (2/3 , 4/5),其余的data用作test_set。
    4)用 留出法 估计的模型 泛化能力 并不稳定,因此,在实际中,应该 多次利用 留出法 评估 模型的泛化能力,取平均 作为 模型最后的泛化能力。
    5)我们通常希望利用所有training data来训练model,但是,留出法中 必须留出一部分样本用来test 模型的泛化能力,因此,无法做到这一点,也即我们最终得到的model使用train_set训练得到的,而非training data。
  2. cross validation
    1)cross validation的原理是将training data分为k份,用其中k-1份data作为train_set,剩下的1份data作为test_set,此为k-fold cross validation,常用的cross validation为10-fold cross validation(5,20 fold cross validation)。
    2)与留出法 一样,cross validation 中 也应保证 各 fold data 的 distribution 一致,避免evaluation出现偏差。
    3)与留出法 一样,corss validation中train_set和test_set的random 划分方式,也会使得evaluation出现随机性,为防止这种情况的发生,可以使用多次cross validation。如:使用10次10-fold cross validation。
    4)cross validation的一个特例是,leave-one-out,即将 1 个data 作为 test_set,其余的作为 train_set,这种方法使得最终训练好的model与用training data训练好的model几乎一模一样,增加了evaluation的准确度,但是,当training data数量很大时,leave-one-out所要进行的次数,消耗的计算量 往往是令人难以忍受的。
  3. 自助法(bootstrapping)
    1)bootstrapping适用于 training data较小的情况,他的核心思想是:有放回的随机抽样m次(m为training data的数据量)。
    2)根据公式 可知,m次随机抽样中,约有 1/3 的 data 没有被抽到,我们可以利用这些data测试model的泛化能力,这样的测试结果称为“包外估计(out-of-bag-estimate)”。
    3)bootstrapping有一个致命的缺陷,即:他会改变 training data 的 distribution,引入估计偏差,因此,这种方法引用较少。

实际中,我们常用“留出法” ,或者 “cross validation”来评估不同model的泛化能力。
当用如上评估方法,选定好我们想要使用的model type时,应利用所有training data对该model进行一次完全的训练。

在选好想要使用的model后,往往model自身会有几个参数需要调节,我们可以用grid的方法,来设定需要调节的参数。所谓grid,即假如我们要调节参数a,可以在[0 , 0.2]范围内以步长0.05,将所有point作为参数的候选值,从中选取可使model泛化能力最好的那个参数值,参数选取方法与model的选取方法一样,可以用“留出法”,也可以用“cross validation”。

除此以外,还有一点需要强调,即:
我们通常把学得的模型在实际中遇到的数据称为“测试数据”;
模型评估与选择中用于评估测试的数据称为“验证集”。
在实际中,我们常把training data划分为train_set 和 validation_set,用于训练 和 评估。而用实际的数据作为“测试数据”,测试model在实际中的泛化能力。

二、model性能的度量指标

性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判标准;这意味着模型的“好/坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,还取决于任务需求。
本小结介绍几种 衡量模型泛化能力 的 评价标准(性能度量):

  • 均方误差
  • 错误率 与 精度

  • 查准率 、查全率、FI
    对于二分类任务而言,查准率P,查全率R,定义如下:

    以查全率 和 查准率 为基础,我们可以用如下2种方法来判定 不同 机器学习model 性能的优劣:
    首先,绘制P-R曲线,其绘制方法如下:

    在P-R曲线中,model A完全包裹住了 model C 的曲线,说明A的学习性能要优于C。如果不同model之间的P-R曲线出现交叉,则要具体看两个model的曲线下面积,面积较大者,其学习性能更优。
    除可直观的通过P-R曲线查看不同model的学习性能外,我们还可通过以下2种方法查看model的学习性能:
    1)平衡点(Break event point BEP):它是 “查全率” = “查准率” 时的取值。如:在P-R图中可以看出,当P=R时,C的取值<0.65,而A的取值>0.65,说明A的学习性能要优于C。
    2)BEP方法过于简单,还有一种更为复杂的方法为FI度量:

    在实际任务中,我们往往对P和R的关注度不同,如:在推荐系统中,为了能够较少的打扰用户,我们希望推荐系统的精确度P较高,为了根据实际需求,实现对P和R的不同关注度,我们可以将FI度量,重定义为如下形式:

    当 beta > 1时,查全率R有更大影响;
    当 beta < 1时,查准率P有更大影响;
    当 beta = 1时,退化为FI的标准形式;
    上述定义的是“二分类”任务中 的 查全率R 和 查准率P 。
    在“多分类”任务中,我们可以用如下两种方法定义“查全率R”和“查准率P”:
    1)求所有二分类任务的P和R,然后求平均:

    2)求所有二分类任务的TP,TN,FP,FN,然后求各项平均,最后求P,R,FI:

  • ROC 与 AUC
    ROC曲线的纵坐标为“真正例率TPR”,ROC曲线的横坐标为“假正例率FPR”,二者计算公式如下:
    ROC曲线的绘制过程如下:

    以下为ROC曲线 以及 AUC示意图(ROC曲线下面积):

    我们可以通过ROC曲线查看不同 机器学习model 的学习性能,其查看方式 与 P-R曲线一致,即:若一个model的ROC曲线完全被另一个model的ROC曲线包裹,则后者的学习性能更优;
    除此以外,还可以通过AUC来判定model学习性能的好坏,AUC=0.5,表明model的学习性能接近random,AUC >> 0.5 或 AUC << 0.5 都表明 model具有很好的学习性能,一个具有positive学习性能,一个具有negative学习性能;
    AUC的计算公式如下(AUC计算的是各个小格的梯形面积):
  • 代价敏感错误率 与 代价曲线
    在很多分类任务中,不同的错分情况可能会造成不同的后果,如:在“患者诊断”中,把 患者诊断为健康人 较 把健康人诊断为患者 要付出更大的代价,为了在评估model学习性能时,将这种错分代价也考虑在内,我们可以定义一个 分类代价矩阵:,cost01表示将第0类错分为1类的代价,cost10表示将第1类错分为0类的代价。
    在计算分类任务的 平方误差 时,我们可以将 代价系数 cost01 和 cost10加入进去,从而对不同分类错误造成的代价予以 区别对待:

    类似的,也可以对“多分类任务”中的分类错误予以区分对待。
    在非均等代价下,ROC曲线不能直接反应model的学习性能,此时我们可以用“代价曲线(cost curve)”来描述model的学习性能,其绘制方法如下:
    言简意赅的说,就是将ROC上的每一点point(FPR,TPR),在“代价曲线”上计算一条线段{(0,FPR),(1,FNR)},ROC上所有point在“代价曲线”上计算得到的线段围成的曲线,即为代价曲线。其具体绘制过程 及 公式 如下图所示:

三、用统计检验的方法 比较 不同 model之间性能的差异

本小节主要讲解通过几种统计检验,判定不同model学习性能差异的方法:

  • T检验
  • McNemar检验(卡方分布)
  • Friedman检验 与 Nemenyi 后续检验
1、T检验

1)利用Test检验判定model的“测试错误率” 与 “泛化错误率” 是否 近似相等:
假设我们现有k个“测试错误率”:,给定泛化错误率为ekson_0_,为验证测试错误率 与 泛化错误率 是否等同,我们首先求出 测试错误率 均值 以及 方差:,然后,利用T检验公式:来判定 测试错误率 是否可以 等同于 泛化错误率。
以下为T分布示意图:

当我们所求的Tt 在 1-alpha 的置信度 内,其值在临界区间[t-alpha/2 , talpha/2]内,则说明 测试错误率 与 泛化错误率 没有明显差别,否则,测试错误率 与 泛化错误率 显著不同。
2)利用T检验 判定不同model的学习性能差异
T检验判定的具体过程如下:

T检验:,亦称student t检验(Student’s t test),主要用于样本含量较小(例如n < 30),总体标准差σ未知的正态分布。 T检验是用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。它与f检验、卡方检验并列。t检验是戈斯特为了观测酿酒质量而发明的,并于1908年在Biometrika上公布 。

2、McNemar检验(卡方分布)

3、Friedman检验 与 Nemenyi 后续检验

T检验 和 McNemar检验 都是针对一个数据 对 两个算法 之间的性能差异度 进行比较。
而Friedman检验 与 Nemenyi检验 是针对 多组数据 D1,D2,D3,… 对若干个算法A,B,C,… 的性能差异 进行比较。其核心思想为:首先,利用Friedman检验(卡方分布)检验 各个算法之间性能是否有显著差异,如果有,则进行 Nemenyi后续检验。如果在Nemenyi后续检验 中 依然有 算法性能差异显著 这个结论,则说明 这些算法之间 确实存在 性能差异。
下面具体介绍 “Friedman 检验 与 Nemenyi后续检验” 核心原理:
first:根据“留出法” 或 “cross validation”,判断各个算法在不同数据中 validation_set 中的学习性能,并根据 各算法学习性能 优劣 对各个算法进行排序:{1: 优,2:次优,…},假设算法A,B,C在数据集D1,D2,D3,D4 下的排序结果,具体如下图所示:

second:利用Friedman检验 来判定这些算法 是否性能相同。
假设ri 表示 第 i 个算法的 平均序值,且服从正态分布,其均值 和 方差分别为:,(k为算法个数)。则可知,标准化的ri的平方和 服从“卡方分布”,其计算公式为:,此即原始的Friedman检验公式。
上述原始Friedman公式过于简单,因此优化如下:,其中N为数据集的个数。根据TF的计算结果,对比相对应的"置信度,N,k",下的临界区间,如果TF 在临界区间内,则说明“各个算法性能无显著差异”,否则,说明“各个算法性能之间有显著差异”。若算法性能有显著差异,则用 Nemenyi后续检验 进行进一步的检验。
third:如果利用Friedman检验 结果显示 各算法性能之间有显著差异,则用Nemenyi后续检验 对 各个算法 进行进一步检验。
Nemenyi检验 可以计算出 算法 平均序值差值 的 临界区域,其计算公式如下:,其中q_alpha_ 可以通过查表获得,根据公式计算出 平均序值差值 的 临界区域后,比较算法A, B, C, 3者 平均序值的差值,如果差值>临界区域,则说明 两个算法之间 性能存在显著差异,在validation_set上误差较小的算法,性能更优。否则,说明 两个算法之间 性能没有显著差异。

卡方分布:若n个相互独立的随机变量ξ₁,ξ₂,…,ξn ,均服从标准正态分布(也称独立同分布于标准正态分布),则这n个服从标准正态分布的随机变量的平方和构成一新的随机变量,其分布规律称为卡方分布(chi-square distribution)。

上述“Friedman检验 与 Nemenyi后续检验” 结果可以直观的用 “Friedman检验图”显示,具体如下:

圆点:表示各个算法的平均序值;
线段:表示各个算法 平均序值 的临界区域;
当两个算法 的 临界区域 有交集时,说明 两算法性能没有显著差异;
当两个算法 的 临界区域 没有交集时,说明两算法性能存在显著差异;

四、解析 model 的bias and variance

本小节主要证明一个问题,即:model的泛化误差 = 方差 + 偏差 + noise。



对于一个model,当bias降低时,往往意味着variance增加,这是因为,bias评估的是model拟合train_data的能力,而vairance评估的是model泛化的能力,关于bias,variance的关系,如下图所示:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Python实验六综合性数据预处理主要涉及到数据清洗、数据规范化和数据编码三Python实验六的综合性数据预处理主要包括数据清洗和特征处理两个部分。其中个方面。其中数据清洗是指对脏数据进行对应方式的处理,得到标准的、干净的数据清洗包括对脏数据进行对应方式的处理,得到标准的、干净的、连续的数据、连续的数据,提供给数据统计、数据挖掘等使用;数据规范化是指通过对数据按,提供给数据统计、数据挖掘等使用;特征处理则包括缩放、归一化、哑编照一定比例进行缩放,使之落在一个特定的区域,便于进行综合分析;数据码等方法,以将数据变得更加符合算法模型的要求。具体方法包括: 1.编码是指将数据中的描述性变量(如性别)转换为数值型数据,方便算法 数据清洗:对数据的准确性、完整性、一致性、时效性、可信性和解释使用。 具体的实现方法可以参考引用中的三个部分,引用[1]介绍了数据性进行检查和处理,包括缺失值、噪音和异常点的处理。 2. 缩放和归一化清洗方法,引用[2]介绍了数据规范化的最大-最小规范化方法以及Python:将数据按照一定比例进行缩放,使之落在一个特定的区域,便于进行综合中的实现代码,引用[3]介绍了数据编码的方法,包括描述变量的寻找和分析。常用的方法有最大-最小规范化、标准化等。 3. 哑编码:将转换,以及有序变量和无序变量的处理方法。 在实际应用中,综合性数据描述性变量(如性别)转换为数值型数据,以满足机器学习算法对数据的预处理是数据分析和挖掘的重要步骤,它直接影响到后续分析和模型建要求。常用的方法有LabelEncoder和OneHotEncoder。 综合性数据预处理是机器学习和数据挖立的效果。因此,需要根据实际情况选择合适的预处理方法,保证数据的质量掘中非常重要的一步,它能够有效地提高模型的预测和泛化能力,和可靠性。 --相关问题--: 助于从原始数据中挖掘出更多有价值的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sarah ฅʕ•̫͡•ʔฅ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值