我們考慮一個情況:
今天檸檬想要預測房地產的價格
不要問我為甚麼
可能最近他想要買房(?
The偷owo
如果你們有認真上課的話
我們可以透過上禮拜學的 linear regression
對房價做出預測
我們可以把房價的預測線寫成:
其中\(x\)是房子的面積\( (feet^{2})\)
\(\hat{y}\)是我們預測的價格(1000USD)
(房價好貴 Q
比如說這樣 (我隨便畫的
但你會發現
只有房屋面積的大小
並不能很好的預測房價
所以我們會需要更多的features
=> 也就是給電腦更多的線索
e.g.
\(\hat{y} = w_1x_1 + w_2x_2 + b\)
其中 \(x_1\) 是房子的面積
而 \(x_2\) 是房子離捷運站的距離
\(\hat{y}\) 一樣是我們所預測的價錢
它就會變成一張酷酷的3D圖
檸檬學長,那我們要怎麼做出一張酷酷的圖
喔不4,是做出更好的預測?
其實並不難ㄛ
你們還記得上上?(不知道幾個)禮拜的教的ㄇ:
btw \(\hat{y} = h_\theta(x)\) 因為 \(\hat{y}\) 比較好打
我們要做的,便是改變 \(\hat{y}\) 的算法
使我們能從不同的feature學習
i.e.
\(\hat{y} = w_1x_1 + w_2x_2 + b\)
又或者,我們有更聰明的方法
如果你有認真聽我講矩陣的那堂課
它就是用在今天ㄉ
改變 \(\hat{y}\) 的算法
這是個很棒的方法
但如果今天我們有不只兩個features要用
算 \(\hat{y}\) 的柿子會變得很冗長
難道只能用手刻ㄌㄇ(手好酸
我們先來建立個共識(不是92的那個
以後的課我都會這樣寫:
\(m\) :Training examples的數量(就是有幾ㄍ點的意思)
\(n\) :Features的數量(就是我們給電腦幾條線索)
\(x^{(i)}_{j}\) :第\(i\)個Training example的第\(j\)個Feature
\(w_{j}\) :第\(j\)個Feature的權重(其實就是斜率)
我們可以改一下 \(\hat{y}\) 的寫法:
\(\hat{y} = \sum_{j = 1}^{n} (w_{j}x_{j}) + b\)
看到這裡,你可能會覺得完全沒有比較好啊
莫名其妙,檸檬又在唬爛
沒錯 我真ㄉ在唬爛
如果我們令
\(\hat{y}^{(i)} = \sum_{j = 1}^{n} (w_{j}x^{(i)}_{j}) + b\)
我們便可以得到 \(\hat{y}^{(i)} = wx + b\)
偷偷來複習一下
我們知道 \(\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) 根本沒有這個數字,是在哭喔
在我們開始實作前
還有一件重要的事要做
(雖然我很想吃晚餐 但不是這件事QAQ
就是
我們要把多個訓練資料放在一起處理
至於為什麼要這麼做
不是因為這樣比較潮ㄛ
暫時先不告訴你
我們要怎麼做到這件事
其實就是把東西放在一起而已
你們可能看不太出來
因為其實我也不會看 我爛
如果我們令
那我們就可以改寫整個Cost function(程式上)
import numpy as np
#如果我們已經有w, X, y
J = 1/(2*m) * np.sum((np.dot(w, X) + b - y) ** 2)
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的元素加起來
喔然後如果你是矩陣運算大師的話
你可以把裡面的乘法乘開看看
這樣或許有助於理解(?
要算線性代數的微分其實並不容易
畢竟是兩個數學領域的結合
所以
我們要培養像陶淵明那樣
「好讀書,不求甚解。」
的精神
所以我直接給你們微分算出來的結果 (茶
計算Cost Function的過程應用矩陣、向量來運算
稱為 Vectorization => 向量化
但為甚麼我們要這樣做呢?
用for迴圈不香ㄇ
計算Cost Function的過程應用矩陣、向量來運算
稱為 Vectorization => 向量化
但為甚麼我們要這樣做呢?
用for迴圈不香ㄇ
我看你是完全不懂喔
有個東西叫 SIMD
(Single Instruction Multiple Data)
中文叫做:單指令流多資料流(我也不懂Q
我們可以這樣理解
透過SIMD
我們可以同步執行很多ㄉ運算
而如果是單純用迴圈
只能一圈一圈慢慢跑