应用机器学习的建议

一、决定下一步做什么

        在你得到你的学习参数以后,如果你要将你的假设函数放到一组新的房屋样本上进行测试,假如说你在预测房价时产生了巨大的误差,你想改进这个算法,接下来应该怎么办?实际上你可以考虑先采用下面的几种方法:

  1. 获得更多的训练实例

  2. 尝试减少特征的数量

  3. 尝试获得更多的特征

  4. 尝试增加多项式特征

  5. 尝试减少正则化程度\lambda

  6. 尝试增加正则化程度\lambda

我们不应该随机选择上面的某种方法来改进我们的算法,而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的。“诊断法”的意思是这是一种测试法,你通过执行这种测试,能够深入了解某种算法到底是否有用,这通常也能够告诉你,要想改进一种算法的效果,什么样的尝试才是有意义的

二、评估一个假设

        在本节内容中我想介绍一下怎样用你学过的算法来评估假设函数,在之后的内容中,我将以此为基础来讨论如何避免过拟合和欠拟合的问题

        当我们确定学习算法的参数的时候,我们考虑的是选择参数来使训练误差最小化,有人认为得到一个非常小的训练误差一定是一件好事,但我们已经知道,仅仅是因为这个假设具有很小的训练误差,并不能说明它就一定是一个好的假设函数,而且我们也学习了过拟合假设函数的例子,所以这推广到新的训练集上是不适用的。

        那么,你该如何判断一个假设函数是过拟合的呢?对于某个简单的例子,我们可以对假设函数h(x)进行画图,然后观察图形趋势,但对于特征变量不止一个的一般情况,想要通过画出假设函数来进行观察,就会变得很难甚至是不可能实现,因此,我们需要另一种方法来评估我们的假设函数。为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用70%的数据作为训练集,用剩下30%的数据作为测试集,很重要的一点是训练集和测试集均要含有各种类型的数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。

测试集评估在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差:

  • 对于线性回归模型,我们利用测试集数据计算代价函数J

  • 对于逻辑回归模型,我们除了可以利用测试数据集来计算代价函数外:

  • 还可以对于每一个测试集实例计算误分类的比例:

    然后对计算结果求平均

三、模型选择和交叉验证集

假设我们要在10个不同次数的二项式模型之间进行选择:

显然次数越高的多项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代表着能推广至一般情况,我们应该选择一个更能适应一般情况的模型,因此我们需要使用交叉验证集来帮助选择模型,即:使用60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用20%的数据作为测试集

模型选择的方法为:

  1. 使用训练集训练出10个模型

  2. 用10个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)

  3. 选取代价函数值最小的模型

  4. 用步骤3中选出的模型对测试集计算得出推广误差(代价函数的值)

 

四、诊断偏差和方差

推荐一篇写得很好的关于偏差和方差的文章:机器学习 -偏差与方差 - 知乎

        当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况:要么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟合问题。那么这两种情况,哪个和偏差有关,哪个和方差有关,或者是不是和两个都有关?搞清楚这一点非常重要,因为能判断出现的情况是这两种情况中的哪一种其实是一个很有效的指示器,指引着可以改进算法的最有效的方法。

Bias(偏差):用所有可能的训练数据集训练出的所有模型的输出的平均值与真实模型的输出值之间的差异

Variance(方差):是不同的训练数据集训练出的模型输出值之间的差异

我们通常会通过将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:(d:多项式的最高次数)

对于训练集,当 d 较小时,模型拟合程度更低,误差较大;随着 d 的增长,拟合程度提高,误差减小;对于交叉验证集,当 d 较小时,模型拟合程度低,误差较大;但是随着 d 的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候

根据上面的图表,我们知道:

训练集误差和交叉验证集误差近似时:高偏差/欠拟合

交叉验证集误差远大于训练集误差时:高方差/过拟合

五、正则化和偏差/方差

        在我们训练模型的过程中,一般会使用一些正则化方法来防止过拟合,但是我们可能会正则化的程度太高或太小了,即我们在选择λ的值时也需要思考与刚才选择多项式模型次数类似的问题

我们选择一系列的想要测试的\lambda值,通常是 0-10之间的呈现2倍关系的值,如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10共12个),我们同样把数据分为训练集、交叉验证集和测试集

