当前位置: 首页 > news >正文

什么是Promise?

1.Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
2.从语法上说,promise 是一个对象,从它可以获取异步操作的的最终状态(成功或失败)。
3.Promise是一个构造函数,对外提供统一的 API,自己身上有all、reject、resolve等方法,原型上有then、catch等方法。

Promise的两个特点

Promise对象的状态不受外界影响

1)pending 初始状态

2)fulfilled 成功状态

3)rejected 失败状态

Promise 有以上三种状态,只有异步操作的结果可以决定当前是哪一种状态,其他任何操作都无法改变这个状态

Promise的状态一旦改变,就不会再变,任何时候都可以得到这个结果,状态不可以逆,只能由 pending变成fulfilled或者由pending变成rejected

使用 new 来创建一个promise对象。

Promise接受一个「函数」作为参数,该函数的两个参数分别是resolve和reject。这两个函数就是就是「回调函数」

resolve函数的作用:在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;

reject函数的作用:在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

const promise = new Promise((resolve, reject) => {// do something here ...if (success) {resolve(value); // fulfilled} else {reject(error); // rejected}
});

Promise的API

then()方法

then 方法就是把原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数。

而 Promise 的优势就在于这个链式调用。我们可以在 then 方法中继续写 Promise 对象并返回,然后继续调用 then 来进行回调操作。

可有两个参数,第一个是成功 resolve 调用的方法,第二个是失败 reject 调用的方法
下面做一个买笔写作业上交的演示,它们是层层依赖的关系,下一步的的操作需要使用上一部操作的结果。(这里使用 setTimeout 模拟异步操作),正式开发可以用 ajax 异步

   //买笔function buy(){console.log("开始买笔");var p = new Promise(function(resolve,reject){setTimeout(function(){console.log("买了笔芯");resolve("数学作业");},1000);});return p;}//写作业function work(data){console.log("开始写作业:"+data);var p = new Promise(function(resolve,reject){setTimeout(function(){console.log("写完作业");resolve("作业本");},1000);});return p;}function out(data){console.log("开始上交:"+data);var p = new Promise(function(resolve,reject){setTimeout(function(){console.log("上交完毕");resolve("得分:A");},1000);});return p;}/* 不建议使用这种方式buy().then(function(data){return work(data);}).then(function(data){return out(data);}).then(function(data){console.log(data);});*///推荐这种简化的写法buy().then(work).then(out).then(function(data){console.log(data);});

在这里插入图片描述

正式开发用ajax异步:

var promise = new Promise(function(resolve,reject){$.ajax({url:'/api/poisearch.json',method:'get',datatype:'json',success:(res) =>{resolve(res)},error:(err)=>{reject(err)}});});promise.then(function(res){return res.data}).then(function(data){return data.result;}).then(function(result){console.log(result)});//推荐使用箭头函数简写成,极大提升了代码的简洁性和可读性promise.then(res => res.data).then(data => data.result).then(result => console.log(result));

Promise构造函数的超能力

Promises写法的本质就是把异步写法写成同步写法。传入Promise构造函数的函数参数会第一优先执行,无论这个函数多么的繁复,有多少层回调,有多少秒的计数器,统统都会最优先执行。
也就是说,我们只要new了一个Promise(),那么Promise构造函数的函数参数其实是同步代码,但是.then比较特殊,.then会等到promise对象实例有了结果(resolved或者rejected),.then()里面代码才会执行。链条上的每一个.then都会等前面的promise有了结果才会执行,Promise构造函数的这个超能力是Promises系统的威力之源。

reject()方法:

上面样例我们通过 resolve 方法把 Promise 的状态置为完成态(Resolved),这时 then 方法就能捕捉到变化,并执行“成功”情况的回调。
而 reject 方法就是把 Promise 的状态置为已失败(Rejected),这时 then 方法执行“失败”情况的回调(then 方法的第二参数)

