Coursera ML筆記 -----week6 Advice for Applying Machine Learning

歡迎點擊作者原文地址

改進自己的機器學習算法系統

當我們初步求出了一個機器學習算法以後,我們希望這個算法的預測或者分類能力是很好的,能夠對我們的每一個新的數據做出合理的判斷。但是我們實際發現這個算法的錯誤率其實很高,這個時候我們應該怎麼去做,怎麼做能夠更省力更有效更具有針對性? 這就是week6 要解決的問題。

我們很容易就想到的方法有這些:
1.增加訓練數據
2.減少特徵
3.增加特徵
4.增加多項式特徵
5.減小λ
6.增加λ

但是這些方法到底有沒有用,或者說,在什麼情況下有用,這就是值得去探討的問題

那我們需要做的其實是三件事情:

1. 評估一個學習出來的算法
2. 判斷一個表現不太好的學習算法是出了什麼問題?high bias(欠擬合)還是high variance(過擬合)的問題

2.1 model selection

  • 2.1.1 degree of polynomial
  • 2.1.2 bias vs variance
  • 2.1.3 regularize parameter

2.2 learning curve
3. 如何更有效更有針對性地怎麼去改善學習算法


1. 怎麼樣去評估一個已有的算法——>劃分數據集

要去評價評估學習到的算法時,很重要的一部分就是要有能夠檢驗的數據,以估計算法的泛化能力。在實際訓練中,如果把所有的數據全部都當作是訓練數據,固然可以得到擬合效果比較好的學習算法,但是我們並不知道這個算法對新的數據的估計情況。在現有的條件下,我們不妨將現有的數據分成兩部分,一部分用來訓練(70%),一部分用來驗證(30%)。通過訓練數據來訓練參數向量,通過驗證數據來評價學習到的算法。於是,我們就有一般過程如下:
a. 訓練θs.t.minJ(θ)
b. 計算測試集誤差Jtest(θ) ,來估計學習算法的泛化能力

在不同的情形下,Jtest(θ) 會有不同的形式,但是總體來講,還是會保持一致性

線性迴歸:

Jtest(θ)=12mi=1mtest(hθ(x(i)test)y(i)test)2

邏輯迴歸:
Jtest(θ)=1mi=1mtesty(i)testloghθ(x(i)test)+(1y(i)test)log(1hθ(x(i)test))

2. 判斷欠擬合還是過擬合

做完評估以後,我們接着就可以通過“Learning Curve”的判斷方式來判斷我們的算法究竟是high bias 還是high cvariance 或者兩者皆有的問題。其中,high bais就是欠擬合,high variance就是過擬合。

但是我們在考慮learning curve以前,我們需要先做一個工作,model selection。model selection的目的主要是有個:1.引入交叉驗證集的概念。2.解釋清楚high bias和 high variance這兩個概念 3.闡述清楚如何去選擇一個更合適的模型,也就是如何確定更合適的參數d,λ,即搞清楚d,λ和bias,variance之間的關係。

理清一下:我們接下來講清楚兩個內容:1.model selection 2.learning curve

2.1 我們解決模型選擇的問題。

模型選擇主要設計到兩個過程和三個參數:1. 多項式次數d 2. 正則化係數λ 3. 特徵Θ

2.1.1 這裏引入cross validation set並且解釋清楚第一個過程:如何選擇d

做模型選擇的時候,我們首先要做的事情是確定degree of polynomial。增加一個新的參數d 來表示每一個hypothesis的degree。我們假設有k個不同的假設,每一個k對應了h(x) 的最高次方數。這個時候我們要做的事情就是要確定這個最合適的d 。於是參考前面的做法,我們在訓練集上將k個假設的參數向量Θ 都算出來,然後再計算每個假設的Jtest(Θ) ,選最小者的那個假設。於是我們就把d 確定了下來。但這又給我們帶來了新的問題,我們已經把所有的數據都用掉了,但是這個時候我們只確定了degree,並沒有考慮到我們選出來的這個假設對新樣本的適應能力(generalization),或者這樣來理解:我們的每一個未知參數都需要一部分數據來做訓練和測試。到目前爲止,我們有了兩個參數,分別是Θd 。又考慮到數據的有限性 + degree和generalization的驗證之間的無關性(猜測),所以直接就把訓練集作爲公共的訓練集,然後分別驗證兩個參數。於是我們就有了6:2:2的訓練集:交叉驗證集:測試集。
一般步驟如下:
a. k個d訓練Θ(k)
b. 在驗證集上確定d ,也就是考慮滿足minJcv(Θ)d
c. 在測試集上估計泛化的能力,也就是Jtest(Θ(d))
以上是關於d的選擇思想。我們輸入不同的d,最後得到一個d

