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

转自: https://samanthachen.github.io/2016/08/03/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0_%E5%91%A8%E5%BF%97%E5%8D%8E_%E7%AC%94%E8%AE%B02/

经验误差与过拟合

错误率: 分类错误样本数占样本总数
精度: 1 - 错误率

误差:学习器事假预测输出样本与样本真实输出之间的差异

在训练集上的误差————“训练误差”(“经验误差”)
在新样本上的误差————“泛化误差”

我们希望泛化误差小,但是实际无法预知新样本只能采用“经验误差”最小化。

过拟合:把训练样本自身的一些特点当成所有潜在样本的“普遍规律”,导致泛化性能下降。
欠拟合:对训练样本的一般性质尚未学好。

模型选择问题:理想方案是对候选模型的泛化误差进行评估,选择最小的。但是无法直接获得泛化误差,而训练误差又容易导致过拟合。如何进行模型评估与选择?看下一节。

评估方法

以测试集来测试学习器对新样本的判别能力,以测试误差作为泛化误差的近似。通常假设测试样本也是从样本真实分布的独立同分布采样获得。
需要注意测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过。
于是需要对数据D进行划分出训练集S和测试集T。

留出法

直接将数据集D划分为两个互斥的集合S和T。在S训练出模型,用T评估测试误差。
需要注意,训练/测试集应该尽可能保持数据的一致性,避免由于数据划分过程引入产生额外的偏差而对最终结果产生影响。

单次留出法往往结果不够准确,一般采用若干次随机划分、重复实验评估取平局值。但是S与T的取值一般是2/3~4/5用于S,剩余用于测试.

交叉验证

将D划分为k个大小相似的互斥子集(分层采样)。每次取k-1个子集做训练集,剩下1个做测试集,进行k次训练和测试,最终返回均值,也称作“k折交叉验证”。交叉验证的稳定和保真性取决于k,k一般取值为10,其他的有5,20等。

将数据进行划分通常要随机使用不同的划分p次,取p次k折交叉验证均值,如“10次10折交叉验证”。

若D包含m个样本,k=m称作“留一法”,该方法不收样本划分方式的影响。往往认为比较准确,但是数据集交大时候开销过大。另外NFL表明未必比其他评估算法准确。

自助法(bootstrapping)

减少样本S和T规模不同造成的影响。

具体步骤如下:

给定包含m个样本的数据集D,我们对他进行采样产生数据集D’:每次随机从D中挑选一个样本个样本,将其拷贝放到D’中,然后再将该样本重新放回初始数据集D,使得该样本在下次采样时候仍有可能被采到;这个过程重复m次以后就得到包含m个样本的D’。显然D中有一部分样本会在D‘中重复出现多次,而一些则不会出现,不会出现的概率是:

limm(11m)1e0.368limm→∞(1−1m)→1e≈0.368

即原始数据集中有36.8%不会出现在D’中。

于是我们可以用D’做训练集,D/D’做测试集,这样实际评估的模型与期望评估的模型都是用m个样本。而仍有1/3没在训练集中的样本用于测试。这样的测试结果称作“包外估计”。

优缺点

优点:

  • 数据集较小,难以划分训练、测试集时很有用
  • 能从原始数据集产生多个不同训练集,对集成学习等有很大好处
    缺点:
  • 改变了原始数据集分布,会引入估计误差。
    因此,在初始数据量足够时,留出法和交叉验证使用更多。

调参与最终模型

由于大多数算法有参数设置,需要根据范围和步长进行实验,对模型进行评估。
模型评估中选做评估测试的数据集称为“验证集”。
例如,在研究对比不同算法的泛化性能时候,我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集和测试集,基于验证集上的性能来进行模型选择和调参。(这样训练数据不会变少了?)

性能度量

回归任务中常用的度量是均分误差。
下面介绍分类任务中常用的性能度量。

错误率与精度

查准率、查全率与F1

对于二分类问题,可以根据真实类别与预测列别组合成下表:

真实情况预测结果

正例反例
正例TP(真正例)FN(假反例)
反例FP(假正例)TN(真反例)

