吴恩达机器学习全课程笔记第一篇

目录

前言

P1 - P8

监督学习

​无监督学习

P9-P14

线性回归模型

成本(代价)函数

P15-P20

梯度下降

P21-P24

多类特征

向量化

多元线性回归的梯度下降

P25-P30

特征缩放

检查梯度下降是否收敛

学习率的选择

特征工程

多项式回归

前言

从今天开始,争取能够在开学之前(2.25)把b站上的【吴恩达机器学习】教程过一遍,并把笔记记录于此,本笔记将会把此课程每一p的重点内容及其截屏记录于此,以供大家参考和本人日后复习,课程链接如下:

吴恩达机器学习教程(bilibili)

推荐网站:

scikit-learn中文社区

吴恩达机器学习github资料

P1 - P8

生活中用到机器学习的例子:浏览器搜索、图片分类、手机语音助手、医疗诊断...

机器学习:一门在没有明确编程的情况下让计算机学习的科学

两种主要类型:监督学习(较多使用)、无监督学习

监督学习

监督学习(英语:Supervised learning),又叫有监督学习,监督式学习,是机器学习的一种方法,可以由训练资料中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。[1]训练资料是由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类

​无监督学习

无监督学习(英语:unsupervised learning),又称非监督式学习,是机器学习的一种方法,没有给定事先标记过的训练示例,自动对输入的资料进行分类或分群。无监督学习的主要运用包含:聚类分析(cluster analysis)、关系规则(association rule)、维度缩减(dimensionality reduce)。它是监督式学习和强化学习等策略之外的一种选择。

 无监督学习主要包含:聚类、异常检测、降维

P9-P14

线性回归模型

训练集:用于训练模型的数据集,包括输入特征(如房屋大小)和输出目标(如房屋价格),要训练模型就要将训练集提供给学习的算法

在机器学习中表示输入的标准符号是小写的x,称之为输入变量或特征、输入特征,小写y是输出变量、目标变量

对于线性回归模型,如何表示上述的function(或者说model)?

w、b是模型的参数,这是可以在训练期间调整以改进模型的变量,也被称为系数或权重

具有一个输入变量的线性模型的另一个名称是单变量线性回归(univariate linear regression)

成本(代价)函数

成本函数采用预测y-hat并通过取y-hat减去y将其与目标y进行比较

平方误差成本函数(Squared error cost function):

如果把b一直设置为0,那么f(x)与J(w,b)的关系大概如下:

但若不忽略b,则损失函数的图像应该是三维,而非二维:

可以把f(x)和上面的损失函数进行结合:

对于右上边的图,是w和b的所有的取值情况(本质是J(w,b)中不同的函数值在wb平面上的投影),那么易知J最小的wb取值一定在同心圆的圆心处,此时读取wb值再在f(x)中画出此直线发现确实很适合训练集。

P15-P20

梯度下降

梯度下降在机器学习中无处不在,不仅用于线性回归,还用于训练一些最先进的神经网络模型(也称为深度学习模型),梯度下降适用于一般的函数,包括适用于具有两个以上参数的模型的其他成本函数

梯度下降算法:

\omega =\omega -\alpha \frac{\partial }{\partial \omega }J(w,b)

其中“=”是赋值符号,α被称为学习率,通常是0到1之间的一个小正数,作用是控制下坡的步幅

另一个参数的处理同理:

b =b -\alpha \frac{\partial }{\partial b }J(w,b)

此算法将会同理进行上述两个操作直到算法收敛,同理需要注意两个细节:

需要注意,要同时更新w和b,实现方法如下:

梯度下降的直观理解:

如果学习率太小,使得得到最小成本J的速度很慢

如果学习率太大,可能无法得到正确的最小成本J,如下所示:

如果已经位于局部最小值,那么梯度下降会使W保持不变:

回到线性回归中,通过微积分推导出它的梯度下降算法式子:

然后,将上述推导的结果插入梯度下降算法:

初始化参数w和b的位置不同,可能会使得梯度下降以不同的局部最小值结束,但事实证明,当使用线性回归的平方误差成本函数时,成本函数不会也永远不会有多个局部最小值

在线性回归中,运行梯度下降,便会出现下面的现象:

每一步的梯度下降使用所有的训练集叫做:批(batch)梯度下降

还有其它版本的梯度下降不会查看整个训练集,而是在每个更新步骤查看训练数据的较小子集

P21-P24

多类特征

引入向量之后,便可以把多元线性回归式写成如下形式:

向量化

使用向量化可以使代码更短,也使其运行更有效

下面是使用python中的numpy库进行非向量化和向量化的演示:

可以看出,使用向量化有两个好处:

1.使得代码更短

2.使得代码的运行速度更快(幕后原因是numpy函数能够在计算机中使用并行硬件,类似hpc)

多元线性回归的梯度下降

线性回归求w和b的另一种方法:正规方程法normal equation,只适用于线性回归、不需要进行迭代