选择\lambda的方法为:

  1. 使用训练集训练出12个不同程度正则化的模型

  2. 用12个模型分别对交叉验证集计算的出交叉验证误差

  3. 选择得出交叉验证误差最小的模型

  4. 运用步骤3中选出模型对测试集计算得出推广误差,我们也可以同时将训练集和交叉验证集模型的代价函数误差与λ的值绘制在一张图表上:

• 当$\lambda$较小时,训练集误差较小而交叉验证集误差较大

• 随着 $\lambda$的增加,训练集误差不断增加,而交叉验证集误差则是先减小后增加

六、学习曲线

        学习曲线就是一种来判断某一个学习算法是否处于偏差、方差问题的很好的工具,学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的图表。如果我们有100行数据,我们从1行数据开始,逐渐学习更多行的数据。思想是:当训练较少行数据的时候,训练的模型将能够非常完美地适应较少的训练数据,但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据

 

如何利用学习曲线识别高偏差/欠拟合:作为例子,我们尝试用一条直线来适应下面的数据,可以看出,无论训练集有多么大误差都不会有太大改观,也就是说在高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助

如何利用学习曲线识别高方差/过拟合:假设我们使用一个非常高次的多项式模型,并且正则化非常小,可以看出,当交叉验证集误差远大于训练集误差时,往训练集增加更多数据可以提高模型的效果,也就是说在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果

七、回答开头的问题

        我们已经介绍了怎样评价一个学习算法,我们讨论了模型选择问题、偏差和方差的问题。那么这些诊断法怎样帮助我们判断,哪些方法可能有助于改进学习算法的效果,而哪些可能是徒劳的呢?让我们再次回到最开始的例子在那里寻找答案,回顾开头提出的六种可选的下一步,让我们来看一看我们在不同的情况下应该怎样选择:

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

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

相关文章

防御保护--第一次实验

目录 一,vlan的划分及在防火墙上创建单臂路由 二,创建安全区域 三,配置安全策略 四,配置认证策略 五,配置NAT策略 1.将内网中各个接口能够ping通自己的网关 2..生产区在工作时间内可以访问服务器区,仅…

AI大模型开发架构设计(6)——AIGC时代,如何求职、转型与选择?

文章目录 AIGC时代,如何求职、转型与选择?1 新职场,普通人最值钱的能力是什么?2 新职场成长的3点建议第1点:目标感第2点:执行力第3点:高效生产力 3 新职场会产生哪些新岗位机会?如何借势?4 新职场普通人…

数据结构-线性表

文章目录 数据结构—线性表1.线性表的定义和基本操作线性表的定义线性表的特点线性表的基本操作 2.线性表的顺序存储和链式存储表示顺序存储链式存储单链表循环链表双向链表 数据结构—线性表 1.线性表的定义和基本操作 线性表的定义 定义:线性表是具有相同数据类…

数据结构篇-03:堆实现优先级队列

本文着重在于讲解用 “堆实现优先级队列” 以及优先级队列的应用,在本文所举的例子中,可能使用优先级队列来解并不是最优解法,但是正如我所说的:本文着重在于讲解“堆实现优先级队列” 堆实现优先级队列 堆的主要应用有两个&…

sqli-lbs靶场搭建

目录 环境小皮源码下载 1.源码解压: 2.搭建网站 2.1点击创建网站 2.2修改sql-connections\db-creds.inc 2.3重新启动 3.访问你设置的域名 3.1点击启动数据库配置 3.2返回第一个页面(开启题目) sqlilbs靶场搭建 环境小皮源码下载 下载地址&am…

【服务器】宝塔面板的使用手册

目录 🌷概述 🌼1. 绑定域名 🌼2. 添加端口 🌼3. 安装docker配置docker​​​​​​​ 🌼4. 软件商店 🌼5. 首页 🌷概述 宝塔面板的安装教程:【服务器】安装宝塔面板 &#x1f…

golang封装业务err(结合iris)

golang封装业务err 我们有时在web开发时,仅凭httpStatus以及msg是不方便维护和体现我们的业务逻辑的。所以就需要封装我们自己的业务错误。 自定义biz_err维护err map:errorResponseMap、errorHttpStatusMap 注意:本文主要以演示为主&#xf…

uniapp 用css animation做的鲤鱼跃龙门小游戏

第一次做这种小游戏,刚开始任务下来我心里是没底的,因为我就一个‘拍黄片’的,我那会玩前端的动画啊,后面尝试写了半天,当即我就给我领导说,你把我工资加上去,我一个星期给你做出来,…

