机器学习——线性回归算法、代价函数、梯度下降算法基础

线性回归

还是以之前的预测房价为例,根据不同尺寸的房子对应不同的售价组成的数据集画图,图如下

监督学习算法工作流程

假设函数其实就是我们所说的函数,在房价这个例子中,我们可以从上图中看出房价和房子面积是一个一元的线性函数(当然有更复杂更贴近数据集的函数拟合数据集,但是我们从最简单的开始学习),所以我们要来预测y关于x的线性函数,可以简单写成:y = h(x),但它更完整的写法是下图的形式:

接下来的例子中会用到的一些符号

训练集:数据集又称为训练集,如下面的房价数据集

小写字母m:训练集中样本的数量,也就是数据集中总的数据个数

小写字母x:输入变量,这里指的是房子的面积

小写字母y:输出变量,预测的对应面积x的房子售价

(x, y):表示某一个训练样本,如房价数据集中的某一行数据

(x^i, y^i);i是上标,表示第i个样本

代价函数

下面介绍的代价函数称为平方误差函数,有时还称为平方误差代价函数。,是代价函数中的一种,在解决线性回归问题中比较常用,当然还有其他代价函数

模型参数介绍

如图,我们要做的是如何选择两个模型参数,以让假设函数更贴近训练集,也就是选择对两个模型参数θ0和θ1,会让预测结果更准确

 模型参数的选择

选择不同的模型参数,会得到不同的假设函数

现在我们要根据训练集,得出两个模型参数的值,进而得到具体的假设函数,让该假设函数尽可能多的与训练集中的数据点拟合。那我们该怎么选择这两个模型参数呢?

思路是:对于训练集中的每个数据,每个房子面积x都对应着已知的售价y,假如已经确定两个模型参数,即已经得到假设函数,应该使得对该假设函数输入训练集中的某个x得到的yy,与实际的y最接近(也就是我们说的要最大程度的拟合数据点)

总之就是,我们要使得预测的房价和真实的售价之间差值的平方越小越好(至于为什么是平方,是因为预测价和真实价的差值可能正可能负)

代价函数的数学定义

理解代价函数

为了更好理解,现在我们简化一下假设函数,如图(因为公式不好写,所以都用截图表示了)

 θ1可以取不同的值,包括正数、负数、0,我们的目标是找到让J(θ1)最小的θ1,由J(θ1)的图像可以看出,在这个例子中,θ1 = 1时,J(θ1)能取到最小值,而当θ1=1时,假设函数也是能最大程度的拟合训练集的每个样本的(在这个例子中,假设函数完全拟合训练集中的三个数据点)

上面我们为了容易理解,简化了假设函数,让θ0=0,即假设函数中只有一个模型参数,现在讨论原本的假设函数(有两个模型参数θ0,θ1)

代价函数J(θ0,θ1)的函数图像如下:

 我们用等高线图代替上面的立体图,可以看出,越接近等高线图的中心,代价函数的值就越小,而对应的假设函数就越拟合训练集数据。

我们都是随便取某个点来进行分析,但是实际上不可能一个个列举,所以算法要做的就是快速找到最小的代价函数值J(θ0,θ1)对应的θ0和θ1.

梯度下降算法

上面我们的需求是想得到最小的代价函数值,那么我们此时可以使用梯度下降算法来实现这个需求。梯度下降算法不仅仅可以最小化线性回归的代价函数,还可以最小化其他函数,即梯度下降算法可以最小化任意函数,被广泛应用于机器学习的众多领域。

梯度下降算法可以最小化任意函数J(θ0,θ1,θ2,...,θn),即得到任意函数的最小值或局部最小值,下面为了更容易理解,以两个模型参数为例J(θ0,θ1)描述梯度下降算法的思路

在每一个位置选择不同方向的路时,实际上上就是在不断修改θ0和θ1的值

梯度下降算法的数学定义

公式中的α控制着以多大幅度更新参数θj

梯度下降算法的理解

导数项的意义

我们先来看导数的概念及基本含义,这里只写出了最基本的一点(来自百度,因为我也忘完了(╥╯^╰╥)):

导数是用来描述函数局部变化率的度量。对于给定的函数,它在某一点处的导数,就是函数曲线在该点处的切线斜率。具体地说,若函数y=f(x)在点x0处可导,则点(x0, f(x0))处切线的斜率就是f(x)在点x0处的导数f'(x0)。导数本质上是一个极限,即函数在某个点x0处的导数,就是其在此点附近取极限时的极限值,即:f'(x0) = lim (x->x0) [f(x) - f(x0)] / [x - x0]

为了容易理解,现在假设代价函数只有一个模型参数,即J(θ1),跟之前一样,我们可以得到J(θ1)的函数图像如下,由上面的导数概念,可以知道函数J(θ1)在位置A的导数,就是在函数图像上的位置A作一条切线,该切线的斜率就是J(θ1)在位置A的导数值。

