吴恩达机器学习笔记(2)—单变量线性回归

目录

一、模型表示

二、代价函数

三、代价函数的直观理解(1)

四、代价函数的直观理解(2)

五、梯度下降

六、梯度下降的直观理解

七、线性回归的梯度下降


在本篇内容中,我们将介绍第一个机器学习算法——线性回归算法。更重要的是,我们将借助这个算法,带你了解一个完整的监督学习流程

一、模型表示

我们通过一个例子来开始:预测房价。我们拥有一个数据集,记录了美国俄勒冈州波特兰市的若干房子面积及其对应的成交价格。横轴表示房子的面积(平方英尺),纵轴表示房价(千美元)。如果有一套房子面积是 1250 平方英尺,想知道大概能卖多少钱。你可以通过构建一个预测模型来实现,比如你可以用一条直线来拟合数据,从而推断出:这套房子可能值大约 22 万美元左右。

这是监督学习算法的一个例子。 因为在训练过程中,每个数据样本都包含一个“正确答案”,也就是我们已经知道的真实输出(每个房子的实际售价)。而且这还是一个回归问题的例子,因为预测一个具体的数值输出(房子的价格)。

在监督学习中我们有一个数据集,这个数据集被称训练集,如下图。

在课程中,使用以下符号来描述训练集和模型结构: 

  • m:训练样本数量

  • x:特征/输入变量(例如房子面积)

  • y:目标变量/输出变量(例如房子价格)

  • ({​{x}^{(i)}},{​{y}^{(i)}}):第 i 个训练样本

  • h:学习算法输出的假设函数(hypothesis)

一个典型的监督学习过程如下:

  1. 收集训练数据,比如不同面积的房子及其对应价格。

  2. 将这些数据输入给学习算法。

  3. 算法“学习”出一个函数 h,也就是我们的预测模型

  4. 当想预测一套房子的售价时,只需将其面积作为输入,使用这个函数 h 得到预测价格。

换句话说,我们希望找到一个函数 h,使得它能近似地预测出输入 x(房屋面积)对应的输出 y(价格)。这可以用线性函数表示为:

$h_\theta \left( x \right)=\theta_{0} + \theta_{1}x$

因为这里只有一个特征(房子面积),所以我们称这种情况为单变量线性回归

二、代价函数

在这一节中我们将定义代价函数的概念,这有助于我们弄清楚如何把最有可能的直线与我们的数据相拟合。在上一节中,我们得到的假设函数为一个线性函数形式:

$h_\theta \left( x \right)=\theta_{0} + \theta_{1}x$

选择不同的参数 $\theta_{0}$ 和 $\theta_{1}$ 会得到不同的假设函数 $h_\theta \left( x \right)$ ,如下图。

$\theta_{i}$ 称为模型参数,我们要做的是选择出一组合适的参数 $\theta_{0}$ 和 $\theta_{1}$,使得模型预测值 $h_\theta \left( x \right)$ 与实际值 y 的差距最小。这里给出标准定义,在线性回归中要解决的是最小化问题。

最小化公式,加平方是为了使差距极其小

$\min_{\theta_0,\, \theta_1} \qquad (h_\theta(x) - y)^2$

对所有训练样本的差距进行求和,\frac{1}{2m}是为了尽量减少平均误差

$\min_{\theta_0,\, \theta_1} \qquad \frac{1}{2m} \sum_{i=1}^{m} \left(h_\theta(x^{(i)}) - y^{(i)}\right)^2$

由于假设函数表示为

$h_\theta(x^{(i)}) = \theta_{0} + \theta_{1}x^{(i)}$

因此问题变成找到 \theta_{0} 和 $\theta_{1}$ 的值,使以下公式最小

$\min_{\theta_0,\, \theta_1} \qquad J(\theta_0, \theta_1) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2$

J(\theta_0, \theta_1) 就是代价函数,这个函数也叫作 平方误差代价函数它是回归问题中最常见也是最合理的选择之一。

三、代价函数的直观理解(1)

 在这一节中,为了更好地使代价函数J可视化,我们使用一个简化的代价函数,可以让我们更好的理解代价函数的概念。

将假设函数的参数 \theta_{0} 视为0

