首页 > 其他分享 >机械学习—零基础学习日志009(评估方法1留出法)

机械学习—零基础学习日志009(评估方法1留出法)

时间:2024-07-12 23:29:54浏览次数:12  
标签:采样 训练 样本 机械学习 留出 测试 009 日志 评估

评估方法

我们通过实验测试来对学习器的泛化误差进行评估并进而做出选择。

因此,需要“测试集”来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”(testing error)作为泛化误差的近似。通常假设测试样本也是从样本真实分布中独立同分布采样而得,但需注意的是,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过。

周老师举了很生动的例子:老师出了10道习题供同学们练习,考试时老师又用同样的这10道题作为试题,这个考试成绩能否有效反映出同学们学得好不好呢?

如果,只有一个包含m个样例的数据集\left \{ \right.(x_{1},y_{1}),(x_{2},y_{2}),...(x_{m},y_{m})\left. \right \},既要训练,又要测试,怎样才能做到呢?

答案是:通过对D进行适当的处理,从中产生出训练集S和测试集T。先介绍留出法。

留出法

“留出法”(hold-out)直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即D= S \cup TS \cap T = \oslash。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。

以二分类任务为例,假定D包含1000个样本,将其划分为S包含 700 个样本,T包含 300 个样本,用S进行训练后,如果模型在T上有 90 个在样本分类错误,那么其错误率为

( 90 / 300 ) x 100% = 30%,相应的,精度为 1 - 30% = 70% 。

分层采样

训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似,如果从采样的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”。

例如通过对D进行分层采样而获得含 70% 样本的训练集S和含 30% 样本的测试集T,若D包含 500 个正例、500个反例,则分层采样得到的S应包含 350 个正例、350 个反例,而T则包含 150 个正例和 150 个反例;若S、T 中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差。

随机划分取平均值

即便在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集 D进行分割,并产生不一样的结果,例如,D样本中的前350个正例,与后350个正例……这些不同的划分将导致不同的训练/测试集,相应的,模型评估的结果也会有差别。

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

窘境

若训练集S包含绝大多数样本,则训练出的模型可能更接近于用 D 训练出的模型,但由于T比较小,评估结果可能不够稳定准确;

若令测试集T多包含一些样本,则训练集S与D差别更大了,被评估的模型与用 D 训练出的模型相比可能有较大差别,从而降低了评估结果的保真性,这个问题没有完美的解决方案。

常见做法是将大约 2/3~4/5 的样本用于训练,剩余样本用于测试。

书籍参考:《机械学习》 周志华 清华大学出版社 2016年版

视频参考:周志华老师亲讲-西瓜书全网最详尽讲解-1080p高清原版《机器学习初步》 B站

标签:采样,训练,样本,机械学习,留出,测试,009,日志,评估
From: https://blog.csdn.net/AI_freshfish/article/details/140279063

相关文章

  • Springboot按天生成日志文件
    原文链接:https://blog.csdn.net/weixin_47798667/article/details/131846942 1:首先再yml文件上加上配置 logging: config:classpath:logback-spring.xml2:新建一个logback-spring.xml文件 文件内容是如下 <?xmlversion="1.0"encoding="UTF-8"?>......
  • rsyslog配置(服务端、客户端)-UDP-TCP转发-imfile自定义应用程序的日志推送
    ##概念#Syslog服务器可以用作一个网络中的日志监控中心,所有能够通过网络来发送日志的设施(包含了Linux或Windows服务器,路由器,交换机以及其他主机)都可以把日志发送给它。通过设置一个syslog服务器,可以将不同设施/主机发送的日志,过滤和合并到一个独立的位置,这样使得你更容易地查......
  • Docker 修改容器日志默认存储路径
    默认安装完成 docker 后,所有images及相关信息存储位置为:/var/lib/docker,比如每个容器的日志默认都会以 json-file 的格式存储于 /var/lib/docker/containers/<容器id>/<容器id>-json.log 里面。一般情况,/var目录是在根分区之下,而根分区之下的磁盘空间一般不会较大,所以在......
  • 使用Spring AOP做一个日志切面类
    日志切面类用于记录Controller层的方法执行前和执行后的日志信息。定义一个切面类,并在该类中声明增强方法(如@Before、@After、@Around等注解的方法),然后在这些增强方法中通过JoinPoint参数获取当前连接点的信息,如方法名、参数、目标对象等。最后,在配置文件中声明切面和切点,将增强方......
  • MySQL日志详解
    一、前言日志文件中记录着MySQL数据库运行期间发生的变化;包括MySQL数据库的客户端连接状况、SQL语句的执行情况和错误信息等,是MySQL数据库的重要组成部分。MySQL日志分类:错误日志查询日志慢查询日志事务日志(Redolog)二进制日志中继日志二、错误日志默认情况下,错误......
  • 机械学习—零基础学习日志012(自然对数e)
    学习《机械学习》时,发现基础薄弱的自己,对自然对数e不甚了解,所以,做了一些资料搜索与汇总。自然对数e的由来最开始起源于复利。如果你现在有100元,存在银行,一年以后,返回给你200元,也就是利润翻了一倍。可以记为:如果银行现在的政策是,随时存,随时取,而且利息为,存放时间除以一年。以......
  • 【python零基础入门到就业】009、Python中的数据类型(超详细)
    文章目录前言1.基本数据类型1.1整数(int)1.2浮点数(float)1.3字符串(str)1.4布尔值(bool)1.5基本数据类型示意图2.复合数据类型2.1列表(list)2.2元组(tuple)2.3字典(dict)2.4集合(set)2.5复合数据类型示意图3.type()语句的使用方法3.1基本用法3.2动态类型检查3.3与`isi......
  • 智能小程序 Ray 开发门锁 API ——日志 API 接口汇总
    查询最近一条日志记录getLatestLog引入@ray-js/ray^1.5.0以上版本可使用import{getLatestLog}from'@ray-js/ray'参数LatestLogParams属性类型必填说明devIdstring是设备ID返回LatestLogResponse结构包含日志记录的各种详细信息。函数定义示例/***查询......
  • Backend - C# 的日志Lognet4
    目录一、安装log4net插件(一)作用(二)操作(三)注意二、配置(一)配置AssemblyInfo.cs (二)配置log4net.config1.创建log4net.config文件(和program.cs同层级)2.设置文件属性3.其中,文件内容:三、使用(一)封装一个类,方便管理(二)调用(三)等级Level四、其他:简单日志(一)定义日志......
  • 虚幻中打印日志的两种方式
    虚幻中打印日志的两种方式开发环境UE5.2.1VisualStudio201916.11.19UE_LOGUE_LOG宏是UnrealEngine中用于日志记录的标准方式,它可以输出日志信息到控制台和日志文件,支持多种日志级别(如'Log','Warning','Error')UE_LOG(LogCategory,LogVerbosity,Format,...)例:UE_LOG(......