[ML] 想到就寫 - Octave 的眉眉角角 (一) 用 index 取值?

先拋開 Octave, Machine Learning 這些學問,
我們用 Word 或是 Excel 這些文書處理軟體工作的時候, 一般習慣把資料做下列樣子的編排:

No.HeightWeightAge
11708030
21757035
=> 以資料的"內容物來說" (我們去掉標題跟No.), 這是一個 2 x 3 的矩陣,
表示有2筆資料, 而每一筆的元素有3個.

我們用 Octave 儲存資料的時候, 令 T 等於上述這個 2 x 3 的表格,
使用 T(1, :) 可以取出第一行的資料 (Row = 1, Colume = 1~3)
T(1, :) == T(1, 1:3) => [170, 80, 30]

但是, 使用T(1:3) 的話會取出甚麼?
T(1:3) => [170, 175, 80]

 何...だと...!!

在Octave裡面, 預設的處理方式都是以向量 (Vector) 的形式來呈現,
所以用 sum 來加總上面的 T 表格時, 你會得到 [345 150 65]
=> 對每一個 Column 做 Summation
(從資料的形式來看, 同屬一列 Column 的單位也都會是相同的, 所以這個操作其實蠻合理的)

所以在取一個陣列的值的時候, 盡量避免直接用 index 的方式來拿取,
還是乖乖地使用陣列的表示法吧!

Example. 對表格T進行正規化:

取得每一個 Column 的 mean:
    meanT = sum(T) ./ size(T,1) ==> mean(T)

取得每一個 Column 的 variance
    varT = sum((T - meanT).^2) ==> var(T)

取得每一個 variance 的平方根
    sqrtT = varT .^ 0.5 ==> sqrt(T)

進行正規化:
nT = (T - meanT) ./ sqrtT

1 則留言:

  1. octave理解矩陣的方式跟我們一般認知的方式真的大不同~

    回覆刪除

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

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