吴恩达机器学习笔记——线性回归

news2024/10/2 14:26:23

1.模型描述

有训练集数据房子面积和卖出的价钱,我们用这组数据来模拟特定面积的房子能够卖出的价钱。

这是一个很明显的监督学习(supervised learning)的例子,因为我们的训练集里包含了正确的结果(即房子的卖价)。同时这也是典型的回归问题(regression),因为模型的输出是一个连续的数值。

下面定义模型中会用到的一些符号:

m:表示训练集中的数据个数

x:训练集中输入变量

y:训练集中输出变量

(x,y):训练集中的一个数据

:第i个训练集数据

如上图x(1)=2104,y(2)=232

现在来看监督学习如何做这件事,我们首先向计算机提供训练集,计算机根据学习算法从训练集中学习数据特征并输出一个假设函数h(hypothesis function),h是一个x到y的映射函数。输入房子面积x来预测卖价y。

在这里,我们首先考虑最简单的情况,即房子的卖价与面积为一元线性函数关系:

我们现在要做的就是要找到合适的θ0和θ1来使得训练集中的数据到假设函数的距离最小,达到最好的拟合效果,那么如何找呢?

2.代价函数

我们需要一个具体的函数表达式来表示我们的假设函数到训练集中输出数据y的距离,定义为距离,为了后续方便,我们将式子平方并对所有的训练数据进行求和(i从1到m),最后对式子进行平均得。这就是我们的代价函数,记作

写开得:

我们的目标就是要求出满足假设函数h到y最小距离的,即minimize,从而确定的值。

需要特别注意的是,在假设函数中的自变量为x。在代价函数中自变量为

当我们有两个参数时,我们绘制出来的代价函数可能是这样的:

从图中可以看出,对于同样高度的可以取不同的值,但是存在唯一的使得取得最小值,而满足该条件的即为所求。

为了得出满足该条件的,我们使用线性回归中的梯度下降算法来一步步求得minimize,从而得出满足该条件的

3.梯度下降算法

我们用梯度下降算法来最小化线性回归中的代价函数

算法的实施步骤:

  1. 我们首先将赋初值,一般我们将两者都设为0

  1. 然后我们不断地改变的值去减少,直到我们得到最小值为止

3.1梯度下降算法背后的数学原理

3.1.1 梗概

(for j=0 and j=1):在对进行赋值后,我们通过该式进行的更新(:=表示将等号右边的值赋给等号左边)。

α为学习率(learning rate),也叫步长,可以形象的理解为上图下山过程中下山的步长,控制我们以多大的幅度来更新,而为代价函数的偏导。

正确的求偏导方法为:同步更新,即根据给定的()来同步更新;而不是先更新,再用更新好的来更新。具体更新步骤如下:

正确更新:

错误更新:

更新不同步)

3.1.2 重点介绍偏导部分

我们首先假设只有一个参数的情形,如下图:

:学习率α始终是正的,当在局部最低点右侧时,(即曲线处的斜率)为正,此时减去的是一个正值,即向着横坐标的负方向(即局部最低点所在方向移动),此时更新的一定比原始的的值要小,从而使代价函数逐步变小。

同样的道理看下图:

:学习率α始终是正的,当在局部最低点左侧时,(即曲线处的斜率)为负,此时减去的是一个负值,即向着横坐标的正方向(即局部最低点所在方向移动),此时更新的一定比原始的的值要小,从而使代价函数逐步变小。

3.1.4 学习率

下面我们来研究学习率对梯度下降的影响。我们来看两种极端情况:

  1. 学习率太小

。由式子可知,当α很小时,新更新的的增量将会很小,也即靠近局部最低点(即的最小点,局部最优点)的速度很慢。如图所示:

需要好几步才能到达局部最优点,效率低下。

  1. 学习率太大

。由式子可知,当α很大时,新更新的的增量将会很大,因此有可能错过局部最优点,甚至会造成无法收敛乃至发散。如图所示:

  1. 思考:如果已处于局部最优点会怎么样?

如果已处于局部最优点,根据最优点的性质可知该点导数为零,则=0,故由公式知新更新的与原来的相同,因此将一直处于局部最优点,的值不变。

这也解释了即使学习率不变,梯度下降法也可以收敛到局部最低点的原因。因为:

根据梯度下降算法,比如初始在粉红点处,根据此处斜率较大且为正值,故会减少一个较大的量从而到达绿色点处,学习率始终保持不变。同理在绿色点处斜率减小则减小了一个较小的量从而使向左方向移动的步伐放缓而到达红色点处,学习率始终保持不变。再接着此处斜率更小,减小的量更小,到达蓝色点处而学习率不变。以此类推重复上述步骤,我们在接近局部最优点时导数会自动变得越来越小,梯度下降的幅度将会自动变小,则在学习率不变的情况下逐步逼近局部最优点。故即使学习率不变,梯度下降法也可以收敛到局部最优点。

