5.1 向量化

参考视频: 5 - 6 - Vectorization (14 min).mkv

在这段视频中,我将介绍有关向量化的内容,无论你是用 Octave,还是别的语言,比如MATLAB 或者你正在用 Python、NumPy 或 Java C C++,所有这些语言都具有各种线性代数库,这些库文件都是内置的,容易阅读和获取,他们通常写得很好,已经经过高度优化,通常是数值计算方面的博士或者专业人士开发的。

而当你实现机器学习算法时,如果你能好好利用这些线性代数库,或者数值线性代数库, 并联合调用它们,而不是自己去做那些函数库可以做的事情。如果是这样的话,那么通常你会发现:首先,这样更有效,也就是说运行速度更快,并且更好地利用你的计算机里可能有的一些并行硬件系统等等;其次,这也意味着你可以用更少的代码来实现你需要的功能。因此,实现的方式更简单,代码出现问题的有可能性也就越小。

举个具体的例子:与其自己写代码做矩阵乘法。如果你只在 Octave 中输入 a 乘以 b 就是一个非常有效的两个矩阵相乘的程序。有很多例子可以说明,如果你用合适的向量化方法来实现,你就会有一个简单得多,也有效得多的代码。

让我们来看一些例子:这是一个常见的线性回归假设函数:

如果你想要计算 hθ(x),注意到右边是求和,那么你可以自己计算 j =0 到 j = n 的和。但换另一种方式来想想,把 hθ(x) 看作θTx,那么你就可以写成两个向量的内积,其中 θ 就是θ0、θ1、θ2,如果你有两个特征量,如果 n =2,并且如果你把 x 看作 x0、x1、x2,这两种思考角度,会给你两种不同的实现方式。

比如说,这是未向量化的代码实现方式:

计算 hθ(x)是未向量化的,我们可能首先要初始化变量 prediction 的值为 0.0,而这个变量 prediction 的最终结果就是 hθ(x),然后我要用一个 for 循环,j 取值 0 到 n+1,变量prediction 每次就通过自身加上 theta(j) 乘以 x(j) 更新值,这个就是算法的代码实现。

顺便我要提醒一下,这里的向量我用的下标是 0,所以我有 θ0、θ1、θ2,但因为 MATLAB 的下标从 1 开始,在 MATLAB 中 θ0,我们可能会用 theta(1) 来表示,这第二个元素最后就会变成,theta(2) 而第三个元素,最终可能就用theta(3) 表示,因为 MATLAB 中的下标从 1 开始,这就是为什么这里我的 for 循环,j 取值从 1 直到 n+1,而不是从 0 到 n。

这是一个未向量化的代码实现方式,我们用一个 for 循环对 n 个元素进行加和。作为比较,接下来是向量化的代码实现:

你把 x 和 θ 看做向量,而你只需要令变量 prediction 等于 theta 转置乘以 x,你就可以这样计算。与其写所有这些 for 循环的代码,你只需要一行代码,这行代码就是利用Octave 的高度优化的数值,线性代数算法来计算两个向量 θ 以及 x 的内积,这样向量化的实现更简单,它运行起来也将更加高效。

这就是 Octave 所做的而向量化的方法,在其他编程语言中同样可以实现。让我们来看一个 C++ 的例子:

与此相反,使用较好的 C++ 数值线性代数库,你可以写出像右边这样的代码,因此取决于你的数值线性代数库的内容。你只需要在 C++ 中将两个向量相乘,根据你所使用的数值和线性代数库的使用细节的不同,你最终使用的代码表达方式可能会有些许不同,但是通过一个库来做内积,你可以得到一段更简单、更有效的代码。

现在,让我们来看一个更为复杂的例子,这是线性回归算法梯度下降的更新规则:

我们用这条规则对 j 等于 0、1、2 等等的所有值,更新对象 θj,我只是用 θ0、θ1、θ2 来写方程,假设我们有两个特征量,所以 n 等于 2,这些都是我们需要对 θ0、θ1、θ2 进行更新,这些都应该是同步更新,我们用一个向量化的代码实现,这里是和之前相同的三个方程,只不过写得小一点而已。

你可以想象实现这三个方程的方式之一,就是用一个 for 循环,就是让 j 等于 0、等于1、等于 2,来更新 θj。

但让我们用向量化的方式来实现,看看我们是否能够有一个更简单的方法。基本上用三

