机器学习任务功略

news2024/11/18 13:41:44

目录

  • 机器学习的结构
  • 机器学习攻略
    • 训练集loss较大
      • model bias问题
      • optimization问题
        • gradient descent的问题
        • 解决
      • 如何区分训练集loss大是model bias还是优化器的问题
    • 测试集loss较大
      • overfitting过拟合
        • 为什么会有overfitting
        • 解决过拟合的方法
      • 训练集与测试集的不匹配
    • 如何选择一个合适的model
      • validation set验证集
        • 为什么需要验证集
        • 怎么划分验证集

第二节 2021 - 机器学习任务攻略

机器学习的结构

在这里插入图片描述

根据给定的训练集(特征值和标签)去训练网络模型,选择其中最优的(loss最低的)去根据测试集的特征值预测出对应的标签。

机器学习攻略

在这里插入图片描述

训练集loss较大

model bias问题

在这里插入图片描述

model bias问题指的是所创建的模型(函数集)太小,这个函数集中并不存在能最好地表示训练集特征和标签对应关系的函数——类似于猴子捞月,但月并不在湖里

一般而言,一次函数的约束>二次函数的约束>三次函数的约束>……,复杂的模型可以表示简单的模型。

  • 解决方法是重新设计模型,让模型更为灵活
    1. 增加输入的特征向量的维度
    2. 增加更多的隐含层,神经元

optimization问题

gradient descent的问题

Gradient Descent的问题是局部最优的问题,例如下图:

在这里插入图片描述

解决

见下篇博客

如何区分训练集loss大是model bias还是优化器的问题

方法:比较不同的模型。

在这里插入图片描述

当遇到训练集的loss较大时,记录当前的训练集loss变化曲线。重新定义新的model,使其更加灵活,再进行训练,记录这个model的训练集loss变化曲线。
将两个曲线进行比较,若 (1)后者的loss比前者的loss稳定后更小,则是model bias的问题。

(2)后者的loss比前者的loss稳定后更大,则是optimization的问题。因为model更加灵活,按照原理应该距离最优解更为接近。

测试集loss较大

overfitting过拟合

这里的过拟合是指模型在训练集上的loss较小,但在**测试集上的loss较大——**训练集过拟合

为什么会有overfitting

在这里插入图片描述

如左图所示,在训练集未给定的区域需要由模型来自动插值(freestyle)生成,若模型太过灵活(复杂),就会产生左图中的freestyle图像,但是在给定黄色测试集下,它的loss较大。

解决过拟合的方法

📌解决过拟合的方法主要是两个大方向——增加数据+降低模型的复杂度(增加适量的约束)
比如用CNN网络代替全连接网络。
(全连接网络的约束少于CNN网络的约束,即全连接网络可以表示CNN网络)

在这里插入图片描述

  • 用更多的训练数据——减少模型的freestyle
    一般是通过观察数据的合理性,采用旋转、对称、截取等方法在原有数据集的基础上创造出更多的数据集
  • 减少特征向量的维度
  • 减少隐含层的层数
  • Early Stopping 更早地结束训练,结束在测试集loss增大之前
  • 使用正则化
    l o s s n e w = l o s s o l d + λ ∑ i w i 2 loss_{new}=loss_{old}+\lambda \sum_i w_i^2 lossnew=lossold+λiwi2
  • 使用dropout

训练集与测试集的不匹配

造成训练集loss较小而测试集loss较大还有一个原因——训练集和测试集的分布不一致,比如下图中的训练集和测试集的图片很明显的不一致。

在这里插入图片描述

如何选择一个合适的model

validation set验证集

验证集是从原训练集中划分出来的,主要是为了解决测试集过拟合的问题。

为什么需要验证集

一般而言,测试集有公开测试集和隐藏测试集。公开的测试集一般是可以供给我们开发用来测试的,而隐藏测试集则用于最后的模型评分。
所以如果我们选中一个模型,它在公开测试集上的效果好并不意味着它在隐藏测试集上的效果也好。此时公开测试集即为普通训练集,隐藏测试集即为普通测试集。因为公开测试集是可见的,在一个模型的生成过程中会采用公开测试集上的loss值来衡量最终模型的好坏从而调整超参数,选出更好的模型,因此可能会有在公开测试集上过度匹配造成过拟合的情况。

在这里插入图片描述

