吴恩达机器学习WEEK1

embedded/2024/10/18 21:25:16/

COURSE 1 WEEK 1

机器学习的应用

当我们有一个目标,不知道如何显示地写出来一个程序时,例如自动驾驶等,这时候就需要制定某些规则,让计算机自己去学习,即机器学习

机器学习就是沿用人脑学习的过程,逐步对目标进行认知、学习

机器学习的定义

Arthur Samuel将机器学习定义为使计算机无需明确编程即可完成学习的研究领域

一般而言,给机器越多的训练,其最后表现得效果就会越好

机器学习主要分为:

  • 监督学习,实际应用中使用最多的算法模型
  • 无监督学习

监督学习

监督学习是指学习从 x x x y y y,即从输入到输出映射的算法,关键是人为提供学习算法实例以供学习,即我们的数据集,根据我们提供的数据,使得机器尽可能准确(与数据相符)的获得一个输出,从而用来预测

一些领域的应用:
在这里插入图片描述

在这些程序中,我们首先使用输入事例 x x x 和正确答案 y y y 来训练模型,在模型通过这些数据中学习之后,他们可以采用全新的输入 x x x ,并尝试产生对应的适当的输出 y y y

Learns from being given “right answers”

在监督学习中,又可以分为:

  • 回归,从无限多的可能数字中预测数字,例如房价的预测

  • 分类,输出的值是一组有限的集合,且输出不必是数字,例如乳腺癌肿瘤分类。

    分类算法的学习任务就相当于是找到不同类别的分界线,用于做分类
    在这里插入图片描述

在分类中,输出是一组离散的、有限可能的输出

在回归中,输出是无限多可能的数字

无监督学习

无监督学习中,给定的数据与任何输出标签 y y y 无关,即例如乳腺癌预测,只给出了患者年龄和肿瘤块大小,但我们不知道是否患有肿瘤,即没有任何标签
在这里插入图片描述

因此,如上图中,无监督学习的任务就是找到数据的集群,即哪些数据聚集在一起,例如经常使用的聚类算法

就像推荐系统,在阅读文章时,通常会有推荐阅读,这就是无监督算法,他通过我们阅读的文章中的关键词,进行搜索,把关键词相同的文章进行聚类,从而形成推荐阅读

总的来说,聚类算法就是获取没有标签的数据并尝试自动将他们分组到集群中

无监督学习类型:

  • 聚类算法
  • 异常检测
  • 降维,将大数据压缩成一个小得多的数据集,同时丢失尽可能少的信息

线性回归模型

模型介绍

线性回归是监督学习中一个重要的模型,其具体做法是利用一条直线来拟合我们当前的数据,例如房价预测

在这里插入图片描述

常用术语

  • 输入 x x xfeature,即特征
  • 输出 y y ytarget,即目标
  • 训练样本的总数 m m m
  • ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)) 代表这是第 i 个训练示例

整体过程:
在这里插入图片描述

  • 首先定义训练集,即training set,其中包括特征与目标
  • 然后设置学习算法,模型通过这个算法去进行学习
  • 最终得到一个函数f,称为我们的模型
  • 通过输入一些值,并且定义他的大小,得到预测值

关键:模型函数f的定义

由于我们是线性模型,因此,在这里定义模型为:
f w , b ( x ) = w x + b f_{w, b}(x) = wx + b fw,b(x)=wx+b
这是一个关于 x x x 的函数,输出为 y ^ \hat y y^,并且通过学习合适的参数 w 、 b w、b wb 来使预测值足够准确

损失函数

损失函数能够告诉我们模型的运行情况,以便我们可以尝试让他做得更好

在我们的模型中, w 、 b w、b wb 称为参数,即 parameters

当参数不同时,我们的模型就会不同,最终的预测结果也就不同

在这里插入图片描述

因此,对于我们的线性回归模型,就是要找到最合适的一组参数,使得我们的预测值尽量准确,尽量的的接近训练示例

因此,为了表示准确程度,我们需要设置损失函数,来表示我们模型的直线与训练数据的匹配程度

误差项err
( y ^ ( i ) − y ( i ) ) (\hat y^{(i)} - y^{(i)}) (y^(i)y(i))
损失函数cost function
J ( w , b ) = 1 2 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 = 1 2 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) 2 J(w,b) = \frac{1}{2m}\sum_{i=1}^{m}(\hat y^{(i)} - y^{(i)})^2 = \frac{1}{2m}\sum_{i=1}^{m}(f_{w, b}(x^{(i)}) - y^{(i)})^2 J(w,b)=2m1i=1m(y^(i)y(i))2=2m1i=1m(fw,b(x(i))y(i))2
即,平方误差损失函数

最前面除以2是为了后续的计算中表达更简洁

因此,最终我们的目标是通过训练来更新参数的值,使得损失函数最小,即
min ⁡ w , b = J ( w , b ) \mathop{\min}\limits_{w,b} =J(w,b) w,bmin=J(w,b)
为了简化操作方便可视化,这里去掉参数 b b b,把误差函数作为 J ( w ) J(w) J(w),通过选取不同的参数 w w w,误差函数曲线如下所示:

