Processing math: 100%

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(𝜃)=12ni=1(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)=(x1)2 ,微分後 f(x)=2x2


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𝜂ddxf(x)


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


x:=31(232)=1


x:=11(2(1)2)=3


𝜂=0.1,x=3,x 會往最小值逼近


x:=30.1(232)=2.6


x:=2.60.1(22.62)=2.3


x:=2.30.1(22.32)=2.1


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




回到剛剛的 誤差函數


E(𝜃)=12ni=1(y(i)f𝜃(x(i))2


因為 f𝜃(x(i))f(x)=𝜃0+𝜃1x ,有兩個未知的參數 𝜃0,𝜃1 ,要改用偏微分找最小值。


𝜃0:=𝜃0𝜂𝜕E𝜕𝜃0


𝜃1:=𝜃1𝜂𝜕E𝜕𝜃1


因 E(𝜃) 裡面有 f𝜃(x),而 f𝜃(x) 裡面有 𝜃


u=E(𝜃)


v=f𝜃(x)


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


𝜕E𝜕𝜃0=𝜕u𝜕v𝜕v𝜕𝜃0


其中,前面的部分


𝜕u𝜕v=𝜕𝜕v(12ni=1(y(i)v)2)=12ni=1𝜕𝜕v(y(i)v)2=12ni=1(2y(i)+2v)=ni=1(vy(i))


後面的部分


𝜕v𝜕𝜃0=𝜕𝜕𝜃0(𝜃0+𝜃1x)=1


所以


𝜕E𝜕𝜃0=ni=1(f𝜃(x(i))y(i))


另外對 𝜃1 微分,可得到


𝜕v𝜕𝜃1=𝜕𝜕𝜃1(𝜃0+𝜃1x)=x


𝜕E𝜕𝜃1=ni=1(f𝜃(x(i))y(i))x(i)




最後


𝜃0:=𝜃0𝜂ni=1(f𝜃(x(i))y(i))


𝜃1:=𝜃1𝜂ni=1(f𝜃(x(i))y(i))x(i)


用這個方法,就可以找出正確的 𝜃0,𝜃1


多項式回歸


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


f𝜃(x)=𝜃0+𝜃1x+𝜃2x2


f𝜃(x)=𝜃0+𝜃1x+𝜃2x2++𝜃nxn


回到剛剛的問題,要對 𝜃2 進行偏微分


𝜃1 微分,可得到


𝜕v𝜕𝜃2=𝜕𝜕𝜃2(𝜃0+𝜃1x+𝜃2x2)=x2


𝜕E𝜕𝜃2=ni=1(f𝜃(x(i))y(i))(x(i))2


多元回歸


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


f𝜃(x1,x2,x3)=𝜃0+𝜃1x1+𝜃2x2+𝜃3x3


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


𝜃=[𝜃0𝜃1𝜃2..𝜃n]x=[x1x2x3..xn]


但因為 𝜃 跟 x 個數不同,不容易計算,就再加上一項 x0=1


𝜃=[𝜃0𝜃1𝜃2..𝜃n]x=[x0x1x2..xn]


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


𝜃Tx=𝜃0x0+𝜃1x1++𝜃nxn=f𝜃(x)


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


u=E(𝜃)


v=f𝜃(x)


𝜕u𝜕𝜃j=𝜕E𝜕𝜃j=𝜕u𝜕v𝜕v𝜕𝜃j


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


𝜕v𝜕𝜃j=𝜕𝜕𝜃j(𝜃Tx)=𝜕𝜕𝜃j(𝜃0x0+𝜃1x1++𝜃nxn)=xj


第 j 項參數的定義為


𝜃j:=𝜃j𝜂ni=1(f𝜃(x(i))y(i))x(i)j


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


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



隨機梯度下降法


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


𝜃j:=𝜃j𝜂ni=1(f𝜃(x(i))y(i))x(i)j


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


𝜃j:=𝜃j𝜂(f𝜃(x(k))y(k))x(k)j


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




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


𝜃j:=𝜃j𝜂k𝜖K(f𝜃(x(k))y(k))x(k)j


References


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

沒有留言:

張貼留言