吴恩达《机器学习》学习笔记十一——应用机器学习的建议
吳恩達《機器學習》學習筆記十一——應用機器學習的建議
- 一、訓練完模型后下一步要做什么
 - 二、評估算法與模型選擇
 - 1.訓練集與測試集
 - 2.訓練/測試步驟
 - 3.模型選擇
 - 4.數據集新的劃分——驗證集的加入
 
- 三、偏差與方差
 - 1.偏差與方差的理解
 - 2.正則化和偏差方差的關系
 - 3.學習曲線
 
- 四、決定接下來要做什么
 
經過前十次筆記的學習,已經掌握了線性回歸、邏輯回歸和神經網絡三種經典的機器學習算法,并學會了使用正則化來防止過擬合。下面將跳出具體的算法,學習對機器學習模型的評估以及應用過程中優化的一些建議。
一、訓練完模型后下一步要做什么
在設計機器學習的系統時,能夠明白如何選擇一條最合適、最高效的道路是一切的源頭,如果沒有合適的技巧,可能會在不斷地嘗試過程中浪費很多時間,比如選擇什么模型、是否要特征映射、選擇哪些特征、是否要花時間多采集數據等等。這些事情可能既花費很多時間,但最后還可能對系統性能的提升沒有幫助。
所以下面會給出一些建議和指導,幫助開發者明白怎樣進行選擇是有益于模型性能提升的。具體來說,假如你在開發一個機器學習系統或想試著改進一個機器學習系統的性能,你應該如何決定,接下來該選什么操作。
為了更形象地說明,用房價預測的模型來作為例子:
 
 假設我們已經完成了帶有正則化的線性回歸模型來預測房價,代價函數如上圖所示,但是當將訓練好的模型用于一組新的數據來進行預測時,發現有很大的誤差,那么接下來我們該怎么做來進一步改善這個模型?
下面是可能進行的一些嘗試:
 
 比如可能會想是數據樣本不夠要去獲取更多的訓練樣本;
 可能是特征太多過擬合了所以要減少一些特征的數量;
 也可能是特征數量太少要增加一些;
 也可能是線性模型太簡單要加入一些多項式特征來增加模型復雜度;
 還可能想到調節λ等的一些超參數。
這些嘗試可能會非常耗費時間,而且最關鍵的是,如何選擇很可能是憑人們的感覺,這樣就有太大的主觀性。
但是有一系列簡單的方法,能讓你事半功倍,快速地排除一些對模型的優化沒有效果的可能選項,大大地節省嘗試的時間。
下面將介紹怎樣評估機器學習算法的性能,然后將介紹這種能夠事半功倍的方法——機器學習診斷法,這是一種測試,通過測試,你可以知道算法在哪里出現了問題,這也就是說,想要改進算法性能,應該進行什么樣的嘗試才是有意義的。
 
二、評估算法與模型選擇
在這之前,評估假設函數好壞與否是通過代價函數值來判斷的。但是在訓練集上代價函數小并不能說假設函數一定好,也可能在新的測試集上表現很差,也就是過擬合現象的存在。
過擬合現象我們還可以通過畫出假設函數查看與數據樣本的擬合曲線來判斷,但是當你的特征很多的時候,如下圖所示,假設函數h(x)也是無法可視化的。因此我們需要另一種評估假設函數的方法。
 
1.訓練集與測試集
一般來說,對于一個數據集,我們在訓練之前需要將其進行劃分為兩部分:
 
 要分為訓練集和測試集兩部分,一般的原則是,70%的數據當做訓練集,30%的數據當做測試集,當然,在劃分之前要打亂數據,保證劃分的隨機性。
2.訓練/測試步驟
使用訓練集對參數進行優化,最小化代價函數J(θ);然后用訓練好的參數去計算測試集上的代價函數值,測試模型的泛化能力。
線性回歸:
 
 邏輯回歸:
 
3.模型選擇
如果你不知道你的模型應該用哪些多項式特征,或者不知道正則化系數應該設置成多少是最合適的,這類問題被稱為模型選擇問題。
下面看一個模型選擇的例子:
 
 選擇具體用多少次冪的特征組合來擬合數據比較好,我們需要對每個模型訓練出它們各自的參數,并計算出各自對應的測試集上的誤差,選擇一個較小的作為最終的模型,但是這樣也不能說明它的泛化性能一定好,因為測試集已經用于選擇模型了,沒有額外的數據來衡量它的泛化性能,只是一個樂觀的估計。
4.數據集新的劃分——驗證集的加入
相比于之前將數據集劃分為訓練集和測試集兩種,現在我們將數據集劃分為三部分:訓練集、驗證集和測試集,訓練集用于訓練模型,驗證集用于模型選擇,測試集用于測試模型的泛化能力。
 
 它們相應的代價函數:
 
 這邊不同的是,之前選擇模型的時候是通過測試集誤差來選擇的,現在通過驗證集誤差來選擇:
 
 那么測試集就可以來衡量它的泛化能力了。
