1 過擬合的概念?
首先我們來解釋一下過擬合的概念?
過擬合就是訓練出來的模型在訓練集上表現很好,但是在測試集上表現較差的一種現象!下圖給出例子:
我們將上圖第三個模型解釋為出現了過擬合現象,過度的擬合了訓練數據,而沒有考慮到泛化能力。在訓練集上的准確率和在開發集上的准確率畫在一個圖上如下:
從圖中我們能夠看出,模型在訓練集上表現很好,但是在交叉驗證集上表現先好后差。這也正是過擬合的特征!
2 模型出現過擬合現象的原因
發生過擬合的主要原因可以有以下三點:
(1)數據有噪聲
(2)訓練數據不足,有限的訓練數據
(3)訓練模型過度導致模型非常復雜
下面我將分別解釋這三種情況(這里按自己的理解解釋,歡迎大家交流):
數據有噪聲
為什么數據有噪聲,就可能導致模型出現過擬合現象呢?
所有的機器學習過程都是一個search假設空間的過程!我們是在模型參數空間搜索一組參數,使得我們的損失函數最小,也就是不斷的接近我們的真實假設模型,而真實模型只有知道了所有的數據分布,才能得到。往往我們的模型是在訓練數據有限的情況下,找出使損失函數最小的最優模型,然后將該模型泛化於所有數據的其它部分。這是機器學習的本質!
那好,假設我們的總體數據如下圖所示:
(我這里就假設總體數據分布滿足一個線性模型y = kx+b,現實中肯定不會這么簡單,數據量也不會這么少,至少也是多少億級別,但是不影響解釋。反正總體數據滿足模型y)
此時我們得到的部分數據,還有噪聲的話,如圖所示:
(紅色數據點為噪聲)
那么由上面訓練數據點訓練出來的模型肯定不是線性模型(總體數據分布下滿足的標准模型),比如訓練出來的模型如下:
那么我拿着這個有噪聲訓練的模型,在訓練集合上通過不斷訓練,可以做到損失函數值為0,但是拿着這個模型,到真實總體數據分布中(滿足線性模型)去泛化,效果會非常差,因為你拿着一個非線性模型去預測線性模型的真實分布,顯而易得效果是非常差的,也就產生了過擬合現象!
訓練數據不足,有限的訓練數據
當我們訓練數據不足的時候,即使得到的訓練數據沒有噪聲,訓練出來的模型也可能產生過擬合現象,解釋如下:
假設我們的總體數據分布如下:
(為了容易理解,假設我們的總體數據分布滿足的模型是一個二次函數模型)
我們得到的訓練數據由於是有限的,比如是下面這個:
(我只得到了A,B倆個訓練數據)
那么由這個訓練數據,我得到的模型是一個線性模型,通過訓練較多的次數,我可以得到在訓練數據使得損失函數為0的線性模型,拿這個模型我去泛化真實的總體分布數據(實際上是滿足二次函數模型),很顯然,泛化能力是非常差的,也就出現了過擬合現象!
訓練模型過度導致模型非常復雜
訓練模型過度導致模型非常復雜,也會導致過擬合現象!這點和第一點倆點原因結合起來其實非常好理解,當我們在訓練數據訓練的時候,如果訓練過度,導致完全擬合了訓練數據的話,得到的模型不一定是可靠的。
比如說,在有噪聲的訓練數據中,我們要是訓練過度,會讓模型學習到噪聲的特征,無疑是會造成在沒有噪聲的真實測試集上准確率下降!