我们再看看另一个位置B的导数,如下

梯度下降算法的运行过程

学习率α大小的影响,如下

 从上面可以出α是一个固定值,不影响梯度下降算法会自动根据导数值的不同来调整每一步走的步子大小。说到这里,好像也没说α的用处,也没说该如何定义α的值,以及为什么还要乘以α,而不是直接减去导数值?

我看了一下视频弹幕,说我们现在举的都是最简单的函数,但是实际应用中,函数会很复杂,非常有可能是多维的,而且函数不一定连续等等。所以这里就当做是理解梯度下降算法的思想吧。如果后面的视频讲到原因,会做笔记的(B站视频链接 这个专栏里的文章应该都是这个视频的笔记)

梯度下降算法在代价函数中的应用

求梯度下降算法中的导数项

我们先求梯度下降算法中的导数项的值,这里求导数的过程使用了复合函数求导和偏导数这两个知识点。

偏导就是当一个函数中有多个变量,如这里代价函数中有两个变量θ0和θ1,在对其中某一个变量求导数时,将其他变量都视作常数项,如对变量θ0求偏导时,将θ1项都看作是常数项,而复合函数求导法则如下(来自知乎):

 下图中,隐函数为假设函数h(x) = θ0 + θ1*x,在对θ0求偏导时,h(θ0)` = 1(θ1*x这一项看作常熟项),在对θ1求偏导时,h(θ1)` = x(θ0和x都看作常熟项

外函数J(h(x)) = (1/2m)[h(x) - y]^2,对J函数偏导时,由于J是复合函数,所以运用复合函数的求导法则,首先J(h(x))` = (1/m)(h(x) - y) (说明:将h(x)看作一个变量,相当于((x-a)²)'=2(x-a),所以求导之后平方没了,前面的二分之一也消掉了2,这也是为什么之前要写成1/2m的原因),结合上面的h(x)对θ0和θ1的偏导,可以得到图中针对θ0和θ1的导数项的值

将计算得到的导数项代入梯度下降算法公式,如下:

梯度下降函数在线性回归中的具体实现过程

在下面这张图中,从不同的位置出发,即初始化的值不同会得到不同的局部最优解

但是我们所举例的房价这一线性回归的例子的代价函数的图像是一个弓状函数(这种称为凸函数,具体的自行百度一下吧,我也不懂),这个函数没有局部最优解,只有全局最优,从图形也可以看出这一点,当计算这种代价函数的梯度下降时,总能得到全局最优解

首先,先初始化θ0和θ1的值,一般都初始化为0,在这里为了方便演示,从图中的点开始

 

上面所展示的梯度下降算法,有时也称为batch梯度下降,从上面的过程中可以看到,batch梯度下降算法每运行一次,即从一个点到另一个点所运行的一次梯度下降,都会遍历训练集中的每个样本(因为在单独的一次梯度下降中,计算偏导时最终都是计算m个样本的总和\sum (h(x) - y)).所以batch梯度下降算法每一次都是从整个训练集入手,而还有其他的梯度下降算法,只从训练集的小子集入手

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

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

相关文章

【进程地址空间】

目录 上层用户看到的地址父进程创建子进程对代码区的同一变量修改 进程地址空间进程地址空间需要划分 页表 上层用户看到的地址 一个系统中的进程是与其他进程共享内存和CPU的。如果某个进程不小心写入另一个使用该内存的进程,进程就可能以某种完全和程序逻辑无关的…

Apache Commons开源的工具库介绍

Apache Commons 是 Apache 软件基金会主持的一个项目,旨在提供一系列可重用的 Java 组件。这些组件覆盖了从数据封装、文本处理到网络通信等各个方面,是 Java 开发中常用的一系列工具库。Apache Commons 项目下的各个库通常以 "commons-" 开头…

css3实现动画无限循环

要在CSS3中实现动画的无限循环,你可以使用animation 属性和 infinite 关键字。以下是一个示例: keyframes myAnimation {0% { /* 起始状态 */ }50% { /* 中间状态 */ }100% { /* 结束状态 */ }}.element {animation: myAnimation 2s infinite; /* 设置动…

团簇束流沉积技术:氢气传感器守护安全与环境的利器

在当今日益增长的能源需求背景下,氢气作为一种清洁、高效的能源载体,正逐渐受到广泛关注。然而,氢气的易燃易爆特性也带来了不小的安全隐患。因此,精确、快速地监测氢气泄漏成为了确保生产安全和环境监测的重中之重。基于团簇束流…

《凤凰架构》 -分布式事务章节 读书笔记

分布式事务严谨的定义:分布式环境下的事务处理机制 CAP定理:在一个分布式系统中,涉及共享数据问题时,以下三个特性最多只能同时满足两个 一致性:代表数据在任何时刻、任何分布式节点中看到的都是符合预期的&#xff0…

HarmonyOS创建一个ArkTS卡片

创建一个ArkTS卡片 在已有的应用工程中,创建ArkTS卡片,具体操作方式如下。 创建卡片。 根据实际业务场景,选择一个卡片模板。 在选择卡片的开发语言类型(Language)时,选择ArkTS选项,然后单…

【LNMP】云导航项目部署及环境搭建(复杂)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、项目介绍1.1项目环境架构LNMP1.2项目代码说明 二、项目环境搭建2.1 Nginx安装2.2 php安装2.3 nginx配置和php配置2.3.1 修改nginx文件2.3.2 修改vim /etc/p…

制造业客户数据安全解决方案(数据防泄密需求分析)

机械行业是历史悠久的工业形式,与国民经济密切相关,属于周期性行业,是我国最重要的工业制造行业之一。即使网络经济与IT信息技术在世界范围内占据主导地位,依然离不开一个发达的、先进的物质基础,而机械行业正是为生成…

【kubernetes】二进制部署k8s集群之,多master节点负载均衡以及高可用(下)

↑↑↑↑接上一篇继续部署↑↑↑↑ 之前已经完成了单master节点的部署,现在需要完成多master节点以及实现k8s集群的高可用 一、完成master02节点的初始化操作 二、在master01节点基础上,完成master02节点部署 步骤一:准备好master节点所需…

Three.js加载PLY文件

这是官方的例子 three.js webgl - PLY 我在Vue3中使用&#xff0c;测试了好久始终不显示点云数据。在网上查询后发现ply文件要放置在public目录下才行 <el-row><el-button type"primary" class"el-btn" click"IniThree1">PLY</…

docker部署seata1.6.0

docker部署seata1.6.0 Seata 是 阿里巴巴 开源的 分布式事务中间件&#xff0c;解决 微服务 场景下面临的分布式事务问题。需要先搭建seata服务端然后与springcloud的集成以实现分布式事务控制的过程 &#xff0c;项目中只需要在远程调用APi服务的方法上使用注解 GlobalTransa…

使用logicflow流程图实例

一.背景 需要使用流程引擎开发项目&#xff0c;没有使用flowable、activiti这类的国外流程引擎&#xff0c;想使用国内的引擎二次开发&#xff0c;缺少单例模式的流程画图程序&#xff0c;都是vue、react、angluer的不适合&#xff0c;从网上找了antx6、logicflow、bpmn.js。感…

架构设计:数据库扩展

引言 随着业务的发展和用户规模的增长&#xff0c;数据库往往会面临着存储容量不足、性能瓶颈等问题。为了解决这些问题&#xff0c;数据库扩展成为了一种常见的解决方案。在数据库扩展的实践中&#xff0c;有许多不同的策略和技术可供选择&#xff0c;其中包括水平拆分、垂直…

【MySQL 探索之旅】初始MySQL数据库

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

【LeetCode每日一题】 单调栈的案例84 柱状图中最大的矩形

84 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;10 解释…

Conmi的正确答案——将JAVA中maven的.m2文件夹放到D盘

系统&#xff1a;WIN11 1、将.m2文件夹移动到D盘 移动后&#xff1a; 2、创建目录链接 mklink /j "C:\Users\Administrator\.m2" "D:\.m2"至此&#xff0c;maven默认的jar包会加载到D盘的.m2文件夹

Ubuntu环境安装MySQL数据库

1.安装过程 打开终端&#xff08;Terminal&#xff09;窗口&#xff0c;使用以下命令更新系统软件包&#xff1a; sudo apt update ubuntu环境安装mysql-server和mysql开发包&#xff0c;包括mysql头文件和动态库文件&#xff0c;命令如下&#xff1a; sudo apt-get instal…

vue复用组件出现data-v-xxx乱码无法通过css修改指定样式

vue复用组件出现data-v-xxx乱码无法通过css修改指定样式解决方案如下 选择需要修改的样式 给最高级父级元素定义新的classname 与原有样式保持相同级联 修改指定样式 .demo_parent .demo_son .demo_grandson[data-v-73a2ee76]{ padding: 0; border-radius: 3px; background: #…

分享数字孪生潭江流域建设与实践论文

数字孪生潭江流域建设 广东省水利厅 以支撑江门市沿线水工程精准联调联控&#xff0c;提升水旱灾害防御能力为首要任务&#xff0c;融合多信息源预报、GIS等技术&#xff0c;建立气象-水文-水动力集一体的复杂流域入库径流预报及其洪涝延伸预报模型平台&#xff0c;构建具有“…

HTMLElement.click()的回调触发踩坑

先看看以下代码 const el document.getElementById("btn") el.addEventListener("click", () > {Promise.resolve().then(() > console.log("microtask 1"));console.log("1"); }); el.addEventListener("click", (…