[ML] 在 Windows 環境下使用 Octave (一)


在學習 Machine Learning 時, 通常大家都會使用 Matlab 與 Octave 來進行程式的運算.
Octave 也是直譯式的語言, 最初它的目標就是提供一套相容於 Matlab語法的 free software,
所以如果你已經學過了 Matlab, 那麼使用 Octave 對你來說應該不是太大的問題.


詳細的安裝步驟可以從Octave的Wiki網頁上依照你的 OS 系統來選擇.

豆喵平常工作的環境是Ubuntu, 所以比較習慣 Unix的操作介面,
本來想嘗試在Windows的cygwin上面安裝Octave, 不過安裝之後在GUI部分還少了一些插件,
為了簡單一點所以還是選擇到他們的FTP下載Windows版本的安裝.
Ubuntu的話就直接 $apt-get install octave 即可~

在Windows的工作介面非常接近於 Matlab, 有使用過Matlab的同學應該可以很快上手 :)


 Octave 常用到的操作都是對於矩陣進行操作的, 在使用加減乘除的時候要特別留心.
矩陣的描述為 [Row size x Colume size],
每一筆資料會是一個 Row, 因此有三筆的話, Row 會是 3
每一筆資料的元素會是一個 Colume, 因此一筆資料有10個元素的話, Colume 會是 10.
所以有3筆資料, 各10個元素的話, 你的矩陣表示法會是 [3 x 10]

矩陣的操作行為: 
假設你有一個 [3 x 10] 的矩陣 X, [10 x 1] 的矩陣 Y.
則 X * Y 會得到一個 [3 x 1] 的矩陣
X + Y會出現錯誤, 因為維度不同.

若要每個元素單獨操作, 則你需要在前面加上一個句號, 變成 .*
這時候你拿 X .* Y 也會因為維度不同而出現錯誤:
error: product: nonconformant arguments (op1 is 3x10, op2 is 10x1)
特別的是當你只有單一Colume的時候, octave會幫你防呆直接進行運算.
不過最好還是避免這樣的操作...

另外幾個常用的操作如下:
求得轉置矩陣 (Transpose), 直接加上一個單引號可以得到 [10 x 3]的轉置矩陣:
X'

求得反矩陣 (Inverse):
pinv(X)
你可以試試使用 X * pinv(X)看看得到的結果是甚麼
* 注意這個pinv求反矩陣是即使你的X為non singular的時候它也會試著求解.

加總矩陣元素: sum(X)
它會將每一個Colume的元素加總, 假設你有 X 如下
   8   3   4
   1   5   9
   6   7   2
   8   3   4
   1   5   9
   6   7   2
則 sum(X) 會得到 [30 30 30] 的 [1 x 3] 矩陣

提到了函式, Octave和Matlab一樣都支援自定義函式,
只要你在同一個操作目錄下就可以直接使用. (當然, 你也可以透過將操作路徑 ($addpath) 加入搜尋路徑)
例如說你有一個 catFunction.m
內容如下:
function[outMatrix] = catGenRandXY[length_X, length_Y]

outMatrix = round(rand(length_X, length_Y) * 100);

接著在command line輸入
matrix = catGenRandXY(3, 10)
就會得到一個 [3 x 10] 的 matrix 囉


沒有留言:

張貼留言

OpenGL 閱讀筆記 (二) OpenGL基本操作

這邊虎喵跳過glfw/glew的初始化, 先來提一下OpenGL的基本操作方式 前面也提到過, OpenGL是一個類C的語言, 因此使用C/C++的攻城獅們應該會感到很熟悉. OpenGL的基本動作循環如下: 每一行code的解釋如下: // 本地變數,...