其缺点是:

1.不能推广到其他学习算法,比如不能适用于logistic回归算法等

2.速度非常慢

我们不需要自己实现正规方程法,但是如果我们使用的一个成熟的机器学习库,并调用线性回归,有可能在后端,它将使用正规方程法求解w和b

P25-P30

特征缩放

特征缩放技术可以使梯度下降运行得更快

我们先讨论特征大小和参数值的联系:

如上图所示,当特征取值较大时,其对应的参数一般较小,在坐标中显示如下:

可以看出,x1是房子的尺寸取值从300到3000,而x2是卧室的数量,取值从0到5,导致参数w1、w2可取值的范围是右图所示的瘦高的椭圆,这就导致了一个问题:如果在某一个初始位置开始使用梯度下降算法,虽然会不断逼近椭圆中心,但是会来回左右反弹,导致总路途很长

如果此时,我们把x1、x2做一个特征缩放,那么椭圆形就会变成圆形,这时候,就可以直接通过最短的路径到达圆的中心!如下所示:

下面研究如何进行特征缩放

第一种最简单的方法就是让每一个特征除以特征的可能最大取值

除此之外还可以做均值归一化(mean normalization)

最后一种方法叫做Z分数归一化(Z-score normalization)

当变量(特征)范围太大、太小,或者本身的值与其它的变量差距过大,我们就可以考虑使用特征的缩放

检查梯度下降是否收敛

第一种方法是自行绘制损失函数的值与迭代次数的关系图,这个曲线应该一直下降,最后趋于平稳,若某一次迭代曲线突然增长说明代码有bug或者学习率α偏大,不同的应用程序需要的迭代次数可能相差很大。

还有一种方法是自动检测方法,我们可以设置一个很小的阈值epsilon\varepsilon,当某一次迭代之后曲线降低的值小于这个\varepsilon,就说明到达了收敛,也就意味着找到了参数接近损失函数的全局最小值。

然而\varepsilon的值是很难确定的,所以一般倾向于第一种方法

学习率的选择

如下图所示,如果损失函数-迭代次数这个学习曲线出现了上下浮动或者持续增大的现象(如上面的两幅图片),说明代码存在bug或者学习率过大

如下面的第一幅图所示,如果学习率过大,可能会导致不收敛的情况。此外,如果代码中有bug,比如更新参数的时候减号写成了加号,便会导致学习曲线的增长。

常用的一种判断是bug还是学习率过大的方法是:使用一个非常小的学习率,如果成本依然不会在每次迭代中减小,说明代码存在bug,需要注意的是这个非常小的学习率并不是最终的学习率的选择,而是代码的一种调试策略。

所以,当我们运行梯度下降时,可以尝试学习速率阿尔法一系列值,在学习曲线正常的前提下,尽量增大阿尔法值:

特征工程

特征的选择对于学习算法的性能产生巨大的影响,如何设计适合算法的特征?

多项式回归

对于多项式回归,特征缩放变得更加重要

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

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

相关文章

【沐风老师】3DMAX一键书籍生成插件BookMaker使用方法详解

3DMAX书籍制作者插件BookMaker使用方法 3DMAX一键书籍生成插件BookMaker,是用于在3dMax中创建书籍的插件,可以创建高细节的3D书籍模型,具有不同的书籍类型可以选择。 【适用版本】 3dMax2012 – 2024(不仅限于此范围)…

问题记录——c++ sort 函数 和 严格弱序比较

引出 看下面这段cmp函数的定义 //按照vector第一个元素升序排序 static bool cmp(const vector<int>& a, const vector<int>& b){return a[0] < b[0]; }int eraseOverlapIntervals(vector<vector<int>>& intervals) {//按区间左端排序…

RK3399平台开发系列讲解(USB篇)USB 枚举和断开过程

🚀返回专栏总目录 文章目录 一、连接与检测二、USB设备枚举三、断开过程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢介绍 USB 枚举/断开过程。 一、连接与检测 二、USB设备枚举 USB设备枚举一

Linux:docker的Portainer部署

官网 Portainer: Container Management Software for Kubernetes and Dockerhttps://www.portainer.io/ 1.下载 portainer也是一个docker的镜像直接下载即可 docker pull portainer/portainer 2.运行 直接运行镜像即可直接使用 docker run -d -p 8000:8000 -p 9000:9000 -…

VitePress-17- 配置- appearance 的作用详解

作用说明 appearance : 是进行主题模式的配置开关&#xff0c;决定了是否启用深色模式。 可选的配置值&#xff1a; true: 默认配置&#xff0c;可以切换为深色模式&#xff1b; false: 禁用主题切换&#xff0c;只使用默认的配置&#xff1b; dark: 默认使用深色模式&#xff…