因此我们在梯度下降算法中不必改变学习率。

3.2 梯度下降所存在的问题

梯度下降存在一个问题,那就是容易陷入到局部最优。

如上图所示,从不同的位置出发(取不同的初始值),可能会得到不同的局部最优解。这是因为在图中的代价函数存在多个局部最优解。如何解决陷入局部最优的问题会在之后解决。但是在线性回归的代价函数中不存在局部最优,只有一个全局最优,因为线性回归的代价函数图像是这样的:

在这样的代价函数上使用梯度下降,它总会收敛到全局最优,因为没有其他局部最优解。

这种每步梯度下降算法遍历所有训练集样本()来进行参数更新的梯度下降算法叫做Batch梯度下降,因此在计算偏导数时我们计算m个样本的总和

4.线性回归算法

在了解了代价函数和梯度下降算法后,我们就可以引出线性回归算法了。首先对前面的公式进行说明:

假设函数:+。假设函数是我们最后要得出的结果,根据假设函数可以预测一个面积的房子可以卖多少钱,而想要得出假设函数就要得出

代价函数:。代价函数用来对假设函数预测精度进行度量,判断假设函数的预测精度是否达到最优。(代价函数的值越小,假设函数的预测精度越高,拟合数据拟合的越好)

梯度下降:。通过梯度下降来使得代价函数的值不断达到最优(局部最小值),从而找到最优的假设函数参数的具体更新如下:

偏导函数:由代价函数,分别对求偏导可得:==

==

:=

:=

算法步骤:

  1. 首先我们给赋初值,一般是=0,=0,得出假设函数。

  1. 根据假设函数计算代价函数的值。

  1. 计算偏导数带入梯度下降更新(同时更新)。

  1. 根据新得到的来更新假设函数。

重复2,3,4步,可以发现代价函数的值不断减小,假设函数对于数据的拟合效果越来越好,直至找到最佳的假设函数。

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

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

相关文章

非递归迭代实现二叉树前序,中序,后序遍历

文章目录1. 前序遍历2. 中序遍历3. 后序遍历1. 前序遍历 题目链接 解题思路: 非递归遍历一棵树有两点: 1.左路结点 2.左路结点的右子树 什么意思呢? 我们知道前序遍历是按照根,左子树,右子树来的。所以它是先根&…

js中的原型链

js中原型和原型链😚 1、为什么需要原型链?🤣😚 凡事都是有一定的需求和原因发展起来的,在ECMA中为什么要提出原型链这个概念呢? 我们知道,创建对象有两种方式。一种是通过字面量来创建&#…

科研 | 论文写作 | 最常用的LaTeX语法

最常用的LaTeX语法1. 行内公式2. 行间公式3. 下标4. 上标5. 公式编号6. 数学公式7. 根号和分式8. 上下标记9. 向量10. 积分、极限、求和、乘积11. 三圆点12. 重音符号13. 矩阵14. 小写希腊字母和大写希腊字母15. 公式组合16. 拆分单个公式1. 行内公式 格式:将公式编…

流计算框架storm概览

Attention: supervison 和 nimbus的状态都实时保存在zookeeper集群中和本地. Enchance, this means you can kill -9 Nimbus or the Supervisors and theyll start back up as nothing happened. Topologies 1. storm jar all-my-code.jar org.apache.storm.MyTopology a…

父类子类静态代码块、构造代码块、构造方法执行顺序

github:https://github.com/nocoders/java-everything.git 名词解释 静态代码块:java中使用static关键字修饰的代码块,每个代码块只会执行一次,JVM加载类时会执行静态代码块中的代码,静态代码块先于主方法执行。构造代码块&#…

[Java面经] 三年工作经验, 极兔一二面