function rebuy(){console.log("开始买笔");var p = new Promise(function(resolve,reject){setTimeout(function(){console.log("买笔失败");reject("没带够钱");},1000);});return p;}function rework(data){console.log("开始写作业:"+data);var p = new Promise(function(resolve,reject){setTimeout(function(){console.log("写完作业");resolve("作业本");},1000);});return p;}rebuy().then(rework,function(data){console.log(data);});

在这里插入图片描述

catch()方法:

  1. 它可以和 then 的第二个参数一样,用来指定 reject 的回调
function rebuy(){console.log("开始买笔");var p = new Promise(function(resolve,reject){setTimeout(function(){console.log("买笔失败");reject("没带够钱");},1000);});return p;}function rework(data){console.log("开始写作业:"+data);var p = new Promise(function(resolve,reject){setTimeout(function(){console.log("写完作业");resolve("作业本");},1000);});return p;}rebuy().then(rework).catch(function(data){console.log(data);});

在这里插入图片描述

  1. 它的另一个作用是,当执行 resolve 的回调(也就是上面 then 中的第一个参数)时,如果抛出异常了(代码出错了),那么也不会报错卡死 js,而是会进到这个 catch 方法中。
function buy(){console.log("开始买笔");var p = new Promise(function(resolve,reject){setTimeout(function(){console.log("买了笔芯");resolve("数学作业");},1000);});return p;}function work(data){console.log("开始写作业:"+data);var p = new Promise(function(resolve,reject){setTimeout(function(){console.log("写完作业");resolve("作业本");},1000);});return p;}buy().then(function(data){throw new Error("买了坏的笔芯");work(data);}).catch(function(data){console.log(data);});

在这里插入图片描述

all()方法:

Promise 的 all 方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。

比如下面代码,两个个异步操作是并行执行的,等到它们都执行完后才会进到 then 里面。同时 all 会把所有异步操作的结果放进一个数组中传给 then。

        //买作业本function cutUp(){console.log('挑作业本');var p = new Promise(function(resolve, reject){ //做一些异步操作setTimeout(function(){console.log('挑好购买作业本');resolve('新的作业本');}, 1000);});return p;}//买笔function boil(){console.log('挑笔芯');var p = new Promise(function(resolve, reject){ //做一些异步操作setTimeout(function(){console.log('挑好购买笔芯');resolve('新的笔芯');}, 1000);});return p;}Promise.all([cutUp(),boil()]).then(function(results){console.log("写作业的工具都买好了");console.log(results);});

在这里插入图片描述

race()方法:
race 按字面解释,就是赛跑的意思。race 的用法与 all 一样,只不过 all 是等所有异步操作都执行完毕后才执行 then 回调。而 race 的话只要有一个异步操作执行完毕,就立刻执行 then 回调。

注意:其它没有执行完毕的异步操作仍然会继续执行,而不是停止。

这里我们将上面样例的 all 改成 race

 Promise.race([cutUp(), boil()]).then(function(results){console.log("哈哈,我先买好啦");console.log(results);});

在这里插入图片描述

race 使用场景很多。比如我们可以用 race 给某个异步请求设置超时时间,并且在超时后执行相应的操作。

请求某个图片资源

function requestImg(){var p = new Promise(function(resolve, reject){var img = new Image();img.onload = function(){resolve(img);}img.src = 'xxxxxx';});return p;}//延时函数,用于给请求计时function timeout(){var p = new Promise(function(resolve, reject){setTimeout(function(){reject('图片请求超时');}, 5000);});return p;}Promise.race([requestImg(), timeout()]).then(function(results){console.log(results);}).catch(function(reason){console.log(reason);});//上面代码 requestImg 函数异步请求一张图片,timeout 函数是一个延时 5 秒的异步操作。我们将它们一起放在 race 中赛跑。//如果 5 秒内图片请求成功那么便进入 then 方法,执行正常的流程。//如果 5 秒钟图片还未成功返回,那么则进入 catch,报“图片请求超时”的信息。

在这里插入图片描述

在工作中的应用

  1. 传统回调模式