在这里插入图片描述

梯度下降

梯度下降算法是通过对损失函数求解梯度计算,找到损失函数最小时对应的参数的值

一般而言,我们并不需要关注参数的初始值,因此一般在算法初始阶段会将参数设置为 0

梯度下降算法的整体流程就相当于下山的过程,当我们想要迅速下山至山谷时,每一次都要朝着一个方向迈出一小步,为了尽快下山,每一步的方向应该是当前山坡中最陡的方向
在这里插入图片描述

其中,下山的方向就是我们的梯度,迈出的步伐大小就是学习率

同时,由于初始点的选取不同,我们可能会下山到不同的山谷,即对应了各种局部最优解

梯度下降算法公式

w = w − α ∂ ∂ w J ( w , b ) b = b − α ∂ ∂ b J ( w , b ) w = w - \alpha \frac{\partial}{\partial w}J(w,b) \\ b = b - \alpha \frac{\partial}{\partial b}J(w,b) w=wαwJ(w,b)b=bαbJ(w,b)

其中, α \alpha α 是学习率

注意:

在执行梯度下降算法计算梯度时,上述两个梯度的计算是同时的,即损失函数 J ( w , b ) J(w,b) J(w,b)中的值是相同的,且两个参数的更新是同时的,这样做的目的是能够确保是在源点寻找到最陡的地方

在这里插入图片描述

学习率的选取

当学习率选择较小时,意味着我们下山时每一步的步长比较小,需要较多次数才能到达山谷,虽然最终会得到正确的答案,但需要耗费较长的时间
在这里插入图片描述

当学习率比较大时,意味着我们下山时每一步的步长比较大,可能会加速我们下山的过程,但由于步长较大,因此会错过山谷,即结果不会收敛到最小值点
在这里插入图片描述

但是,使用梯度下降算法时,经常遇到的一个问题是陷入局部最优解,此时该点的梯度值为 0,参数不能更新

因此,通常,在使用梯度下降算法时,我们通常会对学习率做自适应的变化,即随着迭代次数的增加,学习率逐步减小:

  • 在算法的初步阶段,学习率较大,提高全局搜索能力,使得参数快速收敛到最优值附近
  • 在算法的结尾阶段,学习率较小,提高局部搜索能力,使得参数精确收敛到精确值的位置

http://www.ppmy.cn/embedded/89063.html

相关文章

【Linux脚本】Nginx日志分割的shell脚本

环境:CentOS Linux release 7.6.1810 (Core) 编写一个Nginx日志分割的shell脚本,以实现只保留最近一周的日志文件。这个脚本将会分割access.log和error.log文件,并保留最近7天的日志。 #!/bin/bash# Nginx日志目录 LOG_DIR"/usr/local/nginx/logs"# 日志文…

C语言之“文件操作”

文章目录 1. 什么是文件?(1. 为什么使用文件?(2.什么是文件2.1 程序文件2.2 数据文件2.3 文件名 2. 二进制文件和文本文件?3. 文件的打开和关闭3.1 流和标准流3.2 文件指针(用来管理流的)3.3 文件的打开与关闭 4. 文件…

RIP综合练习

要求: 1.合理使用IP地址划分网络,各自创建循环接口 2.R1创建环回172.16.1.1/24 172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环回 4.减少路由条目数量,R1,R2之间增加路由传递安全性 5.R5创建一个环回模拟运营商,不能…

Java:Thread类以及线程状态

文章目录 Thread类等待一个线程 - join()获取当前线程的引用sleep 线程状态 Thread类 等待一个线程 - join() 操作系统,针对多个线程的执行,是一个"随机调度,抢占式执行“的过程. 线程等待就是在确定两个线程的"结束顺序”. 我们无法确定两个线程调度执行的顺序,但…

Linux:线程的概述(线程概念、线程和进程的区别、线程的最佳数量)

线程概述 (1)What Linux中线程的本质就是轻量级进程,线程是CPU调度的最小单元 (2)Why 主要目的是提高程序的并发性,实现程序的高性能运行、并提高系统的吞吐量。 (3)线程和进程的比较 地址空间: 进程拥有独立的地址空间;而线程共…

4个自定义倒计时

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>4个自定义倒计时</title><style>* {margin: 0;padding: 0;box-sizing: border-box;user-select: none;body {background: #0b1b2c;}}hea…

SpringBoot 禁用RabbitMQ自启动

1.背景 在实际开发中,项目中使用了mq,但是在测试的时候用不到mq,或者测试环境的mq挂了, 希望能正常启动项目 2.步骤 这很简单在配置文件中增加一个配置就可以了 spring:autoconfigure:exclude: org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration 表示启…

ThreadPoolExecutor简介

一、 所有成员变量 ThreadPoolExecutor 是 Java 中 java.util.concurrent 包的一部分&#xff0c;它管理线程池的状态和行为。以下是 ThreadPoolExecutor 类中的主要成员变量&#xff08;字段&#xff09;&#xff1a; 1、特殊的成员变量 ctl - 类型&#xff1a;AtomicInteg…