本文是吴恩达《机器学习》视频笔记第27篇,对应第2周第9个视频。
“Octave Tutorial——Basic operations”
01
—
笔记
前面学了很多的机器学习的理论知识了,但是纸上得来终觉浅,绝知此事要躬行,接下来几个视频一起来学习一些机器学习编程工具Octave的一些基础编码知识。
吴老师在以往的机器学习教学中,尝试过很多种编码语言来进行实验,包括C++、Java、Python的Numpy,以及Octave。结果,吴老师发现使用Octave一类的高级语言的时候,学生能高效的学习机器学习的算法、更快速的写出算法原型。
在硅谷的好多需要实际使用机器学习的公司中,他们在算法原型构建阶段都是使用Octave一类的高级语言。等到算法固化,需要生产部署的时候才使用C++、Java来进行重写以提高执行效率。
时间分两种,一种是我们开发人员开发合适的机器学习算法的时间;一种是机器学习算法在解决实际问题时耗费的计算机计算时间。第一种时间,我们通过Octave一类的语言快速构建算法来节约;后一种时间,我们通过C++、Java一类的高效语言重写固化好的机器学习算法来节约。
机器学习领域,常见的编程语言有:Matlab、Octave、Python、Numpy、R。Matlab很好,但是很贵,对我们中国的研究人员还存在被禁用的危险;而Python、R一类的对非计算机专业的同学来说不是特别友好。所以呢,最后Octave成为非常不错的一种选择。
接下来介绍一些基础的Octave操作,更详细的可以去Octave的官网看文档。
在桌面上找到快捷方式“GNU Octave (CLI)”,以命令行的方式启动Octave。
做一些加、减、乘、除、幂指数的运算,你会发现和latex里面写数学公式差不多。也不怎么需要考虑数据类型转换啊、地板除啊之类恼人的计算机语法,看上去非常友善。
还可以做一些逻辑运算,比如:
从上面的图,你看出来了吧。判断两个数是否不等于,用的是"~=", 而不是其它语言常用的"!="。另外,注释符号是"%"。用过matlab的同学可能也发现了,它的语法几乎就是照搬Matlab,非常友好。
可以使用”PS1('>>')"命令将Octave前面提示去掉,如下图:
还可以定义变量,像下面这样:
上图中注意,“a=3;",这行命令后面加入了一个分号";",然后Octave下面就不再打印结果出来了。
还可以定义字符串变量,还可以定义一个bool型变量,分别如下图的b、c。
还有类似于Python语言中print函数的存在,disp()函数,disp的使用也是相当的灵活。
上图最后一行的disp中sprintf函数的语法和c语言的语法是不是很像?所以从c语言过渡过来也是很丝滑。
定义一个3*2的矩阵:
定义中的分号就是矩阵的换行。
定义向量和定义矩阵本质上是一样的,下面这样是定义一个行向量:
如果定义列向量呢?
还有一种比较有意思的向量的定义方法,下图中的办法可以定义一个从1开始到2结束间隔(步长)为0.1的向量。
或者省略步长:
还可以定义全为1的矩阵:
可以灵活使用ones(m, n)
当然,类似的办法可以用函数定义全0的矩阵,或者随机数矩阵。
灵活使用上面的这些基础操作,可以得到一些比较复杂的数。比如按照公式得到一组随机数,这个随机数如果用randn函数,它们服从高斯分布。
上图得到一个1行10000列的随机数向量,使用hist(w)函数画一下直方图看看:
还可以让直方图的竖条来的更多一点。
定义单位阵的函数是eye().
Octave的帮助也是很方便的,直接使用help函数即可。
以上就是Octave基础的快速介绍,从下次视频开始将会讲解如何使用Octave来处理数据。