【机器学习】线性回归模型详解

news2024/12/23 10:56:28

PS:本文有一定阅读门槛,如果有不明白的地方欢迎评论询问!

1 模型概述

接下来我们将要学习我们的第一个模型——线性回归。比如说我需要根据数据预测某个面积的房子可以卖多少钱
在这里插入图片描述
接下来我们会用到以下符号:

  • m:训练样本数量
  • x:输入值,又称为属性值
  • y:输出值,是我们需要的结果

我们会用 ( x , y ) (x,y) (x,y)表示一整个训练样本,使用 ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i))来表示第i个样例
我们将上图用表格表示出来如下:
在这里插入图片描述
那么线性回归的预测模型如下:
在这里插入图片描述
训练集输入到学习算法中,然后学习算法会根据数据训练出函数h。作为一个线性回归模型,其输出的h应该是 h ( x ) = θ 0 + θ 1 x h(x)=\theta_0+\theta_1x h(x)=θ0+θ1x,图像为一条直线。得到函数h后,我们只需要输入房屋的大小,就可以得到估算的价格

2 代价函数

以上面的 h ( x ) = θ 0 + θ 1 x h(x)=\theta_0+\theta_1x h(x)=θ0+θ1x为例子,不同的 θ 0 \theta_0 θ0和不同的 θ 1 \theta_1 θ1会得出不同的假设函数,我们需要做的是选择出恰当的值,使得假设函数和数据集中的点更好地拟合,也就是说对于样本 ( x i , y i ) (x_i, y_i) (xi,yi),值 ∣ h ( x i ) − y i ∣ |h(x_i)-y_i| h(xi)yi越小越好,进一步精确地定义我们要解决的问题就是,在让 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1尽量小的情况下, ∣ h ( x i ) − y i ∣ |h(x_i)-y_i| h(xi)yi越小越好,这是一个最小化问题。

那么我们用以下式子衡量假设函数的优劣:
J = 1 2 m ∑ i = 1 m h θ ( x ( i ) − y ( i ) ) 2 J = \frac{1}{2m}\sum_{i=1}^m h_\theta(x^{(i)}-y^{(i)})^2 J=2m1i=1mhθ(x(i)y(i))2
其中i表示的是第i个样例 ,总共有m个样例,这就是线性回归的代价函数,这个函数的值越小越好,接下来我们会详细剖析代价函数

我们先只考虑 h ( x ) = θ 1 x h(x)=\theta_1x h(x)=θ1x的情况,也就是 θ 1 = 0 \theta_1=0 θ1=0,那么如果数据集为(1,1),(2,2),(3,3),那么以 θ 1 \theta_1 θ1为横坐标,以 J ( θ 1 ) J(\theta_1) J(θ1)为纵坐标,可以画出如下图像
在这里插入图片描述
可以看出 θ 1 = 1 \theta_1=1 θ1=1的时候 J ( θ 1 ) J(\theta_1) J(θ1)最小

当我们同时考虑 θ 1 \theta_1 θ1 θ 0 \theta_0 θ0的时候,得到的代价函数则是一个类似于等高线图的三维图像
在这里插入图片描述
当然,我们也可以使用等高线标出:
在这里插入图片描述
在图中,圆心部分是J值最小的部分,也就是拟合得最好的 θ 1 \theta_1 θ1 θ 0 \theta_0 θ0的取值,我们知道了J的图像之后,那么我们编写的算法的目标就是如何找到J的最小值

3 梯度下降

梯度下降是十分常用的算法,不仅仅是线性回归,其他机器学习算法中也会频繁用到。

假设我们现在有一个函数 J ( θ 0 , θ 1 ) J(\theta_0, \theta_1) J(θ0,θ1)(不一定是线性回归的代价函数),需要找出其最小值 m i n J ( θ 0 , θ 1 ) min J(\theta_0, \theta_1) minJ(θ0,θ1)

首先我们给 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1赋予初值,通常都是0,梯度下降需要做的事情就是不断微调两个值,从而找出J的最小值或者局部最小值。假设函数J图像如下:
在这里插入图片描述
我们可以将图像想象成两个山,并且点站在了红色的山顶上,梯度下降就是环顾四周,看看哪个方向下山是最快的,也可以理解为斜率最大的方向。然后试探着迈出一步后,再重复上述步骤,直到找到一个地方,四周围的点集都要比该点高,那么这就是一个局部最优解或最优解,示例如下图

在这里插入图片描述
这很像算法课里的贪心思想是不是!既然是贪心,那么得到的就可能不是最优解,比如下面的例子:
在这里插入图片描述
如果我们更改一下起始点,那么按照上述的方法可能到达的地方就并非是J的最优解,而只是一个局部最优解。我们也可以看到,更改起始点会得到不同的局部最优解