查全率P(Precision)查准率R(Recall)如下:
P=TPTP+FPP=TPTP+FP (预测为正例的结果中真正例的比例)(包含反例预测为正例)
R=TPTP+FNR=TPTP+FN (所有正例中真正例的比例)(包含正例预测为反例)

查准率和查全率是一对矛盾的度量。

例如,希望尽可能多的好瓜被选出来,就加大选瓜数量,将所有西瓜都选上,这样好瓜数量也能增大,但是查准率就比较低;希望选出来瓜好瓜比率尽可能高,可以只挑选有把握的瓜,这样查全率就比较低。

我们可以根据学习器的预测结果对样例进行排序,排在前面的额事学习器认为“最可能是”正例的样本,排在后面的是“最不可能”是正例的样本。按此顺序逐个把样本进行预测,每次可以计算出当前的查全率、查准率。以Precision为纵轴,Recall为横轴可以画出“PR曲线”。

通常一个学习器PR曲线被另一个包围,认为后者优于前者。
但交叉的时候就难以断言。合理判断是根据PR下面积,但是面积难以判断
因此设计综合考虑度量:

平衡点(Break-Even Point, BEP)

查准率=查全率时的取值。

F1度量

$$F1 = \frac{2PR}{P+R} = \frac{2*TP}{样例总数+TP-TN}$$

更一般的Fβ

$$F_{\beta} = \frac{(1+\beta^2)PR}{\beta^2 * P+R}$$

多次训练、测试产生多个混淆矩阵时

  1. 宏查全率、宏查准率、宏F1
    分别计算Precision和 Recall,然后求平均再计算F1

  2. 宏查全率、宏查准率、宏F1
    平均对应TP,FP…加起来平均,再计算F1

ROC与AUC

很多学习器是为测试样本产生一个实值或者概率预测,然后将预测值与分类阈值进行比较,若大于阈值判定为正,否则为反。这个实值决定了学习器泛化能力。
注意ROC与PR的不同
ROC纵轴是真正例率,横轴是假正例率。
TPR=TPTP+FNTPR=TPTP+FN (实际正例的结果中真正例的比例)
FPR=FPTN+FPFPR=FPTN+FP (实际反例中假正例的比例)

真实情况预测结果

正例反例
正例TP(真正例)FN(假反例)
反例FP(假正例)TN(真反例)

真正例率是所有真实正例中真正例的比例;
假正例率是所有真实反例中假正例的比例;
查准率是所有预测正例中真正例的比例;
查全率是所有真实正例中真正例的比例;
所以查全率与真正例率相等 , R=TPR

通常一个学习器ROC曲线被另一个包围,认为后者优于前者。
但交叉的时候就难以断言。合理判断是根据ROC下面积–AUC。
形式化的看AUC考虑的是样本预测的排序质量,与排序误差有紧密联系。

排序损失 lranklrank

AUC=1lrankAUC=1−lrank

PR与ROC

ROC与PR区别,分析来源
在ROC空间,ROC曲线越凸向左上方向效果越好。与ROC曲线左上凸不同的是,PR曲线是右上凸效果越好。

ROC和PR曲线都被用于评估机器学习算法对一个给定数据集的分类性能,每个数据集都包含固定数目的正样本和负样本。而ROC曲线和PR曲线之间有着很深的关系。

定理1:对于一个给定的包含正负样本的数据集,ROC空间和PR空间存在一一对应的关系,也就是说,如果recall不等于0,二者包含完全一致的混淆矩阵。我们可以将ROC曲线转化为PR曲线,反之亦然。定理2:对于一个给定数目的正负样本数据集,一条曲线在ROC空间中比另一条曲线有优势,当且仅当第一条曲线在PR空间中也比第二条曲线有优势。(这里的“一条曲线比其他曲线有优势”是指其他曲线的所有部分与这条曲线重合或在这条曲线之下。)

证明过程见文章《The Relationship Between Precision-Recall and ROC Curves》

