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

news2024/12/23 4:47:54

目录

前言

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.coloradmin.cn/o/1453112.html

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

相关文章

【力扣hot100】刷题笔记Day5

前言 回学校了,荒废了半天之后打算奋发图强猛猛刷题,找实习!赚钱!! 560. 和为 K 的子数组 - 力扣(LeetCode) 前缀法 哈希表 这个题解解释比官方清晰,截个图方便看,另一…

【Java】文件操作与IO

文件操作与IO Java中操作文件针对文件系统的操作File类概述字段构造方法方法及示例 文件内容的读写 —— 数据流Java提供的 “流” API文件流读写文件内容InputStream 示例读文件示例1:将文件完全读完的两种方式示例二:读取汉字 写文件谈谈 OutputStream…

Practical User Research for Enterprise UX

2.1 Why It’s Hard to Get Support for Research in Enterprises 2.1.1 Time and Budget Instead of answering the question “What dowe gain if we do this research?”, ask instead “What do we stand to lose if we don’t do the research?” 2.1.2 Legacy Thinkin…

HMI界面:感官与体验俱佳的智能家居界面分享

Hello,我是大千UI工场,本期分享HMI人机交互界面在智能家居领域的案例,关注大千,学习N多UI干货,有设计需求,可以联络。 设计感官和体验俱佳智能家居的UI界面时,可以考虑以下几个方面:…

算法中关于数学的题目练习

算法中关于数学的题目练习 1、买不到的数目题目信息思路题解 2、蚂蚁感冒题目信息思路题解 3、饮料换购题目信息思路题解 1、买不到的数目 题目信息 思路 数学结论(证明略): p、q为正整数且互质,不能由p、q凑出来的最大的数为(p…

DNS服务正反解析

1.正向解析 1.配置基本 1.1防火墙配置 二者都要关闭 setenforce 0 systemctl stop firewalld #关闭防火墙 yum install bind -y #下载bind软件 客户端可以不用下 1.2服务端配置静态ip, ip a 查看网卡 nmcli c modify ens33 ipv4.method manual ipv4.addresses …

使用PaddleNLP UIE模型提取上市公司PDF公告关键信息

项目地址:使用PaddleNLP UIE模型抽取PDF版上市公司公告 - 飞桨AI Studio星河社区 (baidu.com) 背景介绍 本项目将演示如何通过PDFPlumber库和PaddleNLP UIE模型,抽取公告中的相关信息。本次任务的PDF内容是破产清算的相关公告,目标是获取受理…

第三百五十回

文章目录 1. 概要介绍2. 获取方法2.1 获取语言2.2 获取地址 3.示例代码3. 内容总结 我们在上一章回中介绍了"给geolocator插件提交问题"相关的内容,本章回中将介绍如何获取系统语言.闲话休提,让我们一起Talk Flutter吧。 1. 概要介绍 我们在本…

机试复习-4

1.string类 string类型和数值的转换 ※数值→字符串 to_string函数 //具体做法 int i1234; string gto_string(i);//这样就转成字符串1234了 //下面就是字符串转为数字&#xff0c;类似下面还有stof,stoi,stod string d "1289347647"; int j stoi(d); cout <…

Halcon 相机标定

文章目录 算子单相机标定单相机标定畸变的矫正 算子 gen_caltab 生成标定文件 gen_caltab(::XNum,YNum,MarkDist,DiameterRatio,CalTabDescrFile,CalTabPSFile :) 算子来制作一个标定板XNum 每行黑色标志圆点的数量。YNum 每列黑色标志圆点的数…

RAG近期发展综述

RAG简介 RAG全称为检索增强生成技术&#xff0c;其主要可以分为三部分&#xff0c;索引&#xff08;构建&#xff09;、检索以及生成&#xff0c;各个部分又可以进一步细分。 索引 索引阶段主要是构建知识库的过程&#xff0c;这里的知识库是泛指&#xff0c;包括了向量数据…

JAVA之HashMap详解

HashMap 1. 设计原理 HashMap 基于哈希表的 Map 接口实现&#xff0c;是以 key-value 存储形式存在&#xff0c;即主要用来存放键值对。HashMap 的实现不是同步的&#xff0c;这意味着它不是线程安全的。它的 key、value 都可以为 null&#xff0c;此外&#xff0c;HashMap 中…

sql语句学习(一)--查询

【有道云笔记】基本sql语句2—查询基础 数据库表结构 DROP TABLE IF EXISTS class; CREATE TABLE class (id int(11) NOT NULL AUTO_INCREMENT,class_num varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 班级号,class_name varchar(255) CHARACTE…

飞天使-k8s知识点21-kubernetes实操6-daemonset

文章目录 daemonsetservice endpoint pod 之间的关系service基于Service访问外部服务 daemonset DaemonSet 是 Kubernetes 中的一种资源对象&#xff0c;它确保在集群中的每个节点上都运行一个 Pod 的副本。这对于运行集群级别的守护进程&#xff08;例如日志收集器、监控代理…

Leetcode - 周赛384

目录 一&#xff0c;3033. 修改矩阵 二&#xff0c;3035. 回文字符串的最大数量 三&#xff0c;3036. 匹配模式数组的子数组数目 II 一&#xff0c;3033. 修改矩阵 这道题直接暴力求解&#xff0c;先算出每一列的最大值&#xff0c;再将所有为-1的区域替换成该列的最大值&am…

mysql 2-17

UNION关键字和UNION ALL 自然连接 USING使用 函数 单行函数 基本函数 三角函数 指数和对数 进制间的转换 字符串函数 时间和日期函数 计算日期和时间的函数 日期的格式化和解析 流程控制函数

输入输出自定义映射矩阵(数据结构树)

输出自定义FC其它算法实现,可以参考下面文章: https://rxxw-control.blog.csdn.net/article/details/125994252https://rxxw-control.blog.csdn.net/article/details/125994252下面我们看下我们的控制要求。在学习本篇博客之前大家可以熟悉下数据结构图的概念和存储知识,链…

【复合多尺度熵与特征提取】一文看懂“复合多尺度熵”——复合多尺度样本熵、模糊熵、排列熵、包络熵、功率谱熵、能量熵、奇异谱熵及其MATLAB实现

在上一篇文章中&#xff0c;我们讲了多尺度熵的原理及MATLAB实现。 本篇要讲的是多尺度熵的一个改进特征提取方法——复合多尺度熵&#xff08;Composite Multiscale Entropy, CMSE&#xff09;。复合多尺度熵方法不仅继承了多尺度熵在揭示时间序列多尺度复杂性方面的优势&…

【Python--Web应用框架大比较】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; Django Django太重了&#xff0c;除了web框架&#xff0c;自带ORM和模板引擎&#xff0c;灵活和自由度不…

定时器外部时钟

一、相较于内部时钟中断改动&#xff1a; 1.Timer.c RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin GPIO_Pin_…