《PCI Express体系结构导读》随记 —— 第II篇 第13章 PCI总线与虚拟化技术(6)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第II篇 第13章 PCI总线与虚拟化技术&#xff08;5&#xff09; 13.2 ATS&#xff08;Address Translation Services&#xff09; 单纯使用IOMMU并不能充分发挥处理器系统的效率&#xff0c;从图13-2中可以发现&…

TIM编码器接口(编码器测速)

定时器编码器接口自动计次--------->对应手册14.3.12编码器接口模式 应用场景&#xff1a; 电机控制PWM驱动电机&#xff0c;编码器测电机速度&#xff0c;PID算法闭环控制 ------------------------------------------------------------------------------------------…

C++入门学习(三十)一维数组的三种定义方式

数组是什么&#xff1f; 数组&#xff08;Array&#xff09;是有序的元素序列。 若将有限个类型相同的变量的集合命名&#xff0c;那么这个名称为数组名。组成数组的各个变量称为数组的分量&#xff0c;也称为数组的元素&#xff0c;有时也称为下标变量。用于区分数组的各个元素…

Nuxt3+Vue3(Composition API)+TS+Vite+Ant Design Vue 搭建

最近官网搭建选择了nuxtjs&#xff0c;由于框架更新了&#xff0c;其中语法也有很多变化&#xff0c;中间遇到了一些问题点做下总结。 nuxt3官方文档地址&#xff1a;https://nuxt.com/docs/getting-started/installation 安装 在安装Nuxt3之前&#xff0c;你需要保证你的nod…

第四次作业:XTuner InternLM-Chat 个人小助手认知微调实践

参考文档&#xff1a; https://github.com/InternLM/tutorial/blob/main/xtuner/README.md https://github.com/InternLM/tutorial/blob/main/xtuner/self.md 数据准备&#xff1a; 配置文件&#xff1a; # Copyright (c) OpenMMLab. All rights reserved. import torch fr…

安装 SEED-XDS560v2 Driver.exe

安装 SEED-XDS560v2 Driver.exe References CCS 5.5.0.00077 安装目录 D:\ti\ccsv5\ SEED-XDS560v2 Driver.exe 安装目录 D:\ti\ccsv5\ccs_base References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

双机调试-vm

双机调试 环境配置基础操作内存操作读内存写内存内核&#xff08;双机调试&#xff09;读内存搜索内存读内存显示为汇编指令读写寄存器和标志位杂项断点 环境配置 虚拟机端 打开cmd bcdedit /copy {current} /d Debug bcdedit /timeout 30输入以上结果重启后进入debug系统 M…

单测的思路

文章目录 单测的定义方法的单测几种生成工具的对比生成步骤 接口的单测场景的单测总结参考 单测的定义 单元测试&#xff08;Unit Testing&#xff09;是一种软件开发中的测试方法&#xff0c;它的主要目的是确保软件中的最小可测试单元&#xff08;通常是函数、方法或类&…

【无标题】管理kvm 虚拟机

管理kvm 虚拟机 点击虚拟机 创建新的虚拟机 安装操作系统 设置root密码

[VulnHub靶机渗透] Fowsniff

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

【Linux系统化学习】缓冲区

目录 缓冲区 一个样例 现象解释 缓冲区存在的位置 缓冲区 在刚开始学习C语言的时候我们就听过缓冲区这个名词&#xff0c;很是晦涩难懂&#xff1b;在Linux下进程退出时也包含缓冲区&#xff0c;因此缓冲区到底是什么&#xff1f;有什么作用&#xff1f; 让我们先从一个小…

项目架构梳理

单点登录组件 CREATE TABLE user_info (id int(11) NOT NULL AUTO_INCREMENT COMMENT 自增主键,用户id,username varchar(30) NOT NULL COMMENT 用户姓名,password varchar(60) NOT NULL COMMENT 密码,token varchar(60) DEFAULT NULL COMMENT token,token_expire datetime DEF…

redis高级篇

为什么用单线程 开始多线程和io复用 linux连接redis其实就是一个socket过程 bigkey记录案例和生产故障 插入100w数据 不使用key*那使用什么&#xff1f;&#xff1a;scan bigkey发现删除优化策略

代码随想录day21--回溯基础

理论基础 回溯法也可以叫回溯搜索法&#xff0c;它是一种搜索的方式。我们在二叉树中也多次提到了回溯。回溯是递归的副产品&#xff0c;只要使用了递归就会有回溯&#xff0c;我们我们就可以笼统的将回溯函数称为递归函数 回溯法解决的问题 1.组合问题&#xff1a;N个数里面…

非线性一元方程求解——弦截法、牛顿迭代法(C++)

一元方程 对于一元方程&#xff0c;如果要求f(x)0的解&#xff0c;其过程大致包括如下三个问题&#xff1a; 根的存在性&#xff1a;是否有根&#xff0c;如果有&#xff0c;有几个&#xff1f;根的分布&#xff1a;根分布区间&#xff1b;求根的公式&#xff1a;如何从根的近…