当正负样本差距不大的情况下,ROC和PR的趋势是差不多的,但是当负样本很多的时候,两者就截然不同了,ROC效果依然看似很好,但是PR上反映效果一般。解释起来也简单,假设就1个正例,100个负例,那么基本上TPR可能一直维持在100左右,然后突然降到0.如图,(a)(b)分别为正负样本1:1时的ROC曲线和PR曲线,二者比较接近。而(c)(d)的正负样本比例为1:1,这时ROC曲线效果依然很好,但是PR曲线则表现的比较差。这就说明PR曲线在正负样本比例悬殊较大时更能反映分类的性能。

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

根据任务的领域知识设定代价矩阵。(可以认为前面的度量默认各项代价均等)
对应的ROC曲线叫代价曲线。

比较检验

性能比较影响因素:1、泛化性能VS测试集性能 2、测试集选择 3、算法随机性。
采用统计假设检验推断学习器A泛化性能是否在统计意义上优于B,并且把握多大。

假设检验

下面的是针对单个学习器泛化性能的假设进行检验。

二项检验

一个测试错误率推测泛化错误率分布。

t检验

多个测试错误率。

针对多个学习器采用下文:

交叉验证t检验

McNemar检验

Fridman检验与Nemenyi检验

偏差与方差

“偏差方差分解”是解释学习算法泛化性能的重要工具,可以对期望泛化误差率进行拆解。
泛化误差可以分解为偏差、方差和噪声之和。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单列集合Set的实现类TreeSet

Set接口 [Collection】的子类 TreeSet a.特点【无序,不可重复,查询快,可自动排序】,但需要指定排序规则,API中有一些类已经实现了Comparable接口],给出了默认排序规则,如:Integer:数值大小[升序] String:…

关于Java你不知道的10件事

转载自 关于Java你不知道的10件事 作为 Java 书呆子,比起实用技能,我们会对介绍 Java 和 JVM 的概念细节更感兴趣。因此我想推荐 Lukas Eder 在 jooq.org 发表的原创作品给大家。 你是从很早开始就一直使用 Java 吗?那你还记得它的过去吗&…

模型评估与选择 ( Bias(偏差),Error(误差),和Variance(方差) )

转自: https://github.com/familyld/Machine_Learning/blob/master/02model_evaluation_and_model_selection.md 机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系? 参见 https://www.zhihu.com/question…

单列集合Set的实现类HashSet