$h_\theta(x^{(i)}) = \theta_{1}x^{(i)}$

那么代价函数就变为

$\min_{\theta_1} \qquad J(\theta_1) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2$

优化目标就是尽量减少 $J(\theta_1)$ 的值

实际上,有两个关键函数是我们需要去了解的。一个是假设函数 $h_\theta(x)$  ,第二个是代价函数 $J(\theta_1)$ 。假设函数h是对于给定的 \theta_1 的值,是一个关于 x 的函数。代价函数J是关于参数 \theta_1 的函数。假设有三个点的训练集(1,1) (2,2) (3,3) ,当 \theta_1=1 时,代价函数J的值计算如下。

$ \begin{aligned} J(\theta_1) &= \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2 \\ &= \frac{1}{2m} \sum_{i=1}^{m} \left( \theta_{1}x^{(i)} - y^{(i)} \right)^2 \\ &= \frac{1}{2m}(0^2+0^2+0^2) \\ &= 0 \end{aligned} $

得出当 \theta_1=1 时,h_\theta(x^{(i)}) = y^{(i)},因此 J(1) = 0

绘制的两个函数的图形如下。

当 \theta_1=0.5 时,代价函数J的值计算如下。

$ \begin{aligned} J(\theta_1) &= \frac{1}{2m} \sum_{i=1}^{m} \left( \theta_{1}x^{(i)} - y^{(i)} \right)^2 \\ &= \frac{1}{2*3}[(0.5-1)^2+(1-2)^2+(1.5-3)^2] \\ &\approx 0.58 \end{aligned} $

得出当 \theta_1=0.5 时, J(0.5) \approx 0.58

绘制的两个函数的图形如下。

同理,计算出其它代价函数J的值,比如:

当 \theta_1=0 时,J(0) \approx 2.3

当 \theta_1=-0.5 时,J(-0.5) \approx 5.25

最终,得到的代价函数J的图形如下。

学习算法的优化目标,是通过选择 \theta_1 的值,获得最小的 $J(\theta_1) $ 。在这条曲线中,当 \theta_1 = 1 时,$J(\theta_1) $ 最小。通过观察也可以得出,这是条完美拟合训练集数据的直线。

四、代价函数的直观理解(2)

在本节课程中,我们将更深入地学习代价函数的作用,并借助图形化方式(等高线图)来帮助我们直观地理解其行为与最小值位置。下面是本节用到的公式,与上节不一样的是保留参数 \theta_0 和 \theta_1

假设函数:   $h_\theta \left( x \right)=\theta_{0} + \theta_{1}x$

模型参数:   \theta_0,\theta_1  

代价函数:   $J(\theta_0, \theta_1) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2$

优化目标:   $\min_{\theta_0,\, \theta_1} J(\theta_0, \theta_1)$

采用关于住房价格的训练集,假设\theta_0=50,\theta_1=0.06,绘制假设函数h和代价函数J的图形。其中,代价函数J是关于 \theta_0 和 \theta_1 的函数,是一个3D曲面图,横轴为 \theta_0 和 \theta_1 ,竖轴为代价函数J。

为了更好地展现图形, 我们使用等高线图来展示代价函数,轴为 \theta_0 和 \theta_1 ,每个椭圆形显示一系列 $J(\theta_0, \theta_1)$ 值相等的点,这些同心椭圆的中心点是代价函数的最小值右下图是代价函数的等高线图,左下图是代价函数的最小值(椭圆的中心点)对应的假设函数的图形。

五、梯度下降

在本节课程中,我们将使用梯度下降法替代在上节中的人工方法,来自动寻找代价函数J最小值对应的参数 \theta_0 和 \theta_1 ,也更适合处理在遇到更复杂、更高维度、更多参数的难以可视化的情况。

问题概述:假设有个代价函数 $J(\theta_0, \theta_1)$ ,我们需要用一个算法来最小化这个代价函数。

梯度下降法的思路:首先给定 \theta_0 和 \theta_1 的初始值,通常为 \theta_0=0,\theta_1=0 ,然后不停地一点点地改变 \theta_0 和 \theta_1 的值来使J变小,直到找到J的最小值或局部最小值

