使用 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 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

用R进行文本分析初探——以《红楼梦》为例

一.写在前面的话~   刚吃饭的时候同学问我,你为什么要用R做文本分析,你不是应该用R建模么,在我和她解释了一会儿后,她嘱咐我好好写这篇博文,嗯为了娟儿同学,细...

3735
来自专栏生信技能树

生信菜鸟团博客2周年精选文章集(1)建立个人博客很简单

菜鸟建站教程三部曲 门牌号(域名)——房间(主机)——装修(网站源码) 在没有拥有自己网站之前,我曾无数次害怕过这个过程,以为会有各种各样的麻烦,需要学h...

3348
来自专栏诸葛青云的专栏

5天赚十亿!纯C/C++打造“西虹市首富”

有人就说了,小编你挣着卖白菜的钱就不要操着卖白粉的心了好吗?银行存款有多少心里没点数吗?

873
来自专栏SAP最佳业务实践

想学FM系列(17)-SAP FM模块:预算结构(8)-预算结构增强扩展使用

3.2.3 预算结构增强扩展使用 预算结构提供了预算地址、记账地址、索引预算地址的生成功能,在实际使用当中可能存在预算地址、记账地址的特殊检查,或是预算地址派...

3619
来自专栏诸葛青云的专栏

怎样利用几行简单的c语言代码表白?

喜欢一个女生很久了,想跟那个女生表白,但是找不到合适的方式表白。于是想到了一个办法,用c语言写一个程序跟她表白。这个程序的构想是这样的:当她打开这个程序,她的电...

882
来自专栏PPV课数据科学社区

《Kaggle项目实战》 泰坦尼克:从R开始数据挖掘(一)

摘要: 你是否为研究数据挖掘预测问题而感到兴奋?那么如何开始呢,本案例选自Kaggle上的数据竞赛的一个数据竞赛项目《泰坦尼克:灾难中的机器学习》,案例涉及一...

2896
来自专栏企鹅号快讯

宇宙神器:微信“活字转换”

一直想将笔耕时代发表的作品,输入电脑存word文档,以便修改和使用。由于作品较多且忙于写作加上惰性,使用电脑20年,始终未能如愿。平时看到心仪的好文字,短些的记...

1939
来自专栏北京马哥教育

用 4 行代码画一幅中国地图

1825
来自专栏Kotlin入门系列

师万物博客的历程(总)

1444
来自专栏Crossin的编程教室

【每周一坑】特殊的生日

好吧,我在跳票的道路上又双叒叕前进了一步……今天终于厚着脸皮来更新【每“周”一坑】啦。感谢在后台孜孜不倦催促我的同学们。 在出题前,先插两句: 上次关于 Pyt...

25711

扫描关注云+社区