2.1.2 接下來我們來解釋清楚high bias和high variance這兩個概念

我們的test error 是由bias² 和variance組成
bias是迴歸值的期望與實際值之間的差距
variance是迴歸曲線的波動程度
具體的數學過程這裏不多敘述。

這裏重點其實是在於我們怎麼去區分這兩類不同的情況:
區分bias和variance其實是要從Jtrain 着手的,因爲high bias代表着underfit,high variance代表着overfit 這兩個不同狀態下Jcv 或者Jtest 都是很高的,而在underfit的時候Jtrain 高,overfit的時候Jtrain
這裏寫圖片描述

2.1.3 最後我們來考慮第二個過程:λ的選擇

λ的選擇,也是通過類似選擇d的方式來進行。
a. 選擇k個λ,然後分別計算使得min Jλ(θ)θ(k)
b. 代入Jcv(θ) ,取min Jcv(θ) 所對應的那個λ,作爲我們選定的λ
c. 代入計算Jtest(θ)

d vs λ
目的 都要求一個合適的參數
輸入 都是要進行比較的多個參數(不妨設k)
過程1 訓練k個使得min J(θ) 的θ 求λ時,θ的訓練要用帶有正則化項(懲罰項)的Jλ(θ) ,而求d時,訓練θ不用帶懲罰項
中間輸出 θ(k)
過程2 min Jcv(θ)
最終輸出 要求的參數d或者λ,並且記錄對應的θ,便於計算Jtest(θ)


最後我們總結一下d,λ和high bias,high variance以及error之間的關係。

  • 在欠擬合的情況下,degree小,λ大 這個時候JtrainJcv ,並且都很大

  • 在過擬合的情況下,degree大,λ小,這個時候JcvJtrain

用圖表來概括d和λ是怎麼引發high bias和high variance的問題的

high bias high variance
d 太小 太大
λ 太大 太小

2.2 接下來我們又要回到learning curve的內容

首先是理想狀態下的learning curve
理想狀態下的learing curve,x軸是m(訓練集的數量),y軸是error。我們在座標平面內表示不帶λ的JtrainJcv ,於是,我們可以看到,m↑時,Jtrain ↑,Jcv ↓,並逐漸趨於平緩,兩曲線之間有一個距離不算大的gap

接下來是high bais情況下的learning curve
很明顯,兩條曲線的升降趨勢沒有太大變化,但是升降的幅度(也就是收斂的速度)快了很多,兩者之間的gap極小,幾乎貼近(因爲數量多了以後,在訓練集和驗證集上的表現不會有太大的差別)。另外一個值得注意的地方是,兩條曲線的收斂值都比之前要大,也就意味着large error

從而,我們知道,在high bias的情況之下,增加訓練集數量並沒有太多幫助

最後是high variance情況下的learning curve
同樣地,曲線的升降趨勢沒有太大變化,只是收斂的速度b似乎變慢了,比理想狀態下還要慢,在同樣的m情況下,gap變大了很多。但是有意思的是,隨着m的增大,兩條曲線最終還是會逐漸靠攏。

於是,我們就知道了,增加訓練集數量可能對high variance的情況助益更大


3. 有針對性地改善現有算法

我們前面已經總結了欠擬合和過擬合狀態下d和λ的狀態,如果我們想要改善所出現的問題,我們就可以從d,λ和m上下手

所處狀態 high bias high variance
d 太小 太大
λ 太大 太小

如何解決 high bias high variance
d 增大d 減小d
λ 減小λ 增大λ
m 無能無力 增加m


把上面的表格表達成更易理解的語言,就可以回到我們一開始的問題

1.增加訓練數據 ———-> 解決過擬合 m↑
2.減少特徵 ———-> 解決過擬合 d↓
3.增加特徵 ———-> 解決欠擬合 d ↑
4.增加多項式特徵 ———-> 解決欠擬合 d ↑
5.減小λ ———-> 解決欠擬合 λ↓
6.增加λ ———-> 解決過擬合 λ↑

至此,我們就解決了我們一開始提出的三個問題。

ps:文中所有圖的來源是Ng的課程視頻截圖和講義截圖

======================================
其他的一些想法

我們做這些的目的就是減少error

這裏有兩個問題,一個是爲什麼只用了traing set 和cross validation set?另外一個是究竟怎麼去判斷大和小的問題

  1. 驗證集和測試集的本質都是用來做測試的數據,只是用途不一樣,一個用來測試degree 另外一個用來測試θ

  2. d,λ,m到底是大還是小我們其實不用知道,因爲我們使用的這三個參數其實是一個相對的大小。我們只要去比較JtrainJcv 的大小,然後根據我們判斷出來的情況,決定是在現有的參數基礎上往增加的方向還是減小的方向即可。

3.彩蛋。作者本人可見

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章