Stanford机器学习笔记-6. 学习模型的评估和选择
6. 學(xué)習(xí)模型的評估與選擇
Content
6. 學(xué)習(xí)模型的評估與選擇
6.1 如何調(diào)試學(xué)習(xí)算法
6.2 評估假設(shè)函數(shù)(Evaluating a hypothesis)
6.3 模型選擇與訓(xùn)練/驗證/測試集(Model selection and training/validation/test sets)?
6.4 偏差與方差
6.4.1 Diagnosing bias vs. variance.?
6.4.2 正則化與偏差/方差(Regularization and bias/variance)?
6.5 學(xué)習(xí)曲線(Learning Curves)
6.6 調(diào)試學(xué)習(xí)算法
我們已經(jīng)學(xué)習(xí)了許多有用的學(xué)習(xí)模型(線性回歸,Logistic回歸,神經(jīng)網(wǎng)絡(luò)),但是當(dāng)要解決一個實際問題時,以下問題是我們要考慮的:
- 如何知道我們所設(shè)計的模型是有用的或者較好的?
- 當(dāng)模型應(yīng)用的不理想時,我們應(yīng)該從哪些方面進(jìn)行改進(jìn)?
- 如何針對具體問題選擇學(xué)習(xí)模型?
下面將針對上述問題提出建議。
6.1 如何調(diào)試學(xué)習(xí)算法
現(xiàn)在假設(shè)我們已經(jīng)實現(xiàn)了如下的一個正則化的線性回歸模型用于預(yù)測房價
根據(jù)已有的訓(xùn)練集,我們已經(jīng)將該模型訓(xùn)練完畢。但是,當(dāng)我們需要在新的數(shù)據(jù)集上進(jìn)行房價的預(yù)測時,發(fā)現(xiàn)預(yù)測的結(jié)果和實際有很大的誤差。下面我們應(yīng)該做什么?我們可以從下面的一些角度考慮:
- 獲取更多的數(shù)據(jù)量
- 有時數(shù)據(jù)量大并沒有幫助
- 通常數(shù)據(jù)量越大,學(xué)習(xí)模型訓(xùn)練得越好,但是即使這樣,也應(yīng)該做一些初步實驗(見6.5節(jié) 學(xué)習(xí)曲線)來確保數(shù)據(jù)量越大,訓(xùn)練越好。(如果一開始就用大量的數(shù)據(jù)來訓(xùn)練模型,將會耗費大量的時間:收集數(shù)據(jù),訓(xùn)練模型)
- 減少特征量
- 細(xì)心的從已有的特征量中選出一個子集
- 可以手工選擇,也可以用一些降維(?dimensionality?reduction)技術(shù)
- 增加額外的特征量
- 有時并不起作用
- 仔細(xì)考慮數(shù)據(jù)集,是否遺漏了一些重要的特征量(可能花費較多的時間)
- 添加的特征量可能只是訓(xùn)練集的特征,不適合全體數(shù)據(jù)集,可能會過擬合
- 添加多項式的特征量
- 減少正則化參數(shù)
- 增加正則化參數(shù)
可以發(fā)現(xiàn),我們似乎有很多種方法來改善學(xué)習(xí)模型,但是,有些方法可能要花費很多時間(或許還不起作用),有些方法可能是矛盾的。所以,需要一種方式來給我們指明方向:到底應(yīng)該采用哪種或哪些方式來優(yōu)化模型。我們將這種方式稱為機(jī)器學(xué)習(xí)診斷(Machine Learning Diagnostics)。機(jī)器學(xué)習(xí)診斷是一種測試法,能夠深入了解某種算法到底是否有用。這通常也能夠告訴我們,要想改進(jìn)一種算法的效果,什么樣的嘗試才是有意義的,從而節(jié)省時間,減少不必要的嘗試。
6.2 評估假設(shè)函數(shù)(Evaluating a hypothesis)
當(dāng)我們確定學(xué)習(xí)算法的參數(shù)的時候,我們考慮的是選擇使訓(xùn)練誤差最小化的參數(shù)。但我們已經(jīng)知道(見3.1 underfitting and overfitting?),僅僅是因為這個假設(shè)具有很小的訓(xùn)練誤差,并不能說明它就一定是一個好的假設(shè)函數(shù),可能該假設(shè)函數(shù)會過擬合,泛化能力弱。
該如何判斷一個假設(shè)函數(shù)是過擬合的呢?對于簡單的例子,可以對假設(shè)函數(shù) h(x) 進(jìn)行畫圖 然后觀察圖形趨勢。但是,特征量較多時(大于2),畫圖就很難實現(xiàn)。因此,我們需要另一種方法來評估我們的假設(shè)函數(shù)。如下給出了一種評估假設(shè)函數(shù)的標(biāo)準(zhǔn)方法:
假設(shè)我們有這樣一組數(shù)據(jù)組(如圖6-1),我們要做的是將這些數(shù)據(jù)分成兩部分:?訓(xùn)練集和測試集。一種典型的分割方法是按照7:3的比例,將70%的數(shù)據(jù)作為訓(xùn)練集,30%的數(shù)據(jù)作為測試集。這里默認(rèn)原有數(shù)據(jù)集是無序的(隨機(jī)的),所以我們選擇前70%作為訓(xùn)練集,后30%作為測試集,但如果原數(shù)據(jù)集是有序的,我們應(yīng)該隨機(jī)選擇出7:3的數(shù)據(jù)集分別作為訓(xùn)練集和測試集。
圖6-1 大小為10的數(shù)據(jù)集及其劃分
因此,典型的訓(xùn)練和測試方案如下:
其中Jtest(θ)?為測試集上的平均平方誤差(average square error),mtest為測試集的大小。
如果我們使用線性回歸,test set error 則為
另一種定義Logistics回歸的誤差是誤分類率(misclassification error)或稱0/1錯分率(0/1 misclassification).
6.3 模型選擇與訓(xùn)練/驗證/測試集(Model selection and training/validation/test sets)
如何選擇正則化參數(shù)的大小和多項式的次數(shù)是常常面臨的問題,稱之為模型選擇問題。我們已經(jīng)多次接觸到過擬合現(xiàn)象,在過擬合的情況中,參數(shù)非常擬合訓(xùn)練集,那么模型對于相同數(shù)據(jù)組預(yù)測集的預(yù)測誤差不能夠用來推廣到一般情況的,即是不能作為實際的泛化誤差。也就是不能說明你的假設(shè)對于新樣本的效果。
下面我們來考慮模型選擇問題,假如要選擇能最好地擬合數(shù)據(jù)的多項式次數(shù),具體地,我們在次數(shù)為1到10之間應(yīng)該如何做出選擇。
d表示應(yīng)該選擇的多項式次數(shù)。所以,似乎除了要確定的參數(shù)θ之外,我們同樣需要用數(shù)據(jù)集來確定這個多項式的次數(shù)d。
- d =1 (linear)
- d=2 (quadratic)
- ...
- d=10
那么我們可以這樣做:
- 選擇第一個模型(d = 1),然后求訓(xùn)練誤差的最小值,得到一個參數(shù)向量θ1
- 選擇第二個模型(d = 2), 二次函數(shù)模型, 進(jìn)行同樣的過程, 得到另一個參數(shù)向量θ2?
以此類推,最后得到θ10
接下來對所有這些模型,求出測試集誤差
- Jtest(θ1)
- Jtest(θ2)
- ...
- Jtest(θ10)
接下來為了確定選擇哪一個模型最好,即哪一個對應(yīng)的測試集誤差最小。對于這個例子,我們假設(shè)最終選擇了五次多項式模型。
確定模型后,現(xiàn)在我們想知道,這個模型能不能很好地推廣到新樣本。我們可以觀察這個五次多項式假設(shè)模型對測試集的擬合情況,但這里有一個問題是:這樣做仍然不能公平地說明,我的假設(shè)推廣到一般時的效果。其原因在于,我們剛才是使用的測試集和假設(shè)擬合來得到的多項式次數(shù)d 這個參數(shù),這也就是說,我們選擇了一個能夠最好地擬合測試集的參數(shù)d的值。因此,我們的參數(shù)向量θ5在擬合測試集時的結(jié)果很可能導(dǎo)致一個比實際泛化誤差更完美的預(yù)測結(jié)果。換言之,我們是找了一個最能擬合測試集的參數(shù)d,因此我再用測試集來評價我們的模型就顯得不公平了。
為了解決這一問題,在模型選擇中,如果我們想要評價某個假設(shè),我們通常采用以下的方法:給定某個數(shù)據(jù)集,和剛才將數(shù)據(jù)分為訓(xùn)練和測試集不同的是,我們要將其分為三段:
- 訓(xùn)練集?Training set?(60%) - m values
- 交叉檢驗集?Cross validation?(CV) set?(20%)mcv
- 測試集?Test set?(20%)?mtest?
我們隨之也可以定義訓(xùn)練誤差,交叉驗證誤差和測試誤差如下:
因此,我們按如下方式選擇模型:
1. Minimize cost function for each of the models as before
2. Test these hypothesis on the?cross?validation set to generate the?cross?validation error
3. Pick the hypothesis with the lowest cross validation error. e.g. pick?θ5
4. Finally,Estimate generalization error of model using the test set
值得注意的是,在如今的機(jī)器學(xué)習(xí)應(yīng)用中, 也有很多人是用測試集來選擇模型, 然后又同樣的測試集來評價模型的表現(xiàn)報告測試誤差,看起來好像還能得到比較不錯的泛化誤差。如果有很多很多測試集的話,這也許還能行得通,否則得到的測試誤差很大程度要比實際的泛化誤差好。因此最佳做法還是把數(shù)據(jù)分成訓(xùn)練集、驗證集、測試集。
6.4 偏差與方差
6.4.1 Diagnosing bias vs. variance
如圖6-2,當(dāng)運行一個學(xué)習(xí)算法時,如果這個算法的表現(xiàn)不理想,那么多半是出現(xiàn)兩種情況,要么是偏差比較大(欠擬合),要么是方差比較大(過擬合),能判斷出現(xiàn)的情況是這兩種情況中的哪一種非常重要,因為它是一個很有效的指示器,告訴我們可以改進(jìn)算法的最有效的方法和途徑。
圖6-2 不同模型的擬合情況
現(xiàn)在我們已經(jīng)掌握了訓(xùn)練集,驗證集和測試集的概念。我們就能更好地理解偏差和方差的問題。具體來說,我們沿用之前所使用的訓(xùn)練集誤差和驗證集誤差的定義也就是平方誤差,畫出圖6-3.
圖6-3 多項式次數(shù)與誤差的關(guān)系
d等于1是用線性函數(shù)來進(jìn)行擬合,而在最右邊的這個圖表示更高次數(shù)的多項式的擬合情況。隨著我們增大多項式的次數(shù),我們將對訓(xùn)練集擬合得越來越好,所以如果d等于1時 對應(yīng)著一個比較大的訓(xùn)練誤差,而如果我們的多項式次數(shù)很高時 我們的訓(xùn)練誤差就會很小 甚至可能等于0 因為可能非常擬合訓(xùn)練集。所以,當(dāng)我們增大多項式次數(shù)時,我們不難發(fā)現(xiàn)訓(xùn)練誤差明顯下降。
接下來我們再看交叉驗證誤差,如果d等于1,意味著用一個很簡單的函數(shù)來擬合數(shù)據(jù),此時我們不能很好地擬合訓(xùn)練集(欠擬合),我們會得到一個較大的交叉驗證誤差,而如果我們用一個中等大小的多項式次數(shù)來擬合時,如d等于2,那么我們會得到一個更小的交叉驗證誤差,因為我們找了一個能夠更好擬合數(shù)據(jù)的次數(shù)。但是,如果次數(shù)d太大,比如說d的值取為4 ,那么我們又過擬合了,我們又會得到一個較大的交叉驗證誤差。
具體來說 假設(shè)我們得出了一個學(xué)習(xí)算法,而這個算法并沒有表現(xiàn)地如期望那么好,我們應(yīng)該判斷此時的學(xué)習(xí)算法是正處于高偏差的問題還是高方差的問題。
- 當(dāng)訓(xùn)練誤差和交叉驗證誤差相近且都比較大時,即對應(yīng)圖6-3曲線中的左端,對應(yīng)的就是高偏差的問題
- 相反地,當(dāng)訓(xùn)練誤差較小而交叉驗證誤差遠(yuǎn)大于訓(xùn)練誤差時,即對應(yīng)圖6-3曲線右端,對應(yīng)的是高方差的問題
6.4.2 正則化與偏差/方差(Regularization and bias/variance )
我們知道,算法正則化可以有效地防止過擬合。但正則化跟算法的偏差和方差又有什么關(guān)系呢?對于如下正則化的線性回歸模型
我們分析以下三種情形:
- 第一種情形是正則化參數(shù)λ取一個比較大的值,如等于10000,此時,所有這些參數(shù)θ將被大大懲罰,其結(jié)果是這些參數(shù)的值將近似等于0 并且假設(shè)模型 h(x) 的值將等于或者近似等于。因此我們最終得到的假設(shè)函數(shù)應(yīng)該近似是一條平滑的直線(如圖6-4-(1)),因此這個假設(shè)處于高偏差,對數(shù)據(jù)集欠擬合(underfit)。
- 與之對應(yīng)的另一種情況是λ值很小,比如λ=0,這種情況下,如果我們要擬合一個高階多項式,通常會處于高方差和過擬合(overfitting)的情況(如圖6-4-(3))。因為λ的值等于0相當(dāng)于沒有正則化項 因此會對假設(shè)過擬合。
- 如圖6-4-(2),只有λ取不大不小的值時,才會得到一組對數(shù)據(jù)剛好擬合的參數(shù)值θ。
圖6-4 不同λ取值的擬合情況
現(xiàn)在我們可以按照如下方式選擇出一個最合適的正則化參數(shù) λ:
其中:
與多項式次數(shù)與誤差類似,我們可以畫出λ與誤差的函數(shù)關(guān)系,如圖6-5所示
圖6-5 λ與誤差的關(guān)系
6.5 學(xué)習(xí)曲線(Learning Curves)
有時我們需要檢查學(xué)習(xí)算法運行是否一切正常,或者希望改進(jìn)算法的表現(xiàn)或效果,那么學(xué)習(xí)曲線(Learning Curves)就是一種很好的工具。并且,我們可以使用學(xué)習(xí)曲線來判斷某一個學(xué)習(xí)算法是否處于偏差,方差問題或是二者皆有。下面我們就來介紹學(xué)習(xí)曲線。
學(xué)習(xí)曲線和圖6-5類似,它們的區(qū)別在于學(xué)習(xí)曲線是以訓(xùn)練集的大小m為橫坐標(biāo)。縱坐標(biāo)仍然是訓(xùn)練集誤差Jtrain和交叉檢驗誤差Jcv。
一般情況下的學(xué)習(xí)曲線如圖6-7所示:
- 對于訓(xùn)練集誤差而言,m越小,越容易擬合,誤差越小,換言之,Jtrain隨m的增大而增大。
- 對于交叉檢驗誤差而言,m越小,模型的泛化能力越弱,故誤差越大,換言之,Jcv隨m的增大而減小。
- 當(dāng)m大到一定程度時,訓(xùn)練集誤差和交叉檢驗誤差較接近且都比較小。
圖6-7 一般情況下的學(xué)習(xí)曲線
當(dāng)學(xué)習(xí)算法是高偏差時,如圖6-8所示,此時:
- 對于訓(xùn)練集誤差而言,當(dāng)m很小時,誤差很小,但由于它不能很好的擬合訓(xùn)練集,隨后就會增長較快,達(dá)到一個較穩(wěn)定的值。
- 對于交叉檢驗誤差而言,當(dāng)m很小時,算法的泛化能力非常弱,誤差很大,隨著m的增加,泛化能力稍有提升,誤差會有所減小,但由于學(xué)習(xí)算法本身對訓(xùn)練集誤差較大,故交叉檢驗誤差不會下降太多,最后穩(wěn)定在一個較高的值。
- 在m不太大時,訓(xùn)練集誤差就和交叉檢驗誤差接近,但都比較大。
所以,在高偏差的情況下,增大訓(xùn)練集往往不起作用。
圖6-8 高偏差時的學(xué)習(xí)曲線
當(dāng)學(xué)習(xí)算法是高方差時,如圖6-9所示,此時:
- 對于訓(xùn)練集誤差而言,當(dāng)m很小時,誤差很小,并且由于算法能很好的擬合訓(xùn)練集(過擬合),隨著m的增加,誤差只有少量增加(增加很慢)。
- 對于交叉檢驗誤差而言,當(dāng)m很小時,算法的泛化能力非常弱,誤差很大,隨著m的增加,泛化能力稍有提升,誤差會有所減小,但由于學(xué)習(xí)算法過擬合,泛化能力有限,故交叉檢驗誤差不會下降太多,最后穩(wěn)定在一個較高的值。
- 在m較大時,訓(xùn)練集誤差和交叉檢驗誤差也有一定的差距,此時訓(xùn)練集誤差較小,而交叉檢驗集誤差較大。
所以,在高方差的情況下,增大訓(xùn)練集通常是有效的(減少過擬合)。
圖6-9 高方差時的學(xué)習(xí)曲線
6.6 調(diào)試學(xué)習(xí)算法
經(jīng)過了上面的分析,現(xiàn)在我們對調(diào)試學(xué)習(xí)算法的策略進(jìn)行總結(jié)
- Get more training examples?--> helps to fix high variance
- Not good if you have high bias
- Smaller set of features?--> fixes high variance (overfitting)
- Not good if you have high bias
- Try adding additional features?--> fixes high bias (because hypothesis is too simple, make hypothesis more specific)
- Add polynomial terms?--> fixes high bias problem
- Decreasing?λ?--> fixes high bias
- Increases?λ?--> fixes high variance
對于神經(jīng)網(wǎng)絡(luò)而言,我們需要針對不同的問題設(shè)計不同的網(wǎng)絡(luò)結(jié)構(gòu),通常從下面兩種角度考慮:
- 選擇一個較小的網(wǎng)絡(luò)
- 較少的隱藏層(如1層)和較少的隱藏單元,適用于變量(特征量)較少的情況
- 可能欠擬合,但計算代價較小
- 選擇一個較大的網(wǎng)絡(luò)
- 更多的隱藏層-需要我們決定具體是多少層較好
- 適用于變量較多的情況,
- 可能會過擬合,需要使用正則化來削弱過擬合
- 計算代價更大
通常而言,選擇一層隱藏層或許是比較好的選擇。當(dāng)然,在應(yīng)用神經(jīng)網(wǎng)路時也應(yīng)將已有數(shù)據(jù)集劃分為訓(xùn)練集,交叉檢驗集和測試集。
總結(jié)
以上是生活随笔為你收集整理的Stanford机器学习笔记-6. 学习模型的评估和选择的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Stanford机器学习笔记-1.线性回
- 下一篇: 【目标检测】RCNN算法详解