行代码或者一个 for 循环,一次实现这三个方程。

让我们来看看怎样能用这三步,并将它们压缩成一行向量化的代码来实现。做法如下: 我打算把θ 看做一个向量,然后我用 θ-α 乘以某个别的向量δ 来更新θ。

这里的 δ 等于

让我解释一下是怎么回事:我要把θ 看作一个向量,有一个 n+1 维向量,α 是一个实数,δ 在这里是一个向量。

所以这个减法运算是一个向量减法,因为 α 乘以 δ是一个向量,所以 θ 就是 θ- αδ 得到的向量。

那么什么是向量 δ 呢 ?

x(i)是一个向量

你就会得到这些不同的式子,然后作加和。

实际上,在以前的一个小测验,如果你要解这个方程,我们说过为了向量化这段代码, 我们会令 u = 2v +5w 因此,我们说向量 u 等于 2 乘以向量 v 加上 5 乘以向量 w。用这个例子说明,如何对不同的向量进行相加,这里的求和是同样的道理。

这就是为什么我们能够向量化地实现线性回归。

所以,我希望步骤是有逻辑的。请务必看视频,并且保证你确实能理解它。如果你实在不能理解它们数学上等价的原因,你就直接实现这个算法,也是能得到正确答案的。所以即使你没有完全理解为何是等价的,如果只是实现这种算法,你仍然能实现线性回归算法。如果你能弄清楚为什么这两个步骤是等价的,那我希望你可以对向量化有一个更好的理解,如果你在实现线性回归的时候,使用一个或两个以上的特征量。

有时我们使用几十或几百个特征量来计算线性归回,当你使用向量化地实现线性回归, 通常运行速度就会比你以前用你的 for 循环快的多,也就是自己写代码更新θ0、θ1、θ2。

因此使用向量化实现方式,你应该是能够得到一个高效得多的线性回归算法。而当你向量化我们将在之后的课程里面学到的算法,这会是一个很好的技巧,无论是对于 Octave 或者一些其他的语言 如 C++、Java 来让你的代码运行得更高效。

5.2 工作和提交的编程练习

参考视频: 5 - 7 - Working on and Submitting Programming Exercises (4 min).mkv

在这段视频中,我想很快地介绍一下这门课程做作业的流程,以及如何使用作业提交系统。这个提交系统可以即时检验你的机器学习程序答案是否正确。

在 'ml-class-ex1' 目录中,我们提供了大量的文件,其中有一些需要由你自己来编辑,因此第一个文件应该符合编程练习中 pdf 文件的要求,其中一个我们要求你编写的文件是warmUpExercise.m 这个文件,这个文件只是为了确保你熟悉提交系统。

你需要做的就是提交一个 5×5 的矩阵,就是 A = eye(5)

这将修改该函数以产生 5×5 的单位矩阵,现在 warmUpExercise() 这个方程就实现了返回 5x5 的单位矩阵,将它保存一下,所以我已经完成了作业的第一部分。

现在回到我的 Octave 窗口,现在来到我的目录 C:甥敳獲angDesktopml-class-ex1

如果我想确保我已经实现了程序 像这样输入'warmUpExercise()' 好了它返回了我们用刚才写的代码创建的一个 5x5 的单位矩阵

我现在可以按如下步骤提交代码 我要在这里目录下键入 submit()

我要提交第一部分 所以我选择输入'1'。

这时它问我的电子邮件地址,我们打开课程网站,输入用户名密码。

按下回车键,它连接到服务器,并将其提交,然后它就会立刻告诉你:恭喜您!已成功完成作业 1 第 1 部分。这就确认了你已经做对了第一部分练习,如果你提交的答案不正确,那么它会给你一条消息,说明你没有完全答对,您还可以继续使用此提交密码,也可以生成新密码。你的密码是否会显示出来 取决于你使用的操作系统。

这就是提交作业的方法,你完成家庭作业的时候,我希望你都能答对。

欢迎关注我的公众号LhWorld,不仅为你推荐最新的博文,还有更多惊喜和资源在等着你!一起学习共同进步!

