使用Octave來學習Machine Learning(一)

小之的公衆號 : WeaponZhipython

前言

各位小夥伴若是是經過 Coursera 上吳恩達的機器學習視頻來學習的話,必定聽到過 Octave 的大名了,吳恩達強烈推薦你們使用 Octave 來學習機器學習,而且用了完整的一個章節「Octave and Matlab Tutorial」來說述 Octave 的基本操做。很是實用,也很簡單,推薦想使用 Octave 的同窗去學習一下。git

我在使用 Octave 的過程當中,最舒服的地方就是它對矩陣操做的支持很是全面,使用起來也很簡單,一些看似很複雜的邏輯,用 Octave 可能一兩行就能夠輕鬆解決。我將帶你們認識和入門 Octave。github

此文分兩篇來說解。算法

什麼是 Octave

Octave 是一種高層解釋類編程語言。旨在解決線性和非線性的數值計算問題。Octave爲GNU項目下的開源軟件,Octave 語法與 Matlab 語法很是接近,能夠很容易的將 Matlab 程序移植到Octave。編程

上面的說法不太通俗,簡而言之,Octave 是一些科學計算軟件,對於一些矩陣啊,一些高級的工程運算方面的工做,它比較擅長,而另外一個功能相似的軟件就是大名鼎鼎的 Matlab。那麼咱們爲何非要選擇 Octave 而不選擇更有名的 Matlab 呢。有如下幾個緣由:xcode

  • Octave 比較輕量級,安裝起來就幾十兆左右,而 Matlab 安裝程序得有 10 來G,基本你只裝功能最少的基本版,也得有個幾百兆到 1 G 的佔用。ruby

  • Octave 的語法設計上一開始是模仿 Matlab 的,語法基本相似。95 % 的 Matlab 代碼能夠直接在 Octave 上使用,但由於 Octave 上使用了譬如字符串「""」和 Unix 風格的註釋「#」,因此 Octave 的代碼不必定能在 Matlab 上使用。bash

  • Octave 的繪圖後臺是強大的 Gnuplot,輸出格式不少,遠遠多於 Matlab,公式顯示上也強過 Matlab。app

  • 實際上我上面說的都是廢話,使用 Octave 主要仍是由於它是開源並免費的curl

安裝 Octave

那咱們就趕忙安裝 Octave 吧。

Windows 下沒啥好說的,去官網下載安裝包,一步到位。Mac (10.9以上)的話推薦你們使用 Homebrew 來安裝,Homebrew 是 Mac 下的軟件包管理工具。簡單介紹下步驟:

1、安裝 Xcode 和 Command Line Tool

App Store 中下載 Xcode

終端輸入「xcode-select —install」安裝 Command Line Tool

2、安裝 Xquatz,並創建軟連接爲 X11

終端輸入

sudo ln -sf /Applications/Utilities/XQuartz.app/ /Applications/Utilities/X11.app
複製代碼

X11 這東西很重要,MacOS 之前的版本是能夠隨附 X11 的,但如今你得經過以上方法去專門的下載,這個東西和圖形界面有關,能夠理解爲,使用 X11 可讓 Mac 兼容一些原來不能用的 Unix 軟件。在後面的一篇文章中,咱們還會用到它。

3、安裝 Homebrew,這裏咱們去官網下載:

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

4、使用 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,由於,可能你看完我這兩篇入門文章,就可以知足你在機器學習過程當中大部分的使用需求了。


歡迎關注個人公衆號

相關文章
相關標籤/搜索