梯度下降的数学定义如下:
在这里插入图片描述
我们会反复做这一步,直到收敛。其中:=为赋值运算符, α \alpha α表示学习率,用来控制梯度下降时我们迈的步子有多大,以后会细讲。后面的 ∂ ∂ θ j J ( θ 0 , θ 1 ) \frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) θjJ(θ0,θ1)则是一个导数,后面的则是指明了更新的条件,当j=0或者j=1的时候更新 ,更新的时候需要同时更新 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1。下面的Simultaneous update表明了其更新的过程,首先经值暂存于temp0和temp1中,然后将这两个值依次赋予 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1

假设我们的最小化参数只有 θ 1 \theta_1 θ1,并且 J ( θ 0 ) J(\theta_0) J(θ0)的曲线如下:
在这里插入图片描述
如果我们从 θ 1 \theta_1 θ1处开始梯度下降,那么梯度下降要做的就是不断地更新 θ 1 : = θ 1 − ∂ ∂ θ 1 J ( θ 1 ) \theta_1 := \theta_1-\frac{\partial}{\partial\theta_1}J(\theta_1) θ1:=θ1θ1J(θ1),可以看出,这是一个递归的过程。仔细看这个公式,其中 ∂ ∂ θ 1 J ( θ 1 ) \frac{\partial}{\partial\theta_1}J(\theta_1) θ1J(θ1)是当前 θ 1 \theta_1 θ1所在位置的导数,也可以简单理解为点 ( θ 1 , J ( θ 1 ) ) (\theta_1, J(\theta_1)) (θ1,J(θ1))的斜率,那么如果 α \alpha α越大, θ 1 \theta_1 θ1变化得也越快。以上图为例子,其 θ 1 \theta_1 θ1所在位置的导数为正数,那么 θ 1 \theta_1 θ1会减小;如果 θ 1 \theta_1 θ1所在位置的导数为负数(比如下图的情况),那么 θ 1 \theta_1 θ1会逐渐增大

在这里插入图片描述
上述两个例子说明,无论是什么情况,他都会趋向于走向J值更小的位置,如果已经到达了J值最小的位置,那么该位置的导数 ∂ ∂ θ 1 J ( θ 1 ) = 0 \frac{\partial}{\partial\theta_1}J(\theta_1)=0 θ1J(θ1)=0,此时的 θ 1 : = θ 1 − ∂ ∂ θ 1 J ( θ 1 ) \theta_1 := \theta_1-\frac{\partial}{\partial\theta_1}J(\theta_1) θ1:=θ1θ1J(θ1)就不会发生变化,另外,当 θ 1 \theta_1 θ1靠近最优解的时候,由于导数逐渐变小,其每次迈出的步子也越来越小。对于 α \alpha α值,如果学习速率太小,那么他需要很多次递归才能到达最低点;如果学习速率太大,那他会很有可能越过最低点,甚至会导致无法收敛或者直接就发散了。
在这里插入图片描述
当然,在这个图像里只有一个局部最优解,这个局部最优解就是整体最优解,如果我们换一个图像会怎么样。
在这里插入图片描述
如果是上述图像,也许我们到达了 θ 1 \theta_1 θ1的位置,这个位置是一个局部最优点,但是他并非是全局的最优解

将上面的过程推广开来,假设函数为 J ( θ 1 , θ 2 , θ 3 . . . . θ n ) J(\theta_1,\theta_2,\theta_3....\theta_n) J(θ1,θ2,θ3....θn),也可以应用梯度下降求出其最小值

4 线性回归中的梯度下降