向量化计算cell_吴恩达老师课程笔记系列第24节-Octave教程之向量化和作业(6)相关推荐

  1. c#怎么拟合函数得到参数_吴恩达老师课程笔记系列第32节 -正则化之代价函数(2)...

    第32节 -正则化之代价函数(2) 参考视频: 7 - 2 - Cost Function (10 min).mkv 上面的回归问题中如果我们的模型是: 我们可以从之前的事例中看出,正是那些高次项导致 ...

  2. 无监督学习与有监督学习的本质区别是什么_吴恩达老师课程笔记系列第三节-无监督学习定义...

    第三节-无监督学习定义 我们将介绍第二种主要的机器学习问题.叫做无监督学习. 上个课程中,已经介绍了监督学习.回想当时的数据集,如图表所示,这个数据集中每条数据都已经标明是阴性或阳性,即是良性或恶性肿 ...

  3. 吴恩达机器学习课程笔记一

    吴恩达机器学习课程笔记 前言 监督学习---`Supervised learning` 无监督学习---`Unsupervised learning` 聚类 异常检测 降维 增强学习---`Reinf ...

  4. Github标星24300!吴恩达机器学习课程笔记.pdf

    个人认为:吴恩达老师的机器学习课程,是初学者入门机器学习的最好的课程!我们整理了笔记(336页),复现的Python代码等资源,文末提供下载. 课程简介 课程地址:https://www.course ...

  5. 干货|机器学习零基础?不要怕,吴恩达机器学习课程笔记2-多元线性回归

    吴恩达Coursera机器学习课系列笔记 课程笔记|吴恩达Coursera机器学习 Week1 笔记-机器学习基础 1 Linear Regression with Multiple Variable ...

  6. 【CV】吴恩达机器学习课程笔记第17章

    本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片 机器学习 | Coursera 吴恩达机器学习系列课程_bilibili 目录 17 大规模机器学习 17-1 学习大数据集 17-2 随 ...

  7. 【CV】吴恩达机器学习课程笔记第16章

    本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片 机器学习 | Coursera 吴恩达机器学习系列课程_bilibili 目录 16 推荐系统 16-1 问题规划 16-2 基于内容的推 ...

  8. 吴恩达机器学习课程笔记(英文授课) Lv.1 新手村(回归)

    目录 1-1机器学习的相关名词 1-2 什么是机器学习? 1.definition 定义 2.主要的机器学习算法的分类 1-3有监督学习及常用算法 1.定义 2.两种数据类型补充:categorica ...

  9. 【CV】吴恩达机器学习课程笔记第10章

    本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片 机器学习 | Coursera 吴恩达机器学习系列课程_bilibili 目录 10 应用机器学习的建议 10-1 决定下一步做什么 10 ...

最新文章

  1. Python3 MySQL 数据库连接 - PyMySQL 驱动
  2. “龙井”开箱评测 |Alibaba Dragonwell 新手上路指南
  3. 服务认证暴力破解工具Crowbar
  4. 设计模式之一:单例模式
  5. 在linux系统中 用于配置和显示,在Linux系统中使用sway设置多个显示器/监视器
  6. Yinchuan-B The Great Wall
  7. 2019.01.28【NOIP普及组】模拟赛C组总结
  8. 深入JS正则先行断言
  9. 手机滤镜怎么移植到ps上_一分钟教你电脑端Lr、Ps滤镜预设/手机端Lr预设如何导入【图文教程】...
  10. centeros7安装mysql
  11. 属马的人2021年害太岁运势预测
  12. ....................................thinkpad E480 用户初体验..............................
  13. httpclient4 post提交请求乱码问题解决
  14. Vue项目实现web端飘窗
  15. 谈谈《人生七年》这部纪录片
  16. C++迷宫最短路径问题BFS
  17. 综合案例—Spark实时交易数据统计
  18. c语言字符类型中int表示什么,int表示什么数据类型
  19. 《改变心理学的40项研究》第一章 生物学与人类行为
  20. 算法系列之十八:用天文方法计算二十四节气(下)

热门文章

  1. InputStreamReader和OutputStreamWriter
  2. 烟台大学计算机学院宋宜斌教授,宋宜斌
  3. 三维模型转换html,一种三维网格模型视图转换方法与流程
  4. r语言 fourth entry_第四篇 语言学习的自然顺序
  5. d. powerful ksenia_DEBON D.D |这才是每个女人应该拥有的
  6. Vue中判断对象属性是否存在
  7. Java多线程共享变量控制
  8. 「小程序JAVA实战」小程序的留言和评价功能(70)
  9. Hyperledger Fabric服务器配置及修改Docker容器卷宗存储根目录/位置
  10. 在不改变链表的情况下从尾到头打印连表