Machine learning
社課 - 3
lecturer : lemon
topic : Vectorize
multiple features
我們考慮一個情況:
今天檸檬想要預測房地產的價格
不要問我為甚麼
可能最近他想要買房(?
multiple features
The偷owo
如果你們有認真上課的話
我們可以透過上禮拜學的 linear regression
對房價做出預測
multiple features
我們可以把房價的預測線寫成:
其中\(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
其實並不難ㄛ
你們還記得上上?(不知道幾個)禮拜的教的ㄇ:
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}\) 的柿子會變得很冗長
難道只能用手刻ㄌㄇ(手好酸
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\)
看到這裡,你可能會覺得完全沒有比較好啊
莫名其妙,檸檬又在唬爛
apply MULTIPLE FEATURES
沒錯 我真ㄉ在唬爛
如果我們令
\(\hat{y}^{(i)} = \sum_{j = 1}^{n} (w_{j}x^{(i)}_{j}) + b\)
我們便可以得到 \(\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
我們要怎麼做到這件事
其實就是把東西放在一起而已
你們可能看不太出來
因為其實我也不會看 我爛
stack up examples
如果我們令
那我們就可以改寫整個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)
其中 **2 是element-wise的平方運算(Python的次方運算子 **)
np.sum()就是把同一個column或row的元素加起來
喔然後如果你是矩陣運算大師的話
你可以把裡面的乘法乘開看看
這樣或許有助於理解(?
gradient descent
要算線性代數的微分其實並不容易
畢竟是兩個數學領域的結合
所以
我們要培養像陶淵明那樣
「好讀書,不求甚解。」
的精神
gradient descent
所以我直接給你們微分算出來的結果 (茶
why to vectorize
計算Cost Function的過程應用矩陣、向量來運算
稱為 Vectorization => 向量化
但為甚麼我們要這樣做呢?
用for迴圈不香ㄇ
why to vectorize
計算Cost Function的過程應用矩陣、向量來運算
稱為 Vectorization => 向量化
但為甚麼我們要這樣做呢?
用for迴圈不香ㄇ
why to vectorize
我看你是完全不懂喔
有個東西叫 SIMD
(Single Instruction Multiple Data)
中文叫做:單指令流多資料流(我也不懂Q
我們可以這樣理解
透過SIMD
我們可以同步執行很多ㄉ運算
而如果是單純用迴圈
只能一圈一圈慢慢跑
大概就這樣ㄌ
Linear regression with vectorization
By lemonilemon
Linear regression with vectorization
- 223