在整個機器學習任務的流程中,咱們須要在數據集上訓練機器學習模型,找到一個比較「好」的假設。可是,有些假設在已知數據集上表現很好,在新數據上的性能卻不好,錯誤率比較高,這也就是咱們常說的「過擬合」。那麼,咱們如何解決這種類型的問題呢?算法
通常來講,評價機器學習模型的性能,主要看模型在未知數據上的表現。所以,當咱們拿到一個數據集之後,不能立刻進行模型的訓練,而是須要把數據集分割成兩部分,其中一部分用於訓練,而另外一部分則用來評估模型的好壞。其中用於訓練的數據稱爲訓練集,用來評估的數據稱爲測試集。這樣,咱們就儘量準確地評價模型的性能。通常而言,訓練集佔整個數據集的70%,測試集佔30%。機器學習
假設咱們有一堆不一樣階數的多項式線性迴歸模型,如何找到在數據集上表現最好的模型呢?咱們的方法是在訓練集上訓練這麼一堆不一樣階數的多項式模型,而後在未知數據上評價它們的性能,最後選擇一個「最好」的模型。這時,咱們須要把數據分紅訓練集,驗證集,測試集三個部分。咱們在訓練集上學習模型參數,在驗證集上調整超參數,最後在測試集上評估模型的泛化性能。通常地,訓練集、驗證集和測試集的比例爲60%/20%/20%;當數據量很是大時,能夠按照80%/10%/10%的比例劃分數據集。經過這種方法,咱們就能夠選擇出合適的模型。性能
下面的圖片描述了方差和誤差的關係。
假設紅色的靶心區域是樣本的真實值,藍點爲模型對樣本的預測值。當藍點從靶心逐漸向外移動時,預測效果逐漸變差。很容易看出有兩副圖中藍點比較集中,另外兩幅中比較分散,它們描述的是方差的兩種狀況。藍點較集中意味着方差較小,較分散則意味着方差較大。再從藍點與紅色靶心區域的位置關係,靠近紅色靶心的屬於誤差較小的狀況, 遠離靶心的屬於誤差較大的狀況。
顯然,模型的誤差較高,說明此時模型並無從數據學習到什麼東西,模型在訓練集和數據集上的表現都不好,模型處於欠擬合狀態。當模型的方差較高時,說明模型能夠較好地擬合訓練數據集,而在驗證集和測試集上的性能較差,此時模型處於過擬合狀態。咱們的目的就是找到一個模型,它在訓練集和驗證集上的偏差都比較低。
前面咱們提到,正則化技術能夠用來解決模型的過擬合問題,其中懲罰係數$\lambda
$表示對模型參數的懲罰程度。那麼,咱們如何選擇一個合適的懲罰係數呢?一般,咱們有如下選擇步驟:學習
使用選擇的模型\(\Theta^*\)和懲罰係數\(\lambda^*\)在測試集上進行測試並觀察其泛化性能測試
當模型的誤差較大時,隨着訓練數據的增長,訓練偏差與測試偏差會趨近。
而當模型的方差較大時,隨着訓練數據的增長,訓練偏差與測試偏差之間會有較大的。
爲了解決方差和誤差較大的問題,課程最後給了幾條建議:spa