模型的训练仍是通过训练集,在训练过程中会进行模型自有参数的不断优化,当一个模型训练好后会利用验证集来进行超参数的调整,最后用测试集来评估验证集上表现最好的模型。

在这里插入图片描述

(1)训练集在建模过程中会被大量经常使用,验证集用于对模型少量偶尔的调整,而测试集只作为最终模型的评价出现,因此训练集,验证集和测试集所需的数据量也是不一致的,在数据量不是特别大的情况下一般遵循6:2:2的划分比例。
(2)为了使模型“训练”效果能合理泛化至“测试”效果,从而推广应用至现实世界中,因此一般要求训练集,验证集和测试集数据分布近似。但需要注意,三个数据集所用数据是不同的。
(3)由于不同数据集定位不同,因此模型在训练集、验证集和测试集上所反映的预测效果可能存在差异

在这里插入图片描述

https://zhuanlan.zhihu.com/p/377789735

怎么划分验证集

一般数据集较小时,采用训练集:验证集:测试集=6:2:2的比例。

  • 更好的划分方法是采用N折交叉验证N-fold Cross Validation
    具体方法如下:

在这里插入图片描述

(1) 将数据集分为训练集和测试集,测试集放在一边。
(2) 将训练集分为 k 份,每次使用 k 份中的1 份作为验证集,其他全部作为训练集。
(3) 通过 k 次训练后,得到了 k 个不同的模型。
(4) 评估 k 个模型的效果,从中挑选效果最好的超参数。
(5) 使用最优的超参数,然后将 k 份数据全部作为训练集重新训练模型,**得到最终所需模型,最后再到测试集上测试。

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

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

相关文章

Linux内核基础篇——常用调试技巧汇总

文章目录printk动态输出BUG()和BUG_ON()dump_stack()devmemprintk printk共有8个等级,从0-7,等级依次降低。 打印等级可以通过修改/proc/sys/kernel/printk来改变。 查看printk等级: cat /proc/sys/kernel/printk 7 4 1 7打开内核所有打印…

2022圣诞树(C语言摇钱树版本)

逐梦编程,让中华屹立世界之巅。 简单的事情重复做,重复的事情用心做,用心的事情坚持做; 文章目录前言一、个人感悟二、圣诞树由来三、圣诞树发展历史演变四、常见的圣诞树种类五、摇钱圣诞树效果展示六、实现思路七、编码实现总结新壁纸前言 时光飞逝&a…

前端工程师必须掌握—《Webpack教程》

Webpack 学习视频地址 文章目录Webpack1.webpack基础1.1.初始化隔行变色的案例1.2.安装和配置webpack1.2.1.安装webpack1.2.2.配置webpack1.2.3.了解mode可选值的应用场景1.2.4.自定义打包的入口和出口2.插件2.1.安装和配置webpack-dev-server2.1.1.安装webpack-dev-server2.1…

SpringCache+Redis的整合(微服务)

缓存作用: 举个例子:在我们程序中,很多配置数据(例如一个商品信息、一个白名单、一个第三方客户的回调接口),这些数据存在我们的DB上,数据量比较少,但是程序访问很频繁,…

Prometheus(十一)Grafana告警

主要概念和特点 关键概念或特征含义Data sources for Alerting 告警的数据源配置从哪里查询到告警信息数据Provisioning for Alerting 告警的配置使用文件等方式配置警报资源,已经管理警报资源Scheduler 调度器评估告警规则,将其视为定期对数据源运行查…

ubuntu虚拟机修改静态ip

我的是:ubuntu 20.04,所以 第一步 sudo vi /etc/netplan/01-network-manager-all.yaml第二步 gateway4已经弃用了,换成下面的: network:version: 2renderer: NetworkManagerethernets:ens33:addresses: [192.168.125.132/24]r…

内核比较: 2.6 内核中改进了内存管理

随着 Linux 内核的发展和成熟,更多的用户期待着 Linux 可以运行非常大的系统来处理科学分析应用程序或者海量数据库。这些企业级的应用程序通常需要大量的内存才能好好运行。2.4 Linux 内核有识别相当大数量的内存的功能,但是 2.5 内核发生了很多改变&am…

docker高级篇第三章-dockerfile案例之制作自己的centos镜像

在上一篇文章中《Dockerfile介绍及常用保留指令》,我们介绍了Dockerfile是什么以及Dockerfile常用的保留字段。熟悉了这些之后,有没有想自己动手写一个Dockerfile呢?本文咱们就实战自己Dockerfile。 案例需求: 我们以远程仓库的centos为模板,制作出代用vim\ifconfig\jav…