Vulnhub靶场DC-9

攻击机192.168.223.128 靶机192.168.223.138 主机发现 nmap -sP 192.168.223.0/24 端口扫描 nmap -sV -p- -A 192.168.223.138 开启了22 80端口 访问一下web页面 有个查询界面 测试发现存在post型的sql注入 用sqlmap跑一下,因为是post型的,这里…

用于不对称卷积的验证参数的小程序

非对称卷积的特征图尺寸计算 此处只例举输入图像是正方形的情况。设输入图像尺寸为WxW,卷积核尺寸为ExF,步幅为S,Padding为P,卷积后的特征图尺寸为: 矩形卷积 如果输入图像是正方形,尺寸为WxW&#xff0c…

C++二叉搜索树详解

文章目录 1. 前言2. 二叉搜索树的概念3. 二叉搜索树的操作4. 二叉搜索树的实现5. 二叉搜索树的应用6. 二叉搜索树的性能分析 1. 前言 当涉及到组织和管理数据时,二叉搜索树是一种常用的数据结构。它不仅可以快速插入和删除元素,还可以高效地搜索和查找特…

Elasticsearch安装Head图形插件

一、Google浏览器扩展插件方式 1.安装插件 进入谷歌浏览器应用商店搜索“Elasticsearch Head”,点击链接跳转 点击“添加至Chrome”按钮安装即可。 2.使用插件 在浏览器的插件列表多了个一个放大镜图标 点击“New”新建链接,输入es节点或集群地址。 连接成功 可以进行概括…

windows CUDA更新(最简单方法)+虚拟环境torch和cuda安装

目录 一、Torch和对应cuda安装 1、查看本身电脑的cuda版本 2、查找对应cuda——torch——python版本 3、安装cuda 4、安装torch 二、window 10 NVIDIA cuda版本更新 一、Torch和对应cuda安装 项目使用torch想要使用GPU运行,但是报错,记录一下解决…

扭蛋机小程序开发:探索用户体验与商业价值的融合

一、引言 随着移动互联网的快速发展,小程序作为一种新型的应用形态,正逐渐改变着人们的生活方式。扭蛋机小程序便是其中一例,它结合了线上线下的互动体验,为用户带来了全新的娱乐方式。本文将探讨扭蛋机小程序的开发过程&#xf…

初见CodeQL

安装CodeQL CodeQL本身包含两部分解析引擎SDK 下载已经编译好的 CodeQL 执行程序 https://github.com/github/codeql-cli-binaries/releases 下载之后配置环境变量 安装 SDK CMD 进入 CodeQL 安装目录,使用 Git 安装 SDK git clone https://github.com/Semmle/ql安…

Vulnhub-dc6

信息收集 # nmap -sn 192.168.1.0/24 -oN live.port Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-25 14:39 CST Nmap scan report for 192.168.1.1 Host is up (0.00075s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 192.168.1.2…

JAVA多线程并发学习记录

基础知识 1.进程和线程 线程是最小的调度单位,进程是最小的资源分配单位 进程:当程序从磁盘加载到内存中这时就开启了一个进程,进程可视为程序的一个实例。大部分程序可以同时运行多个实例。 线程:线程是进程的一个子集&#…

机器学习第一个项目-----鸢尾花数据集加载及报错解决

项目步骤 如刚开始做,从 “项目开始” 看; 如遇到问题从 “问题” 开始看; 问题 报错如下 ModuleNotFoundError: No module named sklearn解决过程 查看官网,感觉可能是python版本和skilearn版本不匹配,更新一下p…

Spring MVC 请求流程

SpringMVC 请求流程 一、DispatcherServlet 是一个 Servlet二、Spring MVC 的完整请求流程 Spring MVC 框架是基于 Servlet 技术的。以请求为驱动,围绕 Servlet 设计的。Spring MVC 处理用户请求与访问一个 Servlet 是类似的,请求发送给 Servlet&#xf…

【vue3】Vue3 + Vite 项目搭建

Vue3 Vite 项目搭建 创建项目添加Vue Router 4路由配置添加Vant UI 组件库移动端rem适配添加iconfont字体图标库二次封装Axios请求库添加CSS预处理器Less添加全局状态管理插件Vuex 1.创建项目 Vite方式 1.1 进入开发目录, 执行指令创建新项目 更行node版本18 npm 7.x版本 su…