本节将会用梯度函数和代价函数相结合,得到线性回归的算法,这可以用直线拟合数据。我们上文说到,线性回归的模型函数是 J = 1 2 m ∑ i = 1 m h θ ( x ( i ) − y ( i ) ) 2 J = \frac{1}{2m}\sum_{i=1}^m h_\theta(x^{(i)}-y^{(i)})^2 J=2m1i=1mhθ(x(i)y(i))2然后其梯度下降的函数为
θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) \theta_j := \theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) θj:=θjαθjJ(θ0,θ1)将两者合并后可得出 α ∂ ∂ θ j J ( θ 0 , θ 1 ) = α ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)=\alpha\frac{\partial}{\partial\theta_j}\frac{1}{2m}\sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)})^2 αθjJ(θ0,θ1)=αθj2m1i=1m(hθ(x(i))y(i))2
又因为函数 h θ ( x ( i ) ) = θ 0 + θ 1 x ( i ) h_\theta(x^{(i)})=\theta_0+\theta_1x^{(i)} hθ(x(i))=θ0+θ1x(i),所以
α ∂ ∂ θ j J ( θ 0 , θ 1 ) = α ∂ ∂ θ j 1 2 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) 2 \alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)=\alpha\frac{\partial}{\partial\theta_j}\frac{1}{2m}\sum_{i=1}^m (\theta_0+\theta_1x^{(i)}-y^{(i)})^2 αθjJ(θ0,θ1)=αθj2m1i=1m(θ0+θ1x(i)y(i))2接着我们就计算导数 ∂ ( 1 2 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) 2 ) ∂ θ j \frac{\partial(\frac{1}{2m}\sum_{i=1}^m (\theta_0+\theta_1x^{(i)}-y^{(i)})^2)}{\partial\theta_j} θj(2m1i=1m(θ0+θ1x(i)y(i))2)如果是对 θ 0 \theta_0 θ0求偏导可以得出 ∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1)=\frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)}) θ0J(θ0,θ1)=m1i=1m(hθ(x(i))y(i)) θ 1 \theta_1 θ1求偏导可得 ∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ∗ x ( i ) \frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1)=\frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)})*x{(i)} θ1J(θ0,θ1)=m1i=1m(hθ(x(i))y(i))x(i)综上所述,可以知道最终 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1的计算公式为
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \theta_0 := \theta_0-\alpha\frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)}) θ0:=θ0αm1i=1m(hθ(x(i))y(i)) θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ∗ x ( i ) \theta_1 := \theta_1-\alpha\frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)})*x^{(i)} θ1:=θ1αm1i=1m(hθ(x(i))y(i))x(i)

还有一个问题就是,我们知道,代价函数可能会有数个局部最优解,梯度下降的起始点会使得梯度下降的结果导向不同的局部最优解。如下图所示
在这里插入图片描述
但是实际上我们在线性回归中并不需要考虑这个问题,因为线性回归的代价函数总是一个弓形函数,它只有一个全局最优。
在这里插入图片描述
当你使用线性回归计算这种代价函数的梯度下降,他总会收敛到全局最优,因为他只有一个最优解

上面介绍的算法又称为Batch梯度下降算法,其含义是梯度下降的每一步都会考虑整个数据集的数据。与之相对的是,某些算法在进行梯度下降时会只考虑数据集中的部分子集,比如说和当前点相关性较大的数据

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

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

相关文章

软考A计划-重点考点-专题七(软件工程)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

当今自然语言处理领域中的成功之路:Transformer模型

当今自然语言处理领域中最重要和最成功的模型之一是Transformer模型。它是一种基于自注意力机制的神经网络模型,最初由Google公司的研究人员提出,并被广泛应用于机器翻译、文本生成、情感分析等任务中。 Transformer模型之所以被广泛使用,是因…

AI 将完全取代前端开发吗?

注:今晨,我浏览 Medium,看到了篇颇为标题党的文章,于是我就将它抛给了 ChatGPT。本篇文章全部由 ChatGPT 所写。同时,我也请 ChatGPT 分享了它对此的观点。 最近,我的同事向我讲述了他与他老板的一次谈话。…

Golang每日一练(leetDay0061) 表列序号、阶乘后的零

目录 171. Excel 表列序号 Excel Sheet Column Number 🌟 172. 阶乘后的零 Factorial Trailing Zeroes 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练…

ImageBind 多模态文本、图像、音频 Embedding同一个共享空间

参考: https://github.com/facebookresearch/ImageBind ImageBind learns a joint embedding across six different modalities - images, text, audio, depth, thermal, and IMU data ImageBind 多个模态共享同一个空间Embedding,这样可以通过一个模态…

【虾皮shopee来赞达lazada】各区域商品详情API接口返回值说明

虾皮shopee电商数据(来赞达lazada同理) 虾皮(shopee)是一个亚洲区域的电商平台,主要在东南亚地区提供电商服务。虾皮提供了丰富的电商数据,包括商品数据、订单数据、会员数据、评价数据等。以下是具体的介绍: 商品数据…

SpringBoot ( 二 ) 配置Controller

2.Controller处理请求 由于 在建立 SpringBoot项目时选择的 Web > Spring Web , Maven会导入 SpringMVC 框架 依赖, 做为 Web处理框架 在 SpringMVC框架中 , 通过 Controller类中的方法 来处理请求, 产生响应 在方法中 要解决以下问题 标识方法转页接收请求时传递信息封装响…

生物识别技术的安全挑战