三、偏差與方差
當運行一個學習算法時,如果這個算法的表現不理想,那么多半是出現兩種情況,要么是偏差較大,要么是方差較大;換句話說,要么是欠擬合問題,要么是過擬合問題,在這種情況下,搞清楚是偏差問題還是方差問題或兩者都有關系是非常重要的,因為這樣能很快找到有效的解決方法和途徑來改進算法。
1.偏差與方差的理解
回顧一下線性回歸的欠擬合和過擬合的情況:
 
 前面介紹了訓練集和驗證集的概念,這里我們來看一下它們隨著假設函數的次數變高,它們的變化:
 
 圖中橫坐標表示多項式的次數d,縱坐標表示誤差即代價函數的值。那么,當d很小時,假設函數很簡單,是欠擬合的情況;當d很大時,假設函數過于復雜,是過擬合的情況。對于訓練集誤差,欠擬合時誤差很大,隨著假設函數變復雜,誤差會越來越小,過擬合時會非常小,如圖中紫紅色的曲線所示;而對于驗證集誤差,欠擬合和過擬合時的誤差都會很大,即泛化能力很差,只有合理擬合的情況才會相對比較小,如圖中大紅色曲線所示。
從這張圖中我們可以來區分偏差和方差區域:
 
 左邊的部分是偏差高的情況,它對應著欠擬合,特點是訓練集和驗證集的誤差都很高;右邊的部分是方差高的情況,它對應著過擬合,特點是訓練集誤差很小,但是驗證集誤差很大。
2.正則化和偏差方差的關系
正則化可以很好的防止過擬合,那么正則化和偏差方差又有什么關系呢?先來看一個例子:
 
 這是帶有正則化的線性回歸,正則化系數的選擇會對結果產生很大影響:當λ很大時,參數都會變得接近于0,假設函數近似等于一個常數;當λ很小時,起不到太大防止過擬合的作用,假設函數又會過于復雜,所以選擇這個系數非常重要。
這邊我們先給出一些表達式:假設函數、帶正則化的代價函數、以及三個數據集上不帶正則化的代價函數表達式,如下所示:
 
 然后我們看一下對正則化系數λ進行模型選擇的過程:
 
 和前面選擇多項式次數的情況非常相似,求出每種λ對應模型的參數,然后選擇其中在驗證集上誤差最小的作為最終的模型,測試集誤差來衡量其泛化能力。
那么改變正則化系數λ對訓練集和驗證集的誤差會有什么影響呢?
 
 圖中橫坐標為正則化系數λ,縱坐標為代價函數的值。當λ很小時,對應著過擬合的情況,所以訓練誤差小,驗證誤差大;當λ很大時,對應著欠擬合的情況,所以訓練誤差和驗證誤差都大。圖中藍色的曲線是訓練集誤差,紫紅色曲線是驗證集誤差;左邊對應高方差情況,右邊對應高偏差情況。
3.學習曲線
如果你想檢查你的學習算法運行是否一切正常,或者希望改進算法的表現,那么繪制學習曲線是非常有用的,這是一個很好的工具。可以用學習算法來判斷一個學習算法是否處于偏差、方差問題,或者是兩者都有。
先從一個例子來理解一些學習曲線:
 
 注意圖中橫坐標是訓練集樣本的個數,縱坐標是誤差,那么一個確定的假設函數的形式,在訓練集上,當訓練樣本很少的時候很容易擬合,而且誤差會很小,隨著樣本數越來越多,平均誤差的值也將越來越大,所以訓練集上的代價函數的變化如藍色曲線所示;但是對于驗證誤差來說,訓練樣本少使得模型的泛化能力較弱,所以驗證集上的誤差較大,而隨著訓練樣本增多,模型學習的越來越好,泛化能力逐漸變強,所以驗證集上的代價函數的變化如紫紅色曲線所示。
上面介紹的是一般情況,下面我們看一下特例,首先是高偏差的學習曲線:
 
 高偏差的情況就是欠擬合的情況,從上面右邊的圖可以看出來,增大數據樣本到一定程度,訓練誤差和驗證誤差的變化就都不會太大了,所以變化曲線是左邊圖中所示,它們都趨向于一個較大的值然后平穩發展。所以遇到高偏差的情況,增大數據樣本改善不大。
然后是高方差的情況:
 
 高方差的情況就是過擬合的情況,隨著訓練數據的增多,過擬合還是會過擬合,但是平均誤差也會慢慢地上升,而驗證誤差則會慢慢的下降,特點是驗證誤差與訓練誤差之間有比較大的間隔。但是隨著數據樣本的增多,可以看到對學習算法還是有所改善的。
四、決定接下來要做什么
有了上面的知識,知道如何評估算法、什么是模型選擇、偏差與方差以及學習曲線的概念,我們就可以根據評估算法的結果來進行相應的嘗試,使得模型性能得以優化,一些明顯無意義的操作可以直接不用管。讓我們再回到開頭的問題:
 
 這時就可以理解這些操作能夠各自應對什么問題:
增加訓練數據是應對高方差的;
 減少特征數量是應對高方差;
 增加額外的特征與增加多項式特征是應對高偏差;
 減小正則化系數λ是應對高偏差;
 增大正則化系數是應對高方差。
最后,我們將以上的知識結合到神經網絡模型中,因為神經網絡是目前比較流行的模型:
 
 簡單的神經網絡會欠擬合,復雜的神經網絡容易過擬合,具體怎么選擇神經網絡的層數以及每個隱藏的神經元個數,可以用到上面模型選擇的方法,劃分數據集,用驗證集選出最合適的模型。
總結
以上是生活随笔為你收集整理的吴恩达《机器学习》学习笔记十一——应用机器学习的建议的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: QT安装和Hello,world
 - 下一篇: [FPGA]基于FPGA的数字跑表