极兔一二面面经: 1. mysql的acid怎么实现的 这一点先回答ACID分别是A(原子性),C(一致性),I(隔离性),D(持久性), 其中持久性是数据库落磁盘的操作,无需额外实现. 隔离性是通过事务的隔离级别来实现, MySQL默认的隔离级别是RR(可重复读), 虽然上面还有一层Serializable(串行化…

如何在canvas中模拟css的背景图片样式

笔者开源了一个Web思维导图mind-map,最近在优化背景图片效果的时候遇到了一个问题,页面上展示时背景图片是通过css使用background-image渲染的,而导出的时候实际上是绘制到canvas上导出的,那么就会有个问题,css的背景图…

【日常总结】docker容器相互调用,占用服务器带宽解决方案

目录 一、场景: 1. 环境 2. 项目背景: 3. 全球时区解决方案 4. 方案二步骤 二、问题 三、产生原因 四、解决方案 五、解决步骤 六、整改效果 一、场景: docker容器相互调用,占用慢服务器带宽,导致netty连接的…

go 切片(slice)原理及用法注意事项

切片(slice)定义 go语言中的slice是一种数据结构,其定义为一个结构体,如下所示; type SliceHeader struct {Data uintptr // 指向底层数组的指针Len int // 切片的长度Cap int // 切片的容量 }切片与数组 切片的底层数据存储结构是 数组切片较为灵活,能动态扩容,而数组是定…

vue2使用v-viewer实现图片预览ImagePreview

追溯&#xff1a; View UI Plus 是 View Design 设计体系中基于 Vue.js 3 的一套 UI 组件库&#xff0c;里面有个组件ImagePreview可以实现“图片预览”。 使用ImagePreview组件&#xff0c;报错&#xff1a; [Vue warn]: Unknown custom element: <ImagePreview> - d…

odoo15 标题栏自定义

odoo15 标题栏自定义 如何显示为自定义呢 效果如下: 代码分析: export class WebClient extends Component {setup() {this.menuService = useService("menu");this.actionService = useService("action");this.title = useService("title&…

在Docker 上完成对Springboot+Mysql+Redis的前后端分离项目的部署(全流程,全截图)

本文章全部阅读大约2小时&#xff0c;包含一个完整的springboot vue mysqlredis前后端分离项目的部署在docker上的全流程&#xff0c;比较复杂&#xff0c;请做好心理准备&#xff0c;遇到问题可留言或则私信 目录 1 安装Docker&#xff0c;以及简单使用参照 2 Docker部署m…

HOT100--(3)无重复字符的最长子串

点击查看题目详情 大思路&#xff1a; 创建哈希表&#xff0c;元素类型为<char, int>&#xff0c;分别是字符与其对应下标 用哈希表来存储未重复的子串&#xff0c;若有重复则记录下当前子串最大值maxhashsize 并且开始以相同方法记录下一子串 遍历完成以后&#xff0c…

Android OpenCV(七十三):吊打高斯模糊的StackBlur Android 实践

前言 OpenCV 4.7.0 2022年12月28日Release,ChangeLog中提到 Stackblur algorithm implementation. Stackblur是一种高斯模糊的快速近似,由Mario Klingemann发明。其计算耗时不会随着kernel size的增大而增加,专为大kernel size的模糊滤波场景量身定制。 使用建议:当kerne…

[RDMA-高级计算机网络report] Congestion Control for Large-Scale RDMA Departments

本文主要解决的问题是在RoCEv2体系中&#xff0c;基于优先级的拥塞控制PFC是一种粗粒度的机制。 它在端口&#xff08;或端口加优先级&#xff09;级别上运行&#xff0c;并且不区分流。PAUSE机制是基于每个端口&#xff08;和优先级&#xff09;的&#xff0c;而不是基于每个流…

mysql数据库之索引使用原则

一、最左前缀法则。 1、如果索引使用了多列&#xff08;联合索引&#xff09;&#xff0c;要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始&#xff0c;并且不跳过索引中的列。 如果跳跃到某一列&#xff0c;索引将部分失效&#xff08;后面的字段索引失效&am…

springboot启动时遇见的版本不同、无法启动、自动停止问题解决方案

Springboot项目启动失败初来乍到&#xff0c;听说springboot很好用&#xff0c;很简便&#xff0c;于是爱搞事情的我就打算试试&#xff0c;因为最近在找工作&#xff0c;很多软件开发的也要求springboot的使用&#xff0c;于是我就开启了springboot的学习之旅&#xff0c;打算…

Vue3 企业级项目实战:认识 Spring Boot

Vue3 企业级项目实战 - 程序员十三 - 掘金小册Vue3 Element Plus Spring Boot 企业级项目开发&#xff0c;升职加薪&#xff0c;快人一步。。「Vue3 企业级项目实战」由程序员十三撰写&#xff0c;2744人购买https://s.juejin.cn/ds/S2RkR9F/ 越来越流行的 Spring Boot Spr…

人工智能及其应用(蔡自兴)期末复习

人工智能及其应用&#xff08;蔡自兴&#xff09;期末复习 相关资料&#xff1a; 人工智能期末复习 人工智能复习题 人工智能模拟卷 人工智能期末练习题 1 ⭐️绪论 人工智能&#xff1a;人工智能就是用人工的方法在机器&#xff08;计算机&#xff09;上实现的智能&#xff0…

攻不下dfs不参加比赛(八)

标题 为什么练dfs题目重点为什么练dfs 相信学过数据结构的朋友都知道dfs(深度优先搜索)是里面相当重要的一种搜索算法,可能直接说大家感受不到有条件的大家可以去看看一些算法比赛。这些比赛中每一届或多或少都会牵扯到dfs,可能提到dfs大家都知道但是我们为了避免眼高手低有…