Set接口 [Collection】的子类 HashSet 特点【无序&#xff0c;不可重复,不能排序】 默认比较地址值【地址相同的值相同】&#xff0c;重写后可比较内容【内容相同的值相同】 1.比较地址值【默认】 public class Demo1 {public static void main(String[] args) {HashSet<…

双列集合Map的实现类

Map接口【和Collection接口并列】 Map接口 成员方法【实现于Map接口&#xff0c;TreeMap也可实现&#xff0c;这里以HashMap为例】 //HashMap实现类 :无序[HashSet底存原理] 哈希表 public class Demo1 {public static void main(String[] args) {HashMap<String, Intege…

机器学习指标大汇总

转自&#xff1a; http://www.36dsj.com/archives/42271 作者&#xff1a;无影随想 在使用机器学习算法的过程中&#xff0c;针对不同场景需要不同的评价指标&#xff0c;在这里对常用的指标进行一个简单的汇总。 一、分类 1. 精确率与召回率 精确率与召回率多用于二分类问题。…

到底什么是分布式系统

转载自 到底什么是分布式系统分布式系统背景 说分布式系统必须要说集中式系统&#xff0c;集中式系统中整个项目就是一个独立的应用&#xff0c;整个应用也就是整个项目&#xff0c;所有的东西都在一个应用里面。 如下图所示如一个网站就是一个应用&#xff0c;最后是多个增加多…

Map集合相关应用

1.键盘录入一个字符串&#xff0c;求该字符串中每一个字符出现的次数。 要求&#xff1a;按照字母顺序打印 如: 录入的字符串为"apple"&#xff0c;打印 a(1) e(1) l(1) p(2) public class Demo4 {public static void main(String[] args) {//键盘录入Scanner sc n…

机器学习算法常用指标总结

转自&#xff1a; http://www.cnblogs.com/maybe2030/p/5375175.html#_label2 阅读目录 1. TPR、FPR&TNR 2. 精确率Precision、召回率Recall和F1值 3. 综合评价指标F-measure 4. ROC曲线和AUC 5. 参考内容 考虑一个二分问题&#xff0c;即将实例分成正类&#xff08;positi…

SLA服务可用性4个9是什么意思?怎么达到?

转载自 SLA服务可用性4个9是什么意思&#xff1f;怎么达到&#xff1f;SLA&#xff1a;服务等级协议&#xff08;简称&#xff1a;SLA&#xff0c;全称&#xff1a;service level agreement&#xff09;。是在一定开销下为保障服务的性能和可用性&#xff0c;服务提供商与用户间…

ROC和AUC介绍以及如何计算AUC

转自&#xff1a; http://alexkong.net/2013/06/introduction-to-auc-and-roc/ ROC&#xff08;Receiver Operating Characteristic&#xff09;曲线和AUC常被用来评价一个二值分类器&#xff08;binary classifier&#xff09;的优劣&#xff0c;对两者的简单介绍见这里。这篇…

为什么Netty这么火?与Mina相比有什么优势?

转载自 为什么Netty这么火&#xff1f;与Mina相比有什么优势&#xff1f;Netty是什么&#xff1f;为什么这么火&#xff1f; Netty是目前最流行的由JBOSS提供的一个Java开源框架NIO框架&#xff0c;Netty提供异步的、事件驱动的网络应用程序框架和工具&#xff0c;用以快速开发…

一张图告诉你为什么是服务网关

转载自 一张图告诉你为什么是服务网关&#xff0c;文末有现金抽奖。网关服务是单一访问点&#xff0c;并充当多项服务的代理。服务网关启用了跨所有服务的路由转发、过滤和公共处理等。在微服务实践中远不止这点功能&#xff0c;它可以做到统一接入、流量管控、安全防护、业务隔…

offer复习日志

&#xff08;1&#xff09;复习mysql&#xff0c;只需要 2.5 个小时&#xff1b;

File类对文件的操作应用

1.在不存在的文件夹下创建文件 //在当前模块下aaa文件下ddd下eee中创建一个e.txt文件 public class Demo2 {public static void main(String[] args) throws IOException {File file new File("day11_myFile\\aaa\\ddd\\eee");//createNewFile()建立文件需要文件夹…

一张图告诉你什么是系统架构师

转载自 一张图告诉你什么是系统架构师这张图从架构师的综合能力、岗位认识、岗位职责等方面&#xff0c;清楚的画出了作为一个架构的基本准则。人人都想成为架构师&#xff0c;可作为架构你达到了上面的要求了吗&#xff1f; 系统架构师是个神奇的岗位。为什么这么说&#xff0…

机器学习和统计里面的auc怎么理解?

转自&#xff1a; https://www.zhihu.com/question/39840928 作者&#xff1a;小小丘 &#xff08;该作者对 auc的意义 讲得非常棒, 感谢付出&#xff09; 链接&#xff1a;https://www.zhihu.com/question/39840928/answer/84906286 来源&#xff1a;知乎 著作权归作者所有。…

IO流总述

IO流分类 1)按照流向分类&#xff1a; 输入流&#xff1a;读取数据用的 输出流&#xff1a;写数据用的 2)按照读写的数据分类(体系结构) <1>字节流[读写任何类型的文件(任何文件底层都是字节数据)] 字节输入流&#xff1a;IntputStream(抽象类) –FileInuptStream: 读取…

分布式ID生成器的解决方案总结

转载自 分布式ID生成器的解决方案总结在互联网的业务系统中&#xff0c;涉及到各种各样的ID&#xff0c;如在支付系统中就会有支付ID、退款ID等。那一般生成ID都有哪些解决方案呢&#xff1f;特别是在复杂的分布式系统业务场景中&#xff0c;我们应该采用哪种适合自己的解决方案…

IO流相关应用

1.1.字节流复制文件 //运用字节输入输出流将a.txt文件复制到b.txt中 public class Demo1 {public static void main(String[] args) throws IOException {//创建输入流对象FileInputStream fis new FileInputStream("day11_myIO\\a.txt");//可以使用BufferedInputS…