Machine learning

社課 - 3

lecturer : lemon

topic : Vectorize

multiple features

我們考慮一個情況:

今天檸檬想要預測房地產的價格

不要問我為甚麼

可能最近他想要買房(?

multiple features

The偷owo

如果你們有認真上課的話

我們可以透過上禮拜學的 linear regression

對房價做出預測

multiple features

我們可以把房價的預測線寫成:

\hat{y} = wx + b

其中\(x\)是房子的面積\( (feet^{2})\)

\(\hat{y}\)是我們預測的價格(1000USD)

(房價好貴 Q

multiple features

比如說這樣 (我隨便畫的

multiple features

但你會發現

只有房屋面積的大小

並不能很好的預測房價

multiple features

所以我們會需要更多的features

=> 也就是給電腦更多的線索

e.g.

\(\hat{y} = w_1x_1 + w_2x_2 + b\)

其中 \(x_1\) 是房子的面積

\(x_2\) 是房子離捷運站的距離

\(\hat{y}\) 一樣是我們所預測的價錢

multiple features

它就會變成一張酷酷的3D圖

apply MULTIPLE FEATURES

檸檬學長,那我們要怎麼做出一張酷酷的圖

喔不4,是做出更好的預測

apply MULTIPLE FEATURES

其實並不難ㄛ

你們還記得上上?(不知道幾個)禮拜的教的ㄇ:

J(w, b) = \frac{1}{2m}\sum_{i = 1}^{m} (\hat{y}^{(i)} - y)^2

btw \(\hat{y} = h_\theta(x)\) 因為 \(\hat{y}\) 比較好打

我們要做的,便是改變 \(\hat{y}\) 的算法

使我們能從不同的feature學習

i.e.

\(\hat{y} = w_1x_1 + w_2x_2 + b\)

apply MULTIPLE FEATURES

又或者,我們有更聰明的方法

如果你有認真聽我講矩陣的那堂課

它就是用在今天ㄉ

改變 \(\hat{y}\) 的算法

這是個很棒的方法

但如果今天我們有不只兩個features要用

算 \(\hat{y}\) 的柿子會變得很冗長

難道只能用手刻ㄌㄇ(手好酸

J(w, b) = \frac{1}{2m}\sum_{i = 1}^{m} (\hat{y}^{(i)} - y)^2

apply MULTIPLE FEATURES

我們先來建立個共識(不是92的那個

以後的課我都會這樣寫:

 

\(m\) :Training examples的數量(就是有幾ㄍ點的意思)

\(n\) :Features的數量(就是我們給電腦幾條線索)

\(x^{(i)}_{j}\) :第\(i\)個Training example的第\(j\)個Feature

\(w_{j}\) :第\(j\)個Feature的權重(其實就是斜率)

apply MULTIPLE FEATURES

我們可以改一下 \(\hat{y}\) 的寫法:

\(\hat{y} = \sum_{j = 1}^{n} (w_{j}x_{j}) + b\)

看到這裡,你可能會覺得完全沒有比較好啊

莫名其妙,檸檬又在唬爛

J(w, b) = \frac{1}{2m}\sum_{i = 1}^{m} (\hat{y}^{(i)} - y)^2

apply MULTIPLE FEATURES

沒錯 我真ㄉ在唬爛

如果我們令

 

 

\(\hat{y}^{(i)} = \sum_{j = 1}^{n} (w_{j}x^{(i)}_{j}) + b\)

x^{(i)} = \begin{bmatrix} x^{(i)}_{1} \\ \vdots \\ x^{(i)}_{n}\end{bmatrix},\ w = \begin{bmatrix}w_{1} & \cdots & w_{n}\end{bmatrix},\ b \in R

我們便可以得到 \(\hat{y}^{(i)} = wx + b\)

apply MULTIPLE FEATURES

偷偷來複習一下

我們知道 \(\hat{y}^{(i)} = wx + b\)

且 \(x^{(i)} \in R^{n},\ w \in R^{1 \times n},\ b \in R\)

請問 \(\hat{y}\) 的維度為何?

(A) \(R\)(就一個實數)

(C) \(R^{n}\)

(B) \(R^{n \times n}\)

(D) 根本沒有這個數字,是在哭喔

stack up examples

在我們開始實作前

還有一件重要的事要做

(雖然我很想吃晚餐 但不是這件事QAQ

就是

我們要把多個訓練資料放在一起處理

至於為什麼要這麼做

不是因為這樣比較潮ㄛ

暫時先不告訴你

stack up examples

我們要怎麼做到這件事

其實就是把東西放在一起而已

J(w, b) = \frac{1}{2m}\sum_{i = 1}^{m} (wx^{(i)} + b - y)^2

你們可能看不太出來

 

因為其實我也不會看 我爛

stack up examples

如果我們令

X = \begin{bmatrix}x^{(1)}_{1} & \cdots & x^{(m)}_{1} \\ \vdots & \ddots & \vdots \\ x^{(1)}_{n} & \cdots & x^{(m)}_{n}\end{bmatrix},\ y = \begin{bmatrix}y^{(1)} & \cdots & y^{(m)}\end{bmatrix}

那我們就可以改寫整個Cost function(程式上)

import numpy as np

#如果我們已經有w, X, y
J = 1/(2*m) * np.sum((np.dot(w, X) + b - y) ** 2)

stack up examples

import numpy as np

#如果我們已經有w, X, y
J = 1/(2*m) * np.sum((np.dot(w, X) + b - y) ** 2)

其中 **2element-wise平方運算(Python的次方運算子 **)

np.sum()就是把同一個column或row的元素加起來

喔然後如果你是矩陣運算大師的話

你可以把裡面的乘法乘開看看

這樣或許有助於理解(?

gradient descent

要算線性代數的微分其實並不容易

畢竟是兩個數學領域的結合

所以

我們要培養像陶淵明那樣

「好讀書,不求甚解。」

的精神

gradient descent

\frac{\partial J}{\partial w} = \frac{(wX + b - y)X^{T}}{m}

所以我直接給你們微分算出來的結果 (茶

\frac{\partial J}{\partial b} = \frac{\sum^{m}_{i = 1} (wX^{(i)} + b - y^{(i)})}{m}

why to vectorize

計算Cost Function的過程應用矩陣、向量來運算

稱為 Vectorization => 向量化 

但為甚麼我們要這樣做呢?

用for迴圈不香ㄇ

why to vectorize

計算Cost Function的過程應用矩陣、向量來運算

稱為 Vectorization => 向量化 

但為甚麼我們要這樣做呢?

用for迴圈不香ㄇ

why to vectorize

我看你是完全不懂喔

有個東西叫 SIMD

(Single Instruction Multiple Data)

中文叫做:單指令流多資料流(我也不懂Q

我們可以這樣理解

透過SIMD

我們可以同步執行很多ㄉ運算

而如果是單純用迴圈

只能一圈一圈慢慢跑

大概就這樣ㄌ

這堂課是我今天備的

因為我在準備段考(?

雖然還是燒雞

 

簡報、Colab比較趕 可能會爛掉

下次也要來ㄛㄛㄛ

Made with Slides.com