2019/8/18

機器學習_線性迴歸


機器學習擅長


  1. 回歸 regression


    將連續性的資料進行觀察,用以預測未來的結果。例如股價、身高、體重

  2. 分類 classification


    收集既有的資料,進行訓練,根據訓練結果預測新資料的分類。例如:垃圾郵件判斷、手寫數字辨識

  3. 分群 clustering


    根據資料進行分群,但跟分類不同,分類的訓練資料已經有標記結果,要用來分群的資料並沒有群組的標記。例如:根據學測成績,進行文理組分群


使用具有標記的資料進行機器學習,稱為監督式學習。


使用不具有標記的資料進行機器學習,稱為非監督式學習。


線性迴歸(Linear regression)


當我們取得原始量測資料時,如果在平面座標上標記這些量測點,會感覺到這些點之間,可以畫出最接近這些點的一條直線方程式,線性回歸方法,可以找到這樣的方程式,未來就可以根據這個方程式,預測數值。



從圖形看起來,我們可找到一條「最接近」所有紅色觀測值的直線,以直線方程式 \({f(x)=ax+b}\) 表示這條直線,我們要做的就是找到一個方法,確定 a 與 b 的值,未來就可以利用這個方程式預測數據。在統計中,為了因應未來可能有很多未知數的問題,改以這樣的寫法:


\({f(x)=𝜃_0+𝜃_1x}\)


最小平方法


假設目前有這些數據,當我們任意找 \({𝜃_0 =1, 𝜃_1=2}​\) 時,f(x) 跟實際上的 y 之間有誤差。所以要找到適當的參數,讓 f(x) 與 y 之間的誤差最小,當然如果誤差為 0 是最好的。


x y f(x)
58 374 117
70 385 141
81 375 163
84 401 169

定義誤差函數為


\({E(𝜃)= \frac{1}{2} \sum_{i=1}^{n}( y^{(i)} - f_𝜃(x^{(i)})^2 }\)


  • \(x^{(i)}, y^{(i)}\) 分別是第 i 項的 x 與 y,例如 \(x^{(1)} = 58, y^{(1)}=374\)
  • \({(y^{(i)} - f_𝜃(x^{(i)}) }\) 是誤差值,但因為誤差有可能是負數,所以就用平方,轉成正數
  • 將所有誤差的平方加總後,為了微分計算方便,就在前面再乘上 1/2。因為乘上任意的正數,只會讓圖形橫向壓扁,但不會改變最小值的位置。任意的正數都可以,選擇 1/2 是因為後面的例子,f(x) 是二次函數的關係。

在讓 E(𝜃) 最小的狀況下,找到的 \(𝜃_0, 𝜃_1​\) 就是最小平方法


最速下降法


剛剛要讓 E(𝜃) 最小的狀況下,必須不斷地找到不同的 \(𝜃_0, 𝜃_1​\),這個計算很麻煩,可用微分來解決,因為微分就是在找函數切線斜率的變化。


例如 \(f(x) = (x-1)^2\) ,微分後 \(f'(x) = 2x-2\)


x f'(x) 的正負 f(x) 遞增或遞減
\(x < 1\) \(-\) 遞減
\(x=0\) 0
\(x>1\) \(+\) 遞增

f(x) 的圖形如下,當 x 由 3 往 1 逼近,f(x) 就越來越小,另外當 x 由 -1 往 1 逼近,f(x) 也會越來越小



意思就是說,只要 x 往導函數 (微分) 的反方向移動,就函數值會往最小值移動。


最速下降法(梯度下降法) 就是定義為


\(x := x - 𝜂 \frac{d}{dx}f(x)​\)


以實際的數字為例,當 \(𝜂 = 1, x = 3​\),x 會在 3 與 -1 之間往返


\(x := 3-1(2*3-2) = -1​\)


\(x := -1-1(2*(-1)-2) = 3​\)


當 \(𝜂 = 0.1, x = 3\),x 會往最小值逼近


\(x := 3-0.1(2*3-2) = 2.6​\)


\(x := 2.6-0.1(2*2.6-2) = 2.3​\)


\(x := 2.3-0.1(2*2.3-2) = 2.1​\)


當 𝜂 越大,x 就會往返,當 𝜂 越小,x 會往最小值逼近




回到剛剛的 誤差函數


\({E(𝜃)= \frac{1}{2} \sum_{i=1}^{n}(y^{(i)} - f_𝜃(x^{(i)})^2 }\)


因為 \(f_𝜃(x^{(i)})\) 是 \({f(x)=𝜃_0+𝜃_1x}\) ,有兩個未知的參數 \(𝜃_0, 𝜃_1\) ,要改用偏微分找最小值。


\(𝜃_0 := 𝜃_0 - 𝜂 \frac{𝜕E}{𝜕𝜃_0}​\)


\(𝜃_1 := 𝜃_1 - 𝜂 \frac{𝜕E}{𝜕𝜃_1}​\)


因 E(𝜃) 裡面有 \(f_𝜃(x)​\),而 \(f_𝜃(x)​\) 裡面有 𝜃


\(u = E(𝜃)​\)


\(v = f_𝜃(x)​\)


然後用合成函數的方式,計算微分


\(\frac{𝜕E}{𝜕𝜃_0} = \frac{𝜕u}{𝜕v} \frac{𝜕v}{𝜕𝜃_0}​\)


其中,前面的部分


\( \frac{𝜕u}{𝜕v} = \frac{𝜕}{𝜕v}( \frac{1}{2} \sum_{i=1}^{n}(y^{(i)} - v)^2 ) = \frac{1}{2} \sum_{i=1}^{n}\frac{𝜕}{𝜕v}(y^{(i)} - v)^2 = \frac{1}{2}\sum_{i=1}^{n}( -2y^{(i)} +2v ) = \sum_{i=1}^{n}( v-y^{(i)} )\)


後面的部分


\(\frac{𝜕v}{𝜕𝜃_0} = \frac{𝜕}{𝜕𝜃_0}( 𝜃_0 + 𝜃_1x ) = 1​\)


所以


\(\frac{𝜕E}{𝜕𝜃_0} = \sum_{i=1}^{n}( f_𝜃(x^{(i)})-y^{(i)} )\)


另外對 \(𝜃_1​\) 微分,可得到


\(\frac{𝜕v}{𝜕𝜃_1} = \frac{𝜕}{𝜕𝜃_1}( 𝜃_0 + 𝜃_1x ) = x\)


\(\frac{𝜕E}{𝜕𝜃_1} = \sum_{i=1}^{n}( f_𝜃(x^{(i)} )-y^{(i)} )x^{(i)} \)




最後


\(𝜃_0 := 𝜃_0 - 𝜂 \sum_{i=1}^{n}( f_𝜃(x^{(i)} )-y^{(i)} )\)


\(𝜃_1 := 𝜃_1 - 𝜂 \sum_{i=1}^{n}( f_𝜃(x^{(i)} )-y^{(i)} )x^{(i)}​\)


用這個方法,就可以找出正確的 \(𝜃_0, 𝜃_1​\)


多項式回歸


一開始,我們假設數據的模型是線性的,所以使用一次函數,但也可能用二次或更高次的函數來定義 \(f_𝜃(x)​\),會更貼近原本的數據模型


\(f_𝜃(x) = 𝜃_0 + 𝜃_1x + 𝜃_2x^2​\)


\(f_𝜃(x) = 𝜃_0 + 𝜃_1x + 𝜃_2x^2 + \dots +𝜃_nx^n​\)


回到剛剛的問題,要對 \(𝜃_2​\) 進行偏微分


對 \(𝜃_1​\) 微分,可得到


\(\frac{𝜕v}{𝜕𝜃_2} = \frac{𝜕}{𝜕𝜃_2}( 𝜃_0 + 𝜃_1x +𝜃_2x^2 ) = x^2\)


\(\frac{𝜕E}{𝜕𝜃_2} = \sum_{i=1}^{n}( f_𝜃(x^{(i)} )- y^{(i)} )(x^{(i)} )^2\)


多元回歸


目前解決的問題,都只有一個變數 x,但大多數的問題,都是有兩個以上的變數。例如廣告的點擊率,可能會受廣告費、顯示位置、顯示大小 等原因影響。


\(f_𝜃(x_1, x_2, x_3)=𝜃_0+𝜃_1x_1+𝜃_2x_2+𝜃_3x_3\)


當變數有 n 個,可改用向量的方式表示


\(𝜃= \left[ \begin{matrix} 𝜃_0 \\ 𝜃_1 \\𝜃_2 \\. \\. \\𝜃_n \end{matrix} \right] x= \left[ \begin{matrix} x_1 \\ x_2 \\x_3 \\. \\. \\x_n \end{matrix} \right] ​\)


但因為 𝜃 跟 x 個數不同,不容易計算,就再加上一項 \(x_0 =1​\)


\(𝜃= \left[ \begin{matrix} 𝜃_0 \\ 𝜃_1 \\𝜃_2 \\. \\. \\𝜃_n \end{matrix} \right] x= \left[ \begin{matrix} x_0 \\ x_1 \\x_2 \\. \\. \\x_n \end{matrix} \right] \)


將 𝜃 變成轉置矩陣後,再跟 x 相乘,就會是剛剛的 \(f_𝜃(x)\)


\(𝜃^Tx = 𝜃_0x_0+𝜃_1x_1+ \dots + 𝜃_nx_n = f_𝜃(x) \)


變成向量後,再用剛剛合成函數偏微分的方法


\(u = E(𝜃)​\)


\(v = f_𝜃(x)​\)


\(\frac{𝜕u}{𝜕𝜃_j} =\frac{𝜕E}{𝜕𝜃_j} = \frac{𝜕u}{𝜕v} \frac{𝜕v}{𝜕𝜃_j}\)


前面的部分一樣,後面的部分


\(\frac{𝜕v}{𝜕𝜃_j} = \frac{𝜕}{𝜕𝜃_j}( 𝜃^Tx ) = \frac{𝜕}{𝜕𝜃_j}( 𝜃_0x_0+𝜃_1x_1+\dots+𝜃_nx_n )= x_j\)


第 j 項參數的定義為


\(𝜃_j := 𝜃_j - 𝜂 \sum_{i=1}^{n}( f_𝜃(x^{(i)} )-y^{(i)} )x_j^{(i)}\)


當變數增加,計算量變大,用最速下降法會導致計算速度變慢,可用隨機梯度下降法改進。


最速下降法除了有計算速度慢的問題,還有可能陷入局部解的問題,像以下的函數圖形中,不同的起點,可能會找到局部最小值。



隨機梯度下降法


在多元迴歸中,第 j 項參數的定義為


\(𝜃_j := 𝜃_j - 𝜂 \sum_{i=1}^{n}( f_𝜃(x^{(i)} )-y^{(i)} )x_j^{(i)}​\)


但因為用到所有的資料的誤差,計算量太大,隨機梯度下降法式隨機選擇一項學習資料,套用在參數的更新上,例如選擇第 k 項。


\(𝜃_j := 𝜃_j - 𝜂 ( f_𝜃(x^{(k)} )-y^{(k)} )x_j^{(k)}​\)


原本最速下降法用來更新一次參數的時間,隨機梯度下降法可更新 n 次參數。因為是隨機選擇學習資料,不會陷入局部解的問題。




另外也有隨機選擇 m 筆學習資料的方法,也稱為小量批次資料法,假設 m 筆資料的集合為 K


\(𝜃_j := 𝜃_j - 𝜂 \sum_{k𝜖K} ( f_𝜃(x^{(k)} )-y^{(k)} )x_j^{(k)}​\)


References


練好機器學習的基本功:用Python進行基礎數學理論的實作

沒有留言:

張貼留言