通过图像可以更直观地理解梯度下降法是如何最小化代价函数J的。下图是横轴为 \theta_0 和 \theta_1 ,竖轴为代价函数J ,并对 \theta_0 和 \theta_1 赋以不同的初始值。

把这个图像想象为公园中的两座山,然后你正站在山上的一个点上,在梯度下降算法中,我们要做的就是旋转360度,看看周围,并问自己要尽快下山的话,我应该朝什么方向迈步?然后你按照自己的判断迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。对 \theta_0 和 \theta_1 赋以不同的初始值,会得到如图中两个不同的局部最低点,这是梯度下降法的一个特点。

如下图是梯度下降法的数学定义,将会重复更新 \theta_j 的步骤,直到收敛。

其中是 α 学习率,用来控制梯度下降时迈出的步子有多大。如果 α 值很大,会用大步子下山,梯度下降就很迅速;如果 α 值很小,会迈着小碎步下山,梯度下降就很慢。\frac{\partial}{\partial \theta_j} J(\theta_0, \theta_1) 是代价函数J的导数,这跟微积分有关系

要正确实现梯度下降法,还需要同时更新 \theta_0 和 \theta_1 ,左下图的同时更新是正确的,右下图没有同时更新是错误的。

六、梯度下降的直观理解

梯度下降算法的数学定义如下,其中,α 是学习率,\frac{\partial}{\partial \theta_j} J(\theta_0, \theta_1) 是导数项。本节课程将直观认识这两部分的作用,以及更新过程有什么意义。

下面将直观解释导数项的意义,如下图像,是一个只有参数 \theta_1 简化的代价函数 $J(\theta_1) $ 的图像,梯度下降算法的更新规则:$\theta_1:=\theta_1-\alpha\frac{\partial}{\partial \theta_1} J(\theta_1)$ 

 导数项 $\frac{\partial}{\partial \theta_1} J(\theta_1)$ 可以说是 \theta_1 点关于代价函数 $J(\theta_1) $ 的切线的斜率,斜率可以表示 k=tan\beta   其中,β 是直线与 x 轴正方向的夹角。因此,图中是个正斜率,也就是正导数,同时学习率 α 永远是个正数,所以 \theta_1 更新后变小了,要往左移,更接近最低点。

取另一个点 \theta_1 如上图,计算得出是负斜率,也就是负导数,所以 \theta_1 更新后变大了,要往右移,更接近最低点。

接下来介绍学习率 α 的作用如果 α 太小,如下图,结果就是会一点点地挪动,需要很多步才能到达全局最低点。

如果 α 太大,如下图,那么梯度下降法可能会越过最低点,甚至可能无法收敛或者发散。

如果 \theta_1 已经处在一个局部的最低点,如下图,由于最低点的斜率为0,也就是导数等于0,所以 \theta_1 将保持不变,那么梯度下降法更新其实什么都没做,它不会改变参数的值。

接下来解释即使学习速率 α 保持不变时,梯度下降也可以收敛到局部最低点。如下图,在梯度下降法的更新过程中,随着越接近最低点,导数(斜率)越来越小,梯度下降将自动采取较小的幅度, \theta_1 更新的幅度就会越小,直到收敛到局部极小值,这就是梯度下降的做法。所以实际上没有必要再另外减小 α

七、线性回归的梯度下降

在本节课程,我们要将梯度下降法和代价函数结合,得到线性回归的算法,它可以用直线模型来拟合数据。如下图,是梯度下降算法和线性回归模型,线性回归模型包含了假设函数和平方差代价函数。

将梯度下降法和代价函数结合,即最小化平方差代价函数,关键在于求出代价函数的导数

$ \begin{aligned} \frac{\partial}{\partial \theta_j} J(\theta_0, \theta_1) &= \frac{\partial}{\partial \theta_j}\frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2 \\ &= \frac{\partial}{\partial \theta_j}\frac{1}{2m} \sum_{i=1}^{m} \left( \theta_{0} + \theta_{1}x^{(i)} - y^{(i)} \right)^2\end{aligned} $

根据微积分公式,在 j 等于0和1时,推导出的偏导数公式如下

$ \frac{\partial}{\partial \theta_0} J(\theta_0, \theta_1) = \frac{1}{m} \sum_{i=1}^{m} \left( \theta_{0} + \theta_{1}x^{(i)} - y^{(i)} \right) $

