Multiple Features
當 linear progression 可以有多個 features (variables) 時
稱作 Multivariate linear regression
例如一次用 size, ages, number of bedrooms, floors 來判斷 house price
此時我們多了一些名詞 :
nx(i)xj(i)=number of features=the features (input) of the ith training example=value of feature j in the ith training example 用表格來舉例 :
mnx(2)x3(3)=3=4=14163240=2 我們的 Hypothesis 也不再是單純的
hθ(x)=θ0+θ1x 而可以是 :
hθ(x)=θ0+θ1x1+θ2x2+θ3x3+⋯+θnxn 我們可以用房子當作例子來想像這個公式 :
hθ(x)=80+0.1x1+0.01x2+3x3−2x4 以此類推,最終將會得出一個 solid value for pricing
我們可以使用矩陣和向量來簡化 Hypothesis
首先我們先假設 x0 來補齊每一個 training set 對應的 base value (80 的部分)
x0(i)=1 所以 features 可以建成一個 n + 1 size 的 vector
x=x0x1x2⋮xn∈Rn+1 而 parameters 也一樣可以建成一個 n + 1 size 的 vector
θ=θ0θ1θ2⋮θn∈Rn+1 如此一來, Hypothesis 可以寫成
x0hθ(x)=1,=θ0x0+θ1x1+θ2x2+θ3x3+⋯+θnxn=[θ0θ1⋯θn]x0x1⋮xn=θTx Gradient Descent for Multiple Variables
Multivariate 不只會讓 Hypothesis 改變,也會讓 Cost function 改變 :
J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2 甚至可以寫成 :
J(θ)=2m1i=1∑m((j=0∑nθjxj(i))−y(i))2 或是寫成 :
J(θ)=2m1i=1∑m(θTx(i)−y(i))2 在看新的 Gradient descent algorithm 前,先複習原本只有一個 feature 的算法 :
Repeat until convergence: θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))θ1:=θ1−αm1i=1∑m(hθ(x(i))−y(i))x(i)(simultaneously update θ0,θ1) 而新的 Gradient descent algorithm 其實非常簡單 :
Repeat until convergence: θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))⋅x0(i)θ1:=θ1−αm1i=1∑m(hθ(x(i))−y(i))⋅x1(i)θ2:=θ2−αm1i=1∑m(hθ(x(i))−y(i))⋅x2(i)⋯(simultaneously update θ0,θ1,⋯θn) 因為我們已經定義過, x0 = 1,所以才可以這樣寫
代表每一個微分項裡面都會有乘上對應的 feature
我們可以將算法再簡化一些 :
Repeat until convergence: θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))⋅xj(i)for j = 0⋯n (and update simultaneously) 這就是解決 Multivariate linear regression 的 cost function 的 Gradient descent algorithm
Gradient Descent in Practice I - Feature Scaling
現在來學習幾個方法來改善 gradient descent 的一些小缺點
我們發現若 feature 的數值範圍若過大,會造成 cost function 所形成的 contour plot 變成類似橢圓形
而 gradient descent 將會以較慢速度,來回擺動直到找到最佳收斂點
所以 feature 值盡量介於以下區間 (當然不是必須,但不要差太多就行) :
−1≤xi≤1or−0.5≤xi≤0.5 有兩個方法可以解決問題,分別是 feature scaling 和 mean normalization
讓 gradient descent 可以良好的運作在類圓形的 cost function,減少 iteration 的次數
Feature scaling
Feature scaling 將 input feature 除以 range (例如 features 的 maximum - minimum 或是 standard deviation)
來讓新的 input value 變成接近在 1 範圍的新數值
例如 :
x1x2=2000size(feet2)=5number of bedrooms Mean normalization
Mean normalization 則是將 input 減去 features average
來讓新的 input value 接近 zero mean (x0 = 1 不會變)
我們會將兩個方法合而為一個公式 :
xi:=Sixi−μi 其中 mu 代表是所有 features 的平均值
S 表示 Range 值 (or standard deviation)
例如 :
Housing prices 在 range 2000 ~ 5000 然後 mean value 為 1000
所以每個新的 features 會計算為 :
xi:=3000xi−1000 Gradient Descent in Practice II - Learning Rate
要確保 gradient descent 正常運作
我們可以使用以下的 plot 進行 debugging gradient descent :
x 軸為 gradient descent 已經 iterate 的次數
如果 J function 是往上增加
可能是 gradient descent algorithm 寫錯了
不同問題的 gradient descent 所需要的 iteration 數也不同
可能從幾百到幾百萬次迴圈數都有可能
所以這張圖可以很清楚的看到 gradient descent 的狀態
另外也可以使用 Automatic convergence test
透過設置一個小於 10^-3 的值,並觀察下一次的 iteration 是否變動小於該數
來自動告訴我們已經收斂
但要設置這個數是較困難的,所以比較少使用
至少已經證明
當 learning rate alpha 夠小
cost function J 是會不斷 decrease 的
所以當 debug plot 發生這幾種現象時
應考慮減少 alpha 值
Features and Polynomial Regression
我們可以改變 features 以及 Hypothesis 的形式及組成
來優化 Hypothesis 讓他適應更多不同的 training sets
像是我們可以組合兩個 features 為一個,透過簡單的相乘即可 :
x=x1⋅x2 例如使用房子的 width 和 height 作為 features 時
hθ(x)=θ0+θ1⋅frontage+θ2⋅depth 我們可以將兩者相乘得到 area 作為新的 feature :
x (area)hθ(x)=frontage ⋅ depth=θ0+θ1⋅x Hypothesis 也不一定只能使用 linear function 來 fit training sets
我們可以將 hypothesis function 轉為 quadratic, cubic 或 square root function 甚至是更多不同的 functions
例如上面這一個 training sets 若使用一般的 linear function 一定不好
我們可以使用藍線的 quadratic function
只要將同一個 feature 拿來平方即可
hθ(x)=θ0+θ1x1+θ2x12 但 quadratic 會在 size 越大時得到更少 price
所以我們可以使用綠線的 cubic function
hθ(x)=θ0+θ1x1+θ2x12+θ3x13 這時候有兩個新的 feature 就是由 x1 的平方和立方求得
要十分注意的是 !
這類 Polynomial regression 在搭配 feature scaling 時
數值的範圍改變非常重要 !
例如 :
Range of x1=1−1000 那麼在 quadratic 及 cubic 的部分就會變成 :
Range of x12Range of x13=1−1,000,000=1−1,000,000,000 其實上面用 quadratic 跟 cubic function 都沒有非常 fit
最後,我們用一個 square root 的例子來練習
也就是上圖紫線的部分
hθ(x)=θ0+θ1x1+θ2x1 而他在 feature scaling 後的 features 就是 (不考慮 mean normalization) :
x1=1000size,x2=1000size Slide