Skip to content

使用Octave来学习Machine Learning(一) #16

@WeaponZhi

Description

@WeaponZhi

小之的公众号 : WeaponZhi

前言

各位小伙伴如果是通过 Coursera 上吴恩达的机器学习视频来学习的话,一定听到过 Octave 的大名了,吴恩达强烈推荐大家使用 Octave 来学习机器学习,并且用了完整的一个章节「Octave and Matlab Tutorial」来讲述 Octave 的基本操作。非常实用,也很简单,推荐想使用 Octave 的同学去学习一下。

我在使用 Octave 的过程中,最舒服的地方就是它对矩阵操作的支持非常全面,使用起来也很简单,一些看似很复杂的逻辑,用 Octave 可能一两行就可以轻松解决。我将带大家认识和入门 Octave。

此文分两篇来讲解。

什么是 Octave

Octave 是一种高层解释类编程语言。旨在解决线性和非线性的数值计算问题。Octave为GNU项目下的开源软件,Octave 语法与 Matlab 语法非常接近,可以很容易的将 Matlab 程序移植到Octave。

上面的说法不太通俗,简而言之,Octave 是一些科学计算软件,对于一些矩阵啊,一些高级的工程运算方面的工作,它比较擅长,而另一个功能类似的软件就是大名鼎鼎的 Matlab。那么我们为什么非要选择 Octave 而不选择更有名的 Matlab 呢。有以下几个原因:

  • Octave 比较轻量级,安装起来就几十兆左右,而 Matlab 安装程序得有 10 来G,基本你只装功能最少的基本版,也得有个几百兆到 1 G 的占用。

  • Octave 的语法设计上一开始是模仿 Matlab 的,语法基本类似。95 % 的 Matlab 代码可以直接在 Octave 上使用,但因为 Octave 上使用了譬如字符串「""」和 Unix 风格的注释「#」,所以 Octave 的代码不一定能在 Matlab 上使用。

  • Octave 的绘图后台是强大的 Gnuplot,输出格式很多,远远多于 Matlab,公式显示上也强过 Matlab。

  • 实际上我上面说的都是废话,使用 Octave 主要还是因为它是开源并免费的

安装 Octave

那我们就赶紧安装 Octave 吧。

Windows 下没啥好说的,去官网下载安装包,一步到位。Mac (10.9以上)的话推荐大家使用 Homebrew 来安装,Homebrew 是 Mac 下的软件包管理工具。简单介绍下步骤:

一、安装 Xcode 和 Command Line Tool

App Store 中下载 Xcode

终端输入「xcode-select —install」安装 Command Line Tool

二、安装 Xquatz,并建立软链接为 X11

终端输入

sudo ln -sf /Applications/Utilities/XQuartz.app/ /Applications/Utilities/X11.app

X11 这东西很重要,MacOS 以前的版本是可以随附 X11 的,但现在你得通过以上方法去专门的下载,这个东西和图形界面有关,可以理解为,使用 X11 可以让 Mac 兼容一些原来不能用的 Unix 软件。在后面的一篇文章中,我们还会用到它。

三、安装 Homebrew,这里我们去官网下载:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

四、使用 Homebrew 安装 Octave

brew update && brew upgrade
brew install gcc
brew install octave

Linux 系统的安装方法我就不多介绍了,使用 Linux 的同学可以自己查阅下。这里要注意下,不要下载 4.0.0 版本,这个版本有重大 Bug。

安装好 Octave 后,我们可以看到有两种方式开启 Octave,一种叫 Octave-cli,这是命令行形式打开 Octave,另一种叫 Octave-gui,这是图形化的形式,当然,我还是建议大家用命令行来编写代码。来看下这两种格式的样式:


基本的操作

打开 Octave-cli 将看到上面终端显示的画面,我们发现它的命令行的行标是 octave:1> 当你每次完成一个 Octave 代码的时候,冒号后面的数字就会增加 1 ,我们来试试

octave:1> 1+1
ans = 2
octave:2>

ans 代表的是 answer,同时 ans 也作为变量被赋值为 2 了。话说这个行标实在太丑了,我们可以通过PS1(str)来改变这个样式,str 替换为你想要的字符串样式就可以了,比如这样

octave:2> PS1('小之牛逼 >> ')
小之牛逼 >>  (光标位置)
小之牛逼  >>  (光标位置)

这样就可以用自定义的行标了。

除了加法以外,Octave 必然也支持编程语言中常用的一些计算:

小之牛逼 >> 4+5
ans = 9
小之牛逼 >> 5-4
ans = 1
小之牛逼 >> 4*5
ans = 20
小之牛逼 >> 8/4
ans = 2
小之牛逼 >> 2^6
ans = 64
小之牛逼 >> 1 == 2 % false
ans = 0
小之牛逼 >> 1 ~= 2
ans = 1
小之牛逼 >> 1 && 0 % 与运算
ans = 0
小之牛逼 >> 1 || 0 % 或运算
ans = 1
小之牛逼 >> xor(1,0) % 异或运算
ans = 1

上面的代码很简单,但仍有一些东西值得你注意一下。「%」号后面是注释,在运行的时候不会被编译进去。Octave 中的 True 和 False 是用 1 和 0 来表示的。同时,1 不等于 2 是通过 1 ~= 2 来表示的,而不是用 1 != 2,其他的和大部分编程语言差不多。

Octave 命令行中变量的使用方式和 Python 很像,比如我们给 a 赋值给 3

小之牛逼 >> a = 3
a = 3
小之牛逼 >> a = 3;

注意到当语句后面加;的时候,回车后命令将不会打印任何东西。

总结

这篇文章帮助大家认识一下 Octave ,并且介绍了安装步骤和一些基本的操作。Octave 强大的地方在它的矩阵运算和图形绘制上,我将在下篇文章详细的介绍。

那么,有些读者可能懵逼了,你之前不是在讲 Python 吗,怎么突然间切换到一门新语言了?我觉得有必要针对这个问题提前说一下。

首先,我们目前花时间学习的最终方向是什么,是机器学习,而不管是 Python 还是 Octave,它相对于机器学习本身,都只不过是一种学习和实现的辅助工具罢了。机器学习需要大量的诸如矩阵这样的计算,以及一些工程计算算法,使用 Octave 可以快速的实现这些算法,相当于一个建模的过程,等到需要具体的资源配置的时候,再通过 Python、Java 亦或是 C++ 将它实现就好了。

总而言之,借用吴教授的话来说,项目开发的时间是宝贵的,机器学习的时间也是很宝贵的。而使用 Octave 可以帮助你快速的实现学习算法,基本的思路达成之后,再通过 Python 这样的语言去具体实现它,这样你就可以节约出很多时间,而不用过多的关注编程语言本身的实现规则,Octave 相比于 Python 这样的语言,还是更简单一些。

Python 在机器学习领域,使用的很广泛,我们学习它自然不会错,而且 Python 本身的趣味性也值得你去学习,当然,这并不影响我们去使用和学习 Octave,因为,可能你看完我这两篇入门文章,就能够满足你在机器学习过程中大部分的使用需求了。


欢迎关注我的公众号

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions