使用 Octave 来学习 Machine Learning(一)

阅读本篇大概需要 5 分钟。

前言

各位小伙伴如果是通过 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,因为,可能你看完我这两篇入门文章,就能够满足你在机器学习过程中大部分的使用需求了。

原文发布于微信公众号 - WeaponZhi(WeaponZhi)

原文发表时间:2017-12-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏瓜大三哥

FPGA内部资源介绍

2612
来自专栏linux驱动个人学习

GPU与CPU的区别

1473
来自专栏Sorrower的专栏

GPU编程(二): GPU架构了解一下!

http://html.rhhz.net/tis/html/20150101.htm# http://hustcat.github.io/gpu-archit...

2802
来自专栏大数据和云计算技术

技术专栏丨2018 存储技术热点与趋势总结

类型:技术专栏 作者介绍 张凯(Kyle Zhang),SmartX 联合创始人 & CTO。毕业于清华大学计算机系,研究方向为分布式系统和体系结构。2013...

4218
来自专栏应用案例

如何用Python提取中文关键词?

本文一步步为你演示,如何用Python从中文文本中提取关键词。如果你需要对长文“观其大略”,不妨尝试一下。 ? 需求 好友最近对自然语言处理感兴趣,因为他打算利...

2618
来自专栏玉树芝兰

如何用Python提取中文关键词?

本文一步步为你演示,如何用Python从中文文本中提取关键词。如果你需要对长文“观其大略”,不妨尝试一下。

1362
来自专栏跟着阿笨一起玩NET

浅谈数据库设计技巧(上)(转)

转一篇他人写的数据库设计技巧,感觉也不一定都正确,开拓一下思路吧。 说到数据库,我认为不能不先谈数据结构。1996年,在我初入大学学习计算机...

1691
来自专栏拂晓风起

【转】Flash:同志们,这些知识点你们知道多少?(一些必备的Flash开发知识点)

1042
来自专栏FreeBuf

ModSecurity技巧:使用ssdeep检测Webshell

最新版本的ModSecurity增加了ssdeep检测webshell的接口,于是猛地回忆起搞客户端安全(游戏安全)的时候买过一本书《恶意软件分析诀窍与工具箱-...

3078
来自专栏恰同学骚年

操作系统核心原理-6.外存管理(上)磁盘基础

  计算机是处理数据的机器,而数据就需要有地方存放。在计算机中,可供数据存放的地方并不太多,除了内存之外,最主要的存储数据的媒介就是磁盘。对于大多数计算机领域的...

1251

扫码关注云+社区