$ \frac{\partial}{\partial \theta_1} J(\theta_0, \theta_1) = \frac{1}{m} \sum_{i=1}^{m} \left(( \theta_{0} + \theta_{1}x^{(i)} - y^{(i)} )*x^{(i)}\right) $

 根据公式计算出偏导数项的值,就可以代入到梯度下降法中,不断地对参数进行同步更新,直到收敛,得到线性回归的全局最优解

在上面的算法中,有时也称为批量梯度下降”,指的是在梯度下降的每一步中,我们都用到了所有的训练样本。在梯度下降中,在计算微分求导项时,我们需要进行求和运算,需要对所有 m 个训练样本求和。而事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。

如果之前有学过高等线性代数,应该知道有一种计算代价函数 J 最小值的解法,而不需要使用梯度下降这种迭代算法。这是另一种称为正规方程(normal equations)的方法。实际上在数据量较大的情况下,梯度下降法比正规方程要更适用一些。

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

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

相关文章

最新华为 HCIP-Datacom(H12-821)

最新 HCIP-Datacom(H12-821),完整题库请上方访问,更新完毕。 在OSPF网络中,NSSA区域与STUB区域都是为了减少LSA数量,两者最主要的区别在于,NSSA区域可以引入外部路由,并同时接收OSPF…

vba学习系列(11)--批退率通过率等数据分析

系列文章目录 文章目录 系列文章目录前言一、外观报表1.产能2.固定伤排查3.镜片不良TOP4.镜片公式计算5.镜片良率计算6.镜片批退率7.镜筒不良TOP8.镜筒公式计算9.镜筒良率计算10.镜筒批退率 二、反射率报表1.机台通过率2.镜片通过率圈数分析3.镜片通过率罩次分析4.镜筒通过率圈…

成功在 Conda Python 2.7 环境中安装 Clipper(eCLIP peak caller)

🔬 成功在 Conda Python 2.7 环境中安装 Clipper(eCLIP peak caller) 本文记录了如何在无 root 权限下使用 Conda 环境,解决依赖、构建扩展模块并成功安装运行 clipper 的详细流程。适用于再现 eCLIP 分析流程时遇到 clipper 安装…

通过 VS Code 连接 GitLab 并上传项目

通过 VS Code 连接 GitLab 并上传项目,请按照以下步骤操作: 1. 安装必要工具 确保已安装 Git 并配置用户名和邮箱: git config --global user.name "你的用户名" git config --global user.email "你的邮箱" 在 VS Cod…

开源夜莺支持MySQL数据源,更方便做业务指标监控了

夜莺监控项目最核心的定位,是做一个告警引擎,支持多种数据源的告警。这个版本的更新主要是增加了对 MySQL 数据源的支持,进一步增强了夜莺在业务指标监控方面的能力。 之前版本的夜莺主要聚焦在 Prometheus、VictoriaMetrics、ElasticSearch…

SpringCloud + MybatisPlus:多租户模式与实现

一、多租户的基本概念 多租户(Multi-Tenancy) 是指在一套软件系统中,多个租户(客户)共享相同的基础设施和应用程序,但数据和配置相互隔离的架构模式。其核心目标是 降低成本 和 保证数据安全。 核心特点: 资源共享:租户共享服务器、数据库、代码等资源。数据隔离:通…

Kafka入门:解锁核心组件,开启消息队列之旅

一、引言 Kafka以超高速吞吐、精准的路由策略和永不掉线的可靠性,让海量数据在分布式系统中畅行无阻。无论你是刚接触消息队列的技术小白,还是寻求性能突破的开发老手,掌握 Kafka 核心组件的运作原理,都是解锁高效数据处理的关键…

前端项目Excel数据导出同时出现中英文表头错乱情况解决方案。

文章目录 前言一、Excel导出出现中英文情况。二、解决方案数据处理 三、效果展示总结 前言 在前端项目中实现Excel导出功能时,数据导出excel是常见的业务需求。但excel导出完表头同时包含了中文和英文的bug,下面是我的经验分享,应该可以帮助…

《开窍》读书笔记8

51.学会赞美他人,能净化心灵,建立良好人际关系,让生活充满阳光。 52.欣赏他人的学习过程,能激发潜能,促进相互成长,让有点共存。 53.别因“自我”一叶障目,要关注他人,欣赏与别欣赏式…

基于 Spring Cloud Gateway + Sentinel 实现高并发限流保护机制

基于 Spring Cloud Gateway Sentinel 实现视频播放接口限流保护机制 作者:NovaTube 开发者 | 时间:2025-06 标签:Spring Cloud Gateway、Sentinel、微服务、限流、接口保护 一、背景介绍 在我们开发的在线视频分享平台 NovaTube…

CountDownLatch入门代码解析

文章目录 核心思想:火箭发射倒计时 🚀最简单易懂的代码示例代码解析运行流程分析 核心思想:火箭发射倒计时 🚀 想象一下发射火箭的场景,在按下最终的发射按钮之前,必须有好几个系统同时完成自检&#xff0…

用Python写一个可视化大屏

用Python打造可视化大屏:数据洞察新视界 在当今数据爆炸的时代,数据可视化成为了理解和传达复杂信息的关键工具。Python作为一门强大且灵活的编程语言,提供了丰富的库和工具,让我们能够创建出令人惊叹的可视化大屏。本文将带你逐步…

20250611让NanoPi NEO core开发板在Ubuntu core16.04系统下开机自启动的时候拉高GPIOG8

rootNanoPi-NEO-Core:/# touch open_4g_ec20.sh rootNanoPi-NEO-Core:/# vi open_4g_ec20.sh 【打开使能引脚200 IOG8】 echo 200 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio200/direction echo 1 > /sys/class/gpio/gpio200/value 【切记&#xff1a…

解惑1、为何大容量电容滤低频,小容量电容滤高频

一、电容的种类: 链接: 二、疑惑 理论推算: 1)Zc1/wc,那么大容量和小容量的电容,不应该都是 越高频越阻抗低,越容易通过? 2)大容量,积蓄电荷速度慢&#…

如何有效监控JVM环境,保障应用性能

缓慢的Java应用程序、意外崩溃和晦涩的内存问题——这些都是JVM可能在默默承受压力的信号。JVM监控对于保障Java应用的正常运行时间和最佳性能至关重要,它提供了对Java虚拟机内存、线程和CPU资源使用情况的可见性,使管理员能够在影响终端用户之前识别性能…

python:PyQt5 开发一个邮件客户端,能编写邮件,发送邮件及附件

PyQt5 邮件客户端 下面是一个简洁高效的邮件客户端实现,支持编写邮件、添加附件和发送邮件功能: 编写 eMailClient_qt.py 如下 # -*- coding: utf-8 -*- """ 用 PyQt5 开发一个邮件客户端,能编写邮件,发送邮件及…

React【回顾】 深层次面试详解:函数式组件核心原理与高级优化

以下是对 React 深层次内容的全面解析,涵盖函数式组件的核心原理、性能优化、设计模式和最新特性: 🔧 一、React 核心机制剖析 1. Fiber 架构深解 Fiber 节点结构:function FiberNode(tag, pendingProps, key) {this.tag = tag; // 组件类型(函数组件=0, 类…

视觉语言模型的“视而不见“

这项研究发现,号称能“看图说话”的视觉语言模型(VLMs),在处理需要真正“看”懂图片的纯视觉任务(如判断深度、找对应点、认物体材质等)时,表现远不如它们自己内部的“眼睛”(视觉编…

Wyn 商业智能与 3D 大屏的深度融合应用

引言 在当今数字化快速发展的时代,数据可视化对于企业的决策和管理变得至关重要。商业智能软件作为数据可视化的重要工具,能够帮助企业将海量的数据转化为直观、易懂的信息。而 3D 大屏以其沉浸式、立体的展示效果,为数据可视化带来了全新的…

使用docker compose部署netmaker打通内网

准备 我看官网推荐都是使用ssl然后要ssl证书,不想走弯路了 一、docker-compose.yml version: "3.4"services:netmaker:container_name: netmakerimage: gravitl/netmaker:v0.90.0restart: unless-stoppedports:- "18081:18082"- "50051…