/***第一步:找到北京的id第二步:根据北京的id -> 找到北京公司的id第三步:根据北京公司的id -> 找到北京公司的详情目的:模拟链式调用、回调地狱***/// 回调地狱// 请求第一个API: 地址在北京的公司的id$.ajax({url: 'https://www.easy-mock.com/mock/5a52256ad408383e0e3868d7/lagou/city',success (resCity) {let findCityId = resCity.filter(item => {if (item.id == 'c1') {return item}})[0].id$.ajax({//  请求第二个API: 根据上一个返回的在北京公司的id “findCityId”,找到北京公司的第一家公司的idurl: 'https://www.easy-mock.com/mock/5a52256ad408383e0e3868d7/lagou/position-list',success (resPosition) {let findPostionId = resPosition.filter(item => {if(item.cityId == findCityId) {return item}})[0].id// 请求第三个API: 根据上一个API的id(findPostionId)找到具体公司,然后返回公司详情$.ajax({url: 'https://www.easy-mock.com/mock/5a52256ad408383e0e3868d7/lagou/company',success (resCom) {let comInfo = resCom.filter(item => {if (findPostionId == item.id) {return item}})[0]console.log(comInfo)}})}})}})

promise模式

// Promise 写法// 第一步:获取城市列表const cityList = new Promise((resolve, reject) => {$.ajax({url: 'https://www.easy-mock.com/mock/5a52256ad408383e0e3868d7/lagou/city',success (res) {resolve(res)}})})// 第二步:找到城市是北京的idcityList.then(res => {let findCityId = res.filter(item => {if (item.id == 'c1') {return item}})[0].idfindCompanyId().then(res => {// 第三步(2):根据北京的id -> 找到北京公司的idlet findPostionId = res.filter(item => {if(item.cityId == findCityId) {return item}})[0].id// 第四步(2):传入公司的idcompanyInfo(findPostionId)})})// 第三步(1):根据北京的id -> 找到北京公司的idfunction findCompanyId () {let aaa = new Promise((resolve, reject) => {$.ajax({url: 'https://www.easy-mock.com/mock/5a52256ad408383e0e3868d7/lagou/position-list',success (res) {resolve(res)}})})return aaa}// 第四步:根据上一个API的id(findPostionId)找到具体公司,然后返回公司详情
function companyInfo (id) {let companyList = new Promise((resolve, reject) => {$.ajax({url: 'https://www.easy-mock.com/mock/5a52256ad408383e0e3868d7/lagou/company',success (res) {let comInfo = res.filter(item => {if (id == item.id) {return item}})[0]console.log(comInfo)}})})
}

 

 

 

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

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

TP6 session 无法设置过期时间

TP6生成后 需要开启session tp / app / middleware.php 将本注释的session初始化关闭 就可以正常使用了 TP6的session值无法直接设置过期时间 但是可以设置公共的过期时间 一样是可以使用的 tp / config / session.php 但TP6的session一旦遇到 die 或者 exit 就是导致ses…...

51单片机利用锁存器控制数码管显示年月日时分秒

数码管模块中的两片74hc573,一片锁存段码,一片锁存位码,这样才能驱动8位数码管。74hc573是锁存器,用于数码管显示时通常是采用段选、片选共用同一组并口的驱动方式。 驱动数码管需要两个信号,一个是段选信号&#xff…...

webrtc之SVC实现(十)

