本文是吴恩达《机器学习》视频笔记第32篇,对应第2周第14个视频。
“Octave Tutorial——Vectorization”,是第二周内容的最后一次视频。
01
—
笔记
引言
几乎所有的语言,包括Matlab、Python、Java,甚至C++、C,都会有一些能够进行线性代数运算的包、库等等,而这些包或者库都是由一些具有博士、硕士学位的数值分析的专家开发的,非常优秀。
当进行机器学习编码的时候,尽管好好的调用它们就好了。而直接调用这些线性代数的方法实现一些矩阵或向量运算会使一些特定的数学运算变得更高效。
先看一个简单的例子,这样的一个函数,
我们知道上图中的函数,是我们进行线性回归分析的一种假设的模型函数。
那,这个函数如果使用向量形式表示,就变成了:
上图左边是非向量化的实现代码,而右边是向量化的实现代码。很显然右边的代码更简单,而且Octave内置的一些向量运算实现方法可能比我们自己写的for循环更高效。
再看一个稍微复杂一点的例子,梯度下降法。
梯度下降法的更新算法如下图:
我们不停地更新这些\theta,找到更合适的那组\theta,使得Cost最小。
那有没有办法用向量来实现这个算法呢?
上图中那三个式子,实际上可以用一个向量式子来表示(图中红色矩形框内):
这次视频,一句话总结就是:线性代数在机器学习中非常基础、非常重要。
机器学习的很多东西都是用矩阵、向量来表示的,向量是机器学习中的一个基本单位,在计划学习Machine Learning之前一定要翻一翻线性代数的教材,而且要常常翻看。
02
—
视频