【机器学习】如何选择合适的假设函数

news2024/9/29 5:22:54

在前面的线性回归中,我们可以使用不同次数的多项式对数据集进行拟合,但是选择次数过低的多项式会导致欠拟合,选用次数过多的多项式会过拟合,那么如何选择合适的多项式呢?这就是本文需要解决的问题。

想要了解自己训练出的模型对训练集外的实例的泛化能力,则我们可以将初试的数据集分为两部分:70%为我们的训练集,剩下30%为我们的测试集(当然比例我们可以灵活调整)。我们通常用 m t e s t m_{test} mtest表示测试集的数量, ( x t e s t ( 1 ) , y t e s t ( 1 ) ) (x^{(1)}_{test},y^{(1)}_{test}) (xtest(1),ytest(1))表示一个测试集实例

首先我们使用梯度下降求得最小的代价函数 J ( Θ ) J(\Theta) J(Θ),然后使用测试集求其对训练集之外的实例的误差,也就是求 J t e s t ( Θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2 J_{test}(\Theta)=\frac{1}{2m_{test}}\sum_{i=1}^{m_{test}}(h_\theta(x^{(i)}_{test})-y^{(i)}_{test})^2 Jtest(Θ)=2mtest1i=1mtest(hθ(xtest(i))ytest(i))2如果是分类问题则直接将公式换成逻辑回归的代价函数计算公式便可

在过拟合中,尽管训练出来的模型对训练集拟合得十分完美,但是模型对新样本的泛化能力很差。那么我们应该如何找到最适合的假设函数的多项式次数呢?
在这里插入图片描述
假设我们选择的多项式的次数为d,如上图。如果我们想要得到某个次数的多项式假设函数对新样本的泛化能力,我们可以这样做:首先选择d=1的假设函数来训练模型,然后用线性回归和梯度下降求出代价函数最小的时候的 θ \theta θ的取值,我们用 θ ( 1 ) \theta^{(1)} θ(1)表示d=1的时候的 θ \theta θ取值。同理,我们一直重复上述方法可以得到 θ ( 2 ) , θ ( 3 ) . . . θ ( 10 ) \theta^{(2)},\theta^{(3)}...\theta^{(10)} θ(2),θ(3)...θ(10),通过得到的参数,可以计算出 J t e s t ( Θ ( 1 ) ) , J t e s t ( Θ ( 2 ) ) , J t e s t ( Θ ( 3 ) ) . . . J t e s t ( Θ ( 10 ) ) J_{test}(\Theta^{(1)}),J_{test}(\Theta^{(2)}),J_{test}(\Theta^{(3)})...J_{test}(\Theta^{(10)}) Jtest(Θ(1)),Jtest(Θ(2)),Jtest(Θ(3))...Jtest(Θ(10))然后选出其中 J t e s t ( Θ ( i ) ) J_{test}(\Theta^{(i)}) Jtest(Θ(i))最小的一个模型,假设 J t e s t ( Θ ( 5 ) ) J_{test}(\Theta^{(5)}) Jtest(Θ(5))最小,那么我们会认为泛化能力最出色的多项式。但是这仍不能证明模型的泛化能力,因为上述过程类似于新增了一个参数d之后,再使用测试集进行模型训练选出最优d值,也就是说,这是使用测试集来选择模型,又使用相同的测试集来计算误差,对于模型多项式次数d的选择会存在过拟合的情况

为了解决模型选择中的过拟合的问题,我们将数据集划分为三部分:训练集、交叉验证集、测试集。一般它们之间的比例为6:2:2,比例可以灵活调整。一般我们将交叉验证集的第i个样本记作 ( x c v ( i ) , y c v ( i ) ) (x^{(i)}_{cv},y^{(i)}_{cv}) (xcv(i),ycv(i))。以d=2为例子,当我们面对模型选择的时候,对于从d=1到d=10的模型,我们依次使用线性回归和梯度下降求出代价函数最小的时候的 θ \theta θ的取值,然后求出各个d的取值下 J c v ( θ ) J_{cv}(\theta) Jcv(θ)的取值,而不是像之前的求 J t e s t ( Θ ) J_{test}(\Theta) Jtest(Θ)的取值,如下图所示
在这里插入图片描述
选择 J c v ( θ ) J_{cv}(\theta) Jcv(θ)值最小的对应的d的取值,假设d=4的时候最佳,那么我们就选择这个多项式次数作为最优假设函数模型。而测试集合在最后直接用于计算 J t e s t ( θ ( 4 ) ) J_{test}(\theta^{(4)}) Jtest(θ(4))的值,这个值可以用于衡量模型对其他样本的泛化能力。生动点来说,测试集在最后选出最佳的d之后再进行测试,就如同“期末考试”一样,作为一个新样本来测试通过交叉验证集选出的d次多项式假设函数是否能够具备有良好的泛化能力

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

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

相关文章

什么是α测试β测试和灰度测试?

吃软件测试这碗饭的,如果基础理论都不懂,谈何长久? 欢迎来学习本系列,基础理论比较枯燥,这也是为什么现在很少人掌握的主要原因。热饭尽量用浅显易懂 生动的例子 来帮助大家学习基础理论,所以请耐心看完此系…

纯JavaScript简单实现移动端网页的上拉加载、下拉刷新

公司要在安卓软件中,添加H5网页包,实现订单卡片列表,要求有上拉加载、下拉刷新的功能。 经过搜索资料后,实现如下: 创建一个类PullData class PullData() {/*** 类的构造函数,在new PullData({xx: xxx})时…

尚硅谷甄选--(暂时不更新,实习,后期有时间更)

文章目录 搭建后台管理系统模板项目的资源地址项目初始化2.1.1环境准备2.1.2初始化项目2.2项目配置一、eslint配置1.1vue3环境代码校验插件1.2修改.eslintrc.cjs配置文件1.3.eslintignore忽略文件1.4运行脚本 二、配置**prettier**2.1安装依赖包2.2.prettierrc.json添加规则2.3…

OpenCV——总结《车牌识别》

1.图片中的hsv hsv提取蓝色部分 # hsv提取蓝色部分 def hsv_color_find(img):img_copy img.copy()cv2.imshow(img_copy, img_copy)"""提取图中的蓝色部分 hsv范围可以自行优化cv2.inRange()参数介绍:第一个参数:hsv指的是原图第二个参…

阿里老员工吐槽:部门来了个“卷”王同事,我们都要跟着加班..

随着IT互联网热愈演愈烈,大批应届生选择毕业后进入IT圈,还有另一批打工人冲着高薪福利待遇转行IT行业,越来越多人涌入程序员大军中。加之互联网行业的火爆,催生了大量程序员岗位,门槛也较之前来说越来越低了&#xff0…

Python采集商品数据信息,看看一般怎样销量会多

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: python 3.8 >>>>>> 运行代码 pycharm 2022.3 >>>>>> 辅助敲代码 模块使用: selenium >>> pip install selenium3.141.0 指定版本安装 <模拟人的行为去操…

《论文阅读07》Segment Anything in 3D with NeRFs

一、论文 研究领域&#xff1a;图像分割(3D)论文&#xff1a;Segment Anything in 3D with NeRFsSubmitted on 24 Apr 2023 (v1), last revised 1 Jun 2023 (this version, v3)Computer Vision and Pattern Recognition (cs.CV)nvos数据集论文链接 二、论文概要 三、全文翻译 …

通用vs垂直?热门AI大模型你更看好哪个?(附免费资源)

自ChatGPT发布以来&#xff0c;通用大模型就仿佛坐了火箭&#xff0c;短短几个月的时间&#xff0c;各大企业便争相发布自己的大模型&#xff0c;这其实也反应了目前人工智能发展的方向。 不过从长远来看&#xff0c;垂直领域大模型的发展会比通用大模型更具势头&#xff0c;一…

Java线程面试题

0. Java线程面试题 0.1 线程占用的内存 JDK1.4默认单个线程占用256KJDK1.5默认单个线程占用1M可以通过-Xss参数设定 0.2 为什么要使用线程池 手动创建线程池的缺点 不受风险控制&#xff1a;服务器CPU资源有限&#xff0c;如果每个人都显示手动创建线程&#xff0c;不知道哪…

Office远程代码执行漏洞(CVE-2017-11882)漏洞复现

Office远程代码执行漏洞&#xff08;CVE-2017-11882&#xff09;漏洞复现 1.漏洞原理2.在Kali平台查看漏洞利用文件3.登录目标靶机&#xff0c;打开FTP服务器4.登录Kali&#xff0c;利用FTP服务器上传payload-cale.doc文件5.登录目标靶机&#xff0c;触发doc文件&#xff0c;验…

虚函数,抽象基类

编译器处理虚函数的方法&#xff1a; 给每个对象添加一个隐藏成员&#xff0c;隐藏成员保存了一个指向函数地址的数组指针&#xff0c;数组被称为虚函数表&#xff0c;虚函数表存储了为类对象声明的虚函数的地址&#xff0c;比如基类包含一个指针&#xff0c;该指针指向基类中…

阿里巴巴变革,盒马“一马当先”

配图来自canva可画 随着数字经济成为当前经济社会发展的“新宠”&#xff0c;诸多数字企业也开始走上了发展的快车道。而作为国内互联网大厂的阿里巴巴集团&#xff0c;为了打造数字经济时代的商业、金融、物流、云计算和大数据等新一代商业基础设施&#xff0c;就于前不久启动…

Javawed第一章:Web前端的入门理论

目录 前言 一.wed &#x1f496;wed是什么&#xff1f; &#x1f496; wed的分类 二.HTML 和 CSS &#x1f496;HTML的介绍 HTML的标签 &#x1f496;CSS的介绍 常用基本标签 &#x1f496;实践 HTML结构标签特点 三.JavaScript &#x1f496;JavaScript的介绍 &…

SOLIDWORKS仿真数据清扫工具

我们来聊下SOLIDWORKS仿真数据清扫工具。与 SOLIDWORKS 软件一起安装的一个鲜为人知的工具是 Simulation Cleaning Utility。该实用工具可用于在 SOLIDWORKS 零件或装配文件中永远删除任何仿真数据&#xff0c;包括仿真设置和后处理信息。 SOLIDWORKS仿真数据清扫工具工具可以…

阻塞队列(消息队列)

1、阻塞队列 队列是一种先进先出的数据结构。而阻塞队列也是一种特殊的队列&#xff0c;也遵守”先进先出“的原则。 阻塞队列是一种线程安全的的数据结构&#xff0c;并且具有以下特性&#xff1a; 1、队列往进写元素是从队尾插入&#xff0c;队首取出 2、当插入元素的时候…

Python面向对象编程基础知识和示例代码

文章目录 对象&#xff08;Object&#xff09;示例代码一 类的成员方法&#xff08;Method&#xff09;示例代码二 类和对象&#xff08;Class and Object&#xff09;&#xff1a;示例代码三 构造方法&#xff08;Constructor&#xff09;&#xff1a;示例代码四 魔术方法&…

JUC简介

1、JUC介绍 JUC (java.util.concurrent)是在并发编程中使用的工具类&#xff0c;主要包括以下三个 &#xff08;1&#xff09;java.util.concurrent &#xff08;2&#xff09;java.util.concurrent.atomic 原子性&#xff1a;不可分割。Int i0; i, &#xff08;3&#xff09;…

MySQL——函数与约束的讲解

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 前言 本章将会讲解MySQL数据库的函数与约束的讲解。 一.函数 函数 是指一段可以直接被另一…

渗透测试面试题汇总

2023年快过去一半了&#xff0c;不知道小伙伴们有没有找到自己心仪的工作呀【doge】&#xff0c;本文总结了常见的安全岗位面试题&#xff0c;方便各位复习。祝各位事业顺利&#xff0c;财运亨通。在网络安全的道路上越走越远&#xff01; 所有的资料都整理成了PDF&#xff0c…

DCN v1阅读笔记

DCN v1即 Deformable Convolutional Networks。 视觉识别&#xff08;例如对象检测和语义分割&#xff09;中的一个关键挑战是如何适应物体尺度、姿态、视角和零件变形中的几何变化或模型几何变换。卷积神经网络&#xff08;CNN&#xff09;构建模块中为固定几何结构&#xff1…