一、概念 SVC(可适性视频编码或可分级视频编码)是传统H.264/MPEG-4 AVC编码的延伸,可提升更大的编码弹性,并具有时间可适性(Temporal Scalability)、空间可适性(Spatial Scalability&#xff09…...

html标签之列表标签,从基础到源码统统帮你搞定

什么是HTML? HTML: ( Hypertext Markup Language )超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。 特点: 简易性:超级文本标记语言版…...

HTTP响应和HTTP Basic Auth

HTTP响应 一个典型的状态行:HTTP/1.1 201 Created。 HTTP Basic Auth 认证流程...

LeetCode 数值的整数次方

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000 示例 2: 输入&#xf…...

CentOS7.8搭建Kubernetes集群(kubeadm方式)

Kubernetes集群的架构图 Kubernetes集群的搭建方式选择 1、minikube学习体验方式 minikube与 kind 类似,minikube 是一个工具, 能让你在本地运行 Kubernetes。 minikube 在你本地的个人计算机(包括 Windows、macOS 和 Linux PC)运…...

python 继承和多态

在已有类的基础上创建新类,这其中的一种做法就是让一个类从另一个类那里将属性和方法直接继承下来,从而减少重复代码的编写。提供继承信息的我们称之为父类,也叫超类或基类;得到继承信息的我们称之为子类,也叫派生类或…...

JAVA 基础学习之 继承与方法覆写

1 继承引入​​​​​​​ 三个类都有重复的代码,可以把这共同的代码抽出去,抽出去放到另外一个类里面;下面的3个类和上面的类需要发生一点关系(继承),上面的类叫做 父类(超类,基类&…...

个性化个人主页html5模板

介绍: 个性化个人主页html5模板 网盘下载地址: http://kekewl.net/tARDuX5n02U0 图片:...

java IO教程《三》

缓冲区流讲解(Buffered) 什么是缓冲区? 缓冲流,也叫高效流,是对4个基本的File流的增强,所以也是4个流,按照数据类型分类: 字节缓冲流:BufferedInputStream,BufferedOutputStream字…...

Java SPI思想梳理

原文出处:https://zhuanlan.zhihu.com/p/28909673 为什么要使用spi 面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要…...

elementUI-Tree 树形控件的使用

elementUI-Tree 树形控件的使用 实现效果: 控件的官方使用说明 控件要求返回的数据结构 {"success": true,"code": 20000,"message": "成功","data": {"items": [{"id": "1394579386…...

CSS字体样式的使用,成功定级腾讯T3-2

开始 我大学读的是大专,在学校学的是机电一体化。临近毕业的时候选择了学习web前端技术,因为做机电实在又累工资又低,而我更喜欢坐办公室的工作,有空调吹,我很现实,就是想多赚一点钱。到现在做了两年前端的…...

Java性能优化面试题集锦,我先收藏为敬

前言 Java作为最全面的语言,国内开发者也是最多的,Java综合起来各方面都不错,在大部分场景下是一种稳健的技术选择。加上近年来安卓的推动,目前也是最流行的一种语言。 现在Java的就业市场看起来还是挺大的,而且工资…...

Unity笔记--Canvas-网格重建

参考:(五)UGUI源码分析之Rebuild(布局重建、图形重绘) 网格重建 网格重建大体包括布局重建和图形重建两部分。 public enum CanvasUpdate{Prelayout,Layout,PostLayout,PreRender,LatePreRender,MaxUpdateValue,}每一…...

实训第一天以及第二天所学记录

实训第一天以及第二天所学记录 浏览器内核 IE:Trident Firefox:Gecko Chrome:Webkit / Blink Safari:Webkit Opera:Presto / Blink 在VScode中使用注释的快捷键 按住键盘的Ctrl/ 元素 (标签 标记&…...

跨域请求

/* * Description: 配置文件 */ module.exports { publicPath: "./", devServer: { open: true, proxy: "http://106.15.179.105/api" //跨域路径 }, }; // proxy是代理的意思 // 代理跨域就是在欺骗浏览器 让浏览器认为你访问的还是 同…...

Mac os下通过Anaconda在远程服务器配置python虚拟环境

一、SSH管理软件 这里推荐一款本人正在使用的软件,Termius。Termius是一款非常好用而且漂亮的SSH客户端,能快速远程控制服务器,可以定制自己喜欢的主题.Termius不仅涵盖了Windows、Linux、OSX,还变态得支持Android和iOS&#xff…...

HDU-2084 数塔

HDU-2084 数塔 题目链接&#xff1a;添加链接描述 #include<bits/stdc.h> using namespace std; int main() {int C,N,i,j;int a[101][101],dp[101][101];cin>>C;while(C--){cin>>N;memset(dp,0,sizeof(dp));for(i1;i<N;i){for(j1;j<i;j){cin>>…...

写了那么久的String字符串,你可能根本不懂它!

本文收录于JavaStarter &#xff0c;里面有我完整的Java系列文章&#xff0c;学习或面试都可以看看 &#xff08;一&#xff09;引言 String str和new String()有什么区别&#xff1f;这个问题之前在面试中有被问到过一次&#xff0c;当时面试结束后也写了自己关于这个题目的理…...

shell与常用命令

虚拟控制台 一台计算机的输入输出设备就是一个物理的控制台 &#xff1b; 如果在一台计算机上用软件的方法实现了多个互不干扰独立工作的控制台界面&#xff0c;就是实现了多个虚拟控制台&#xff1b; Linux终端的工作方式是字符命令行方式&#xff0c;用户通过键盘输入命令进…...

VPS和云主机

VPS 虚拟专用服务器&#xff08;virtual private server&#xff09;&#xff1a;将一台服务器分割成多个虚拟专享服务器的优质服务。 实现VPS的技术分为容器技术和虚拟化技术。在容器或虚拟机中&#xff0c;每个VPS都可分配独立公网IP地址、独立操作系统、实现不同VPS间磁盘…...

程序员,你有危机感吗?

第一天上班&#xff0c;领导找我说&#xff0c;你的人都划入各个事业部&#xff0c;管理权也都放在各事业部&#xff0c;于是我就成了一个光杆司令&#xff0c;后续未知。小组是个技术团队&#xff0c;现有10人左右&#xff0c;承接着公司各个事业部的技术开发任务。公司业务人…...

常见排序算法之插入排序和选择排序

插入排序 1.直接插入排序 结合生活中的例子&#xff0c;插入排序令联想到捏扑克牌的过程&#xff0c;假设只有一个人捏牌&#xff0c;未经排序的所有扑克牌是没有排序的序列&#xff0c;每张扑克牌是序列中的一个数。每次从未经排序的扑克牌中取出一张牌和已经排好序列的扑克牌…...

项目计划书、规划文档模板

项目计划书、规划文档模板 最近通过项目实践经历&#xff0c;整理出的一套项目计划书&#xff08;仅供自己参考梳理思路使用&#xff09;有喜欢的文末加VX辛苦码字如有转载请标明出处谢谢&#xff01;——木研 更新的简版项目规划文档&#xff01; 原版文件请vx &#xff1a;…...

图像自编码器,在UCF101以及---数据集上已进行验证效果较好

图片自编码器(自定义数据加载器+VGG16+transposeVGG16) vGG16自编码器 原图 生成图 // An highlighted block # -*- coding: utf-8 -*- """ Created on Wed Apr...

关于mysql的相关内容(2)

1 数据添加 INSERT [INTO] 表名 [(字段名1,…)] {VALUES | VALUE} ({expr | DEFAULT},…),(…),… 说明&#xff1a;主键列是自动增长&#xff0c;但是在全列插入时需要占位&#xff0c;通常使用空值(0或者null) ; 字段默认值 default 来占位&#xff0c;插入成功后以实际数据…...

html标签之列表标签,从基础到源码统统帮你搞定

什么是HTML? HTML: ( Hypertext Markup Language )超文本标记语言&#xff0c;是一种标识性的语言。它包括一系列标签&#xff0e;通过这些标签可以将网络上的文档格式统一&#xff0c;使分散的Internet资源连接为一个逻辑整体。 特点: 简易性&#xff1a;超级文本标记语言版…...

HTML常用的五种标签,算法太TM重要了

前言 最近在准备面试&#xff0c;然后复习下之前写过的项目&#xff0c;书籍&#xff0c;笔记&#xff0c;文章。一看很多知识点都没有印象&#xff0c;最可拍的是连自己为了防止忘记写的文章竟然都感觉不是自己写的。有些开始怀疑人生了。 好了&#xff0c;废话少说&#xf…...

手机端html返回顶部,移动端H5页面返回顶部按钮无效问题的解决

一直都是在PC端写返回顶部的按钮&#xff0c;今天的项目是移动端&#xff0c;页面内容比较多&#xff0c;也有滚动顶部的功能&#xff0c;于是一开始用了原生的的写法&#xff0c;没有用&#xff0c;经过调试&#xff0c;滚动时获取不到滚动的高度。接着又换了一个gototop.js插…...

快速返回顶部

1.css .backToTop {width: 0.84rem;height: 0.84rem;position: fixed; right: 4%; bottom: 1.2rem; display: none;z-index: 999;background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAABWCAMAAABmfUH4AAAAeFBMVEWZmZkAAAAAAAAPj5OTk4AAAAAAAAAAAAAAAA...

html锚点怎么返回顶部,滑动效果的返回顶部锚点按钮

‘TOP’置顶链接&#xff0c;说的通俗一点就是‘返回顶部的链接’&#xff0c;‘go to top’一般都放在页面的底部&#xff0c;它可以快速返回页面顶部&#xff0c;以节省用户浏览页面的时间。 它主要的应用场景是当你有一个很长的网页内容时&#xff0c;您通常要 把 ‘TOP’锚…...

js练习总结

1.div返回顶部 当页面特别长的时候&#xff0c;用户想回到页面顶部&#xff0c;必须得滚动好几次滚动键才能回到顶部&#xff0c;如果在页面右下角有个“返回顶部”的按钮&#xff0c;用户点击一下&#xff0c;就可以回到顶部&#xff0c;对于用户来说&#xff0c;是一个比较好…...

返回顶部的几种方案

【前言】 本文简单说下常见的几种返回顶部的方案 【主体】 &#xff08;1&#xff09;锚点 使用锚点链接是一种简单的返回顶部的功能实现。该实现主要在页面顶部放置一个指定名称的锚点链接&#xff0c;然后我们在页面下方放置一个返回到该锚点的链接&#xff0c;用户点击该链接…...

台湾大学林轩田机器学习技法课程学习笔记1 -- Linear Support Vector Machine

红色石头的个人网站&#xff1a;redstonewill.com 关于台湾大学林轩田老师的《机器学习基石》课程&#xff0c;我们已经总结了16节课的笔记。这里附上基石第一节课的博客地址&#xff1a; 台湾大学林轩田机器学习基石课程学习笔记1 – The Learning Problem 本系列同样分成16…...

台湾大学林轩田机器学习技法课程学习笔记2 -- Dual Support Vector Machine

红色石头的个人网站&#xff1a;redstonewill.com 上节课我们主要介绍了线性支持向量机&#xff08;Linear Support Vector Machine&#xff09;。Linear SVM的目标是找出最“胖”的分割线进行正负类的分离&#xff0c;方法是使用二次规划来求出分类线。本节课将从另一个方面入…...

台湾大学林轩田机器学习基石课程学习笔记8 -- Noise and Error

红色石头的个人网站&#xff1a;redstonewill.com 上一节课&#xff0c;我们主要介绍了VC Dimension的概念。如果Hypotheses set的VC Dimension是有限的&#xff0c;且有足够多N的资料&#xff0c;同时能够找到一个hypothesis使它的Ein≈0Ein≈0&#xff0c;那么就能说明机器学…...

台湾大学林轩田机器学习基石课程学习笔记5 -- Training versus Testing

红色石头的个人网站&#xff1a;redstonewill.com 上节课&#xff0c;我们主要介绍了机器学习的可行性。首先&#xff0c;由NFL定理可知&#xff0c;机器学习貌似是不可行的。但是&#xff0c;随后引入了统计学知识&#xff0c;如果样本数据足够大&#xff0c;且hypothesis个数…...

台湾大学林轩田机器学习基石课程学习笔记10 -- Logistic Regression

红色石头的个人网站&#xff1a;redstonewill.com 上一节课&#xff0c;我们介绍了Linear Regression线性回归&#xff0c;以及用平方错误来寻找最佳的权重向量w&#xff0c;获得最好的线性预测。本节课将介绍Logistic Regression逻辑回归问题。 一、Logistic Regression Prob…...

台湾大学林轩田机器学习基石课程学习笔记6 -- Theory of Generalization

红色石头的个人网站&#xff1a;redstonewill.com 上一节课&#xff0c;我们主要探讨了当M的数值大小对机器学习的影响。如果M很大&#xff0c;那么就不能保证机器学习有很好的泛化能力&#xff0c;所以问题转换为验证M有限&#xff0c;即最好是按照多项式成长。然后通过引入了…...

台湾大学林轩田机器学习基石课程学习笔记11 -- Linear Models for Classification

红色石头的个人网站&#xff1a;redstonewill.com 上一节课&#xff0c;我们介绍了Logistic Regression问题&#xff0c;建立cross-entropy error&#xff0c;并提出使用梯度下降算法gradient descnt来获得最好的logistic hypothesis。本节课继续介绍使用线性模型来解决分类问题…...

台湾大学郭彦甫MATLAB课程PPT课件

下载地址在这&#xff1a;https://download.csdn.net/download/yutong5818/10376466...

台湾大学深度学习课程 学习笔记 lecture4 Word Embeddings

以下内容和图片均来自台湾大学深度学习课程。 课程地址&#xff1a;https://www.csie.ntu.edu.tw/~yvchen/f106-adl/syllabus.html 在之前 lecture2-2 Word Representation 的课程中简单讲解了 Word 处理的传统方法。通过传统方法的局限性引入新的方法 Word Embeddings&#x…...

台湾大学林轩田机器学习基石课程学习笔记12 -- Nonlinear Transformation

红色石头的个人网站&#xff1a;redstonewill.com 上一节课&#xff0c;我们介绍了分类问题的三种线性模型&#xff0c;可以用来解决binary classification和multiclass classification问题。本节课主要介绍非线性的模型来解决分类问题。 一、Quadratic Hypothesis 之前介绍的…...

台湾大学深度学习课程 学习笔记 lecture1-2 Neural Network Basics

以下内容和图片均来自台湾大学深度学习课程。 课程地址&#xff1a;https://www.csie.ntu.edu.tw/~yvchen/f106-adl/syllabus.html 本节课主要讲了三个问题&#xff1a; 1. What is the model? (function hypothesis set) 2. What does a “good” function mean? 3. How…...

台湾大学林轩田机器学习技法课程学习笔记8 -- Adaptive Boosting

红色石头的个人网站&#xff1a;redstonewill.com 上节课我们主要开始介绍Aggregation Models&#xff0c;目的是将不同的hypothesis得到的gtgt集合起来&#xff0c;利用集体智慧得到更好的预测模型G。首先我们介绍了Blending&#xff0c;blending是将已存在的所有gtgt结合起来…...

台湾大学林轩田机器学习基石课程学习笔记4 -- Feasibility of Learning

红色石头的个人网站&#xff1a;redstonewill.com 上节课&#xff0c;我们主要介绍了根据不同的设定&#xff0c;机器学习可以分为不同的类型。其中&#xff0c;监督式学习中的二元分类和回归分析是最常见的也是最重要的机器学习问题。本节课&#xff0c;我们将介绍机器学习的可…...

台湾大学深度学习课程 学习笔记 lecture2-2 Word Representation

以下内容和图片均来自台湾大学深度学习课程。 课程地址&#xff1a;https://www.csie.ntu.edu.tw/~yvchen/f106-adl/syllabus.html 函数“f”的作用 “Meaning”的含义? 怎样表示文字上的语义? 本节课主要讲了两种方法,分别如下:Knowledge-based representation这个是传统…...

台湾大学林轩田机器学习基石课程学习笔记13 -- Hazard of Overfitting

红色石头的个人网站&#xff1a;redstonewill.com 上节课我们主要介绍了非线性分类模型&#xff0c;通过非线性变换&#xff0c;将非线性模型映射到另一个空间&#xff0c;转换为线性模型&#xff0c;再来进行分类&#xff0c;分析了非线性变换可能会使计算复杂度增加。本节课介…...