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

相关文章

来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3035
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

30710
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4778
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2496
来自专栏hbbliyong

WPF Trigger for IsSelected in a DataTemplate for ListBox items

<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlug...

4044
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2102
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5256
来自专栏魂祭心

原 canvas绘制clock

3964
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2657

扫码关注云+社区