背景 如今,生物识别技术已成为最流行的趋势之一,该趋势旨在通过更具弹性的身份验证机制来提高安全性并阻止网络攻击。目前,全球不仅面临着越来越多的跨设备和系统的网络威胁,冠状病毒大流行还改变了消费者和企业对数字和物理风险…

ChatGPT会如何影响我们的工作生活和人力资源需求

ChatGPT,这几天体验了一下,确实是非常震撼。 一方面是因为它的回答确实相当好,自带一点框架逻辑,有上下文理解能力,可以追问,有情商。虽然很多时候都是一些正确的废话 它还有媲美一个普通大学生的信息整合…

PCIe热插拔机制(详细)总结-PCIe专题知识(五)

目录 前言一、概述二、原理详解2.1 热插拔原理总结2.2 热插拔软硬件要求 三、其他相关知识链接1、PCIe物理层总结-PCIE专题知识(一)2、PCIe数据链路层图文总结-PCIe专题知识(二)3、PCIe物理层链路训练和初始化总结-PCIe专题知识&a…

macOS Ventura 13.4 RC(22F62)发布

系统介绍 5 月 10 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.4 RC 更新(内部版本号:22F62),本次更新距离上次发布隔了 49 天。 macOS Ventura 带来了台前调度、连续互通相机、FaceTime 通话接力等功能。其中&a…

工程化:vite4和vue3里面的命令式loading的封装及使用

用习惯了vue的组件使用方式,转到vue3里面发现没有了vue的原型,不能全局挂载方法了,我们要使用命令式调用组件该怎么做, 效果展示 代码演练 1.组件结构 2.基础的组件模板loading.vue <template><sectionclass="full-loading":class

Java 诊断神器:Arthas

Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类加载信…

SpringBoot【开发实用篇】---- 测试

SpringBoot【开发实用篇】---- 测试 1. 加载测试专用属性2. 加载测试专用配置3. Web环境模拟测试4. 数据层测试回滚5. 测试数据用例设定 说完bean配置相关的内容&#xff0c;下面要对前面讲过的一个知识做加强了&#xff0c;测试。测试是保障程序正确性的唯一屏障&#xff0c;在…

ubuntu重启ssh服务

一、开启ssh服务首先需要安装打开ssh服务的库&#xff1a; sudo apt-get install openssh-server 二、检查当前的ssh开启情况&#xff1a; ps -e |grep ssh 三、如果有sshd&#xff0c;则ssh-server已经启动&#xff1b;若仅有agent&#xff0c;则尚未启动&#xff1b; 开启ssh…

宝塔面板Nginx防火墙安装

宝塔防火墙作用 要让你的网站保持持久的安全和稳定&#xff0c;开启网站防火墙是必不可少的一步。别等到被攻击的时候再去补救&#xff0c;那个时候某种程度来讲&#xff0c;已经晚了。安装和开启防火墙&#xff0c;就是防患于未然。未雨绸缪。最大程度保护好你的云服务器和网站…

JAVAWeb11-服务器渲染技术 -JSP-03-JSTL(会使用)

1. JSTL 标签库介绍 JSTL 标签库 是指 JSP Standard Tag Library &#xff1a;JSP 标准标签库EL 表达式是为了替换 jsp 中的表达式脚本&#xff0c;JSTL 是为了替换代码脚本。这样 jsp 页面变得更佳简洁JSTL 由五个标签库组成 使用 JSTL&#xff0c;需要导入相关的 jar 包 2…

一文读懂:客户管理系统平台是什么?有什么作用?

“客户管理系统平台是什么&#xff1f;” “客户管理系统平台有什么作用&#xff1f;在哪里可以应用&#xff1f;怎么用&#xff1f;” 经常可以听到企业内部关于客户管理系统平台的这些问题&#xff0c;本文将会为您一一解答&#xff1a; 一、客户管理系统平台是什么 顾名…

远程桌面连接Windows Server,提示“你的远程桌面服务会话已结束,可能是下列原因之一”错误

1、错误描述如下&#xff1a; 2、问题原因 出现该问题可能有以下原因&#xff1a; Windows实例的系统盘无Users用户&#xff0c;您可以参考方案一&#xff1a;添加Users用户修复该问题。 Windows实例的系统盘Users用户无读取和执行、列出文件夹内容、读取权限&#xff0c;您…

python建立字典的方法

在学习 Python的过程中&#xff0c;我们需要用到一些字典类的模块&#xff0c;例如 gdb、 gdtool等&#xff0c;但是这些字典类的模块都是以文件的形式存在。虽然通过 pip等命令也可以进行安装&#xff0c;但是在安装过程中我们需要非常仔细的检查安装包是否正确&#xff0c;以…