Qt实现表格树控件-自绘树节点虚线

一、开心一刻 一程序员第一次上女朋友家她妈板着脸问 :你想娶我女儿,有多少存款? 程序员低了下头:五百! 她妈更鄙视了:才五百块,买个厕所都不够! 程序员忙说:不是人民币&…

Android混淆技术综述

1. 引入 大量的恶意软件都使用了混淆技术来逃检测。查了下Android混淆技术,看了如下两篇资料: Understanding Android Obfuscation Techniques: A Large-Scale Investigation in the Wildhttps://github.com/ClaudiuGeorgiu/Obfuscapk 对Android的混淆…

logging日志管理

1.日志作用 不管是在项目开发还是测试过程中,项目运行一旦出现问题日志信息就非常重要了。日志是定位问题的重要手段,就像侦探人员要根据现场留下的线索来推断案情。 2.日志级别 脚本运行会有很多的情况,比如调试信息、报错异常信息等。日…

渣土车空车未盖盖识别系统 OpenCv

渣土车空车未盖盖识别系统通过OpenCvyolo网络模型实时检测路过的渣土车情况,发现空车未盖盖立即进行抓拍回传。OpenCV基于C实现,同时提供python, Ruby, Matlab等语言的接口。OpenCV-Python是OpenCV的Python API,结合了OpenCV CAPI和Python语言…

Android开发中的线程池使用

一、前言 既然Android中已经有了线程的概念,那么为什么需要使用线程池呢?我们从两个方面给出使用线程池的原因。 首先线程的新建和销毁都是存在性能上的消耗的,如果一个时间段有大量的网络请求,那么就需要多个线程的创建与销毁&am…

NSGA and NSGA-II

目录1 NSGA1.1 传统多目标优化方法1.2 多目标转为单目标的缺点1.3 权重向量距离说明1.4 NSGA方法1.4.1 流程1.4.2 关键步骤1.5 注意2 NSGA-II2.1 NSGA的缺点2.2 NSGA-II在NSGA上的变动2.3 NSGA-II流程1 NSGA 1.1 传统多目标优化方法 使用权重向量,将多目标问题转化…

Java入门练习题及其答案第一弹

Java入门练习题及其答案第一弹 文章目录Java入门练习题及其答案第一弹素数打印乘法口诀表最大公约数水仙花数二进制中1的个数二进制奇偶数位素数打印 只能被1和自己整除 import java.util.Scanner;public static void main(String[] args) {Scanner scanner new Scanner(Sys…

UI自动化测试-第一个测试脚本

前提 我们在进行UI自动化测试时,一般采用javaselenium或者pythonselenium的方式。由于python比较简单,上手快,因此建议大家采用pythonselenium的方式来进行UI自动化。 1、安装pycharm PyCharm是一种Python IDE(Integrated Deve…

【OpenCV-Python】教程:7-5 理解SVM

OpenCV Python SVM 学习 【目标】 直观理解 SVM 【理论】 线性可分 下图有两种类型的数据,红色和蓝色。在kNN中,对于一个测试数据,我们用来测量它与所有训练样本的距离,并取距离最小的一个。测量所有的距离需要大量的时间&am…

计算距离春节还有多长时间

你知道距离春节,还剩下多少时间吗? 或许你已经在默默心算了。 可是,如果我想要精确一点的结果,比如精确到多少分钟、多少秒呢? 要怎么计算呢? 这里可以使用Python进行计算。 首先,需要导入…

Opencv项目实战:18 人体姿态检测

目录 0、项目介绍 1、效果展示 2、项目搭建 3、项目代码讲解与介绍 Basics.py PoseModule.py Example.py 人体姿态图​编辑 4、项目资源 5、项目总结 0、项目介绍 mediapipe中有人体姿态检测的功能,今天我们就将实现最最基础的人体姿态估计项目,它…

【C++】深拷贝和浅拷贝

目录 浅拷贝 深拷贝 字符串的构造 例有两个类的深拷贝: 浅拷贝 在类中,若我们不写拷贝构造函数,则程序会提供一个默认的拷贝构造函数,该函数为浅拷贝。 //默认拷贝构造 ---浅拷贝--值复制 类名(const 类名& 形参名) {成…