使用Octave來學習Machine Learning(一)

WeaponZhi發表於2018-01-02

小之的公眾號 : 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來學習Machine Learning(一)

安裝 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來學習Machine Learning(一)
使用Octave來學習Machine Learning(一)

基本的操作

開啟 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,因為,可能你看完我這兩篇入門文章,就能夠滿足你在機器學習過程中大部分的使用需求了。


歡迎關注我的公眾號

使用Octave來學習Machine Learning(一)

相關文章