大白話解釋模型產生過擬合的原因!
一、過擬合的概念?
首先我們來解釋一下過擬合的概念?
過擬合就是訓練出來的模型在訓練集上表現很好,但是在測試集上表現較差的一種現象!下圖給出例子:
我們將上圖第三個模型解釋為出現了過擬合現象,過度的擬合了訓練數據,而沒有考慮到泛化能力。在訓練集上的準確率和在開發集上的準確率畫在一個圖上如下:
從圖中我們能夠看出,模型在訓練集上表現很好,但是在交叉驗證集上表現先好後差。這也正是過擬合的特徵!二、模型出現過擬合現象的原因
發生過擬合的主要原因可以有以下三點:
(1)數據有雜訊
(2)訓練數據不足,有限的訓練數據
(3)訓練模型過度導致模型非常複雜
下面我將分別解釋這三種情況(這裡按自己的理解解釋,歡迎大家交流):
(1)數據有雜訊
為什麼數據有雜訊,就可能導致模型出現過擬合現象呢?
所有的機器學習過程都是一個search假設空間的過程!我們是在模型參數空間搜索一組參數,使得我們的損失函數最小,也就是不斷的接近我們的真實假設模型,而真實模型只有知道了所有的數據分布,才能得到。
往往我們的模型是在訓練數據有限的情況下,找出使損失函數最小的最優模型,然後將該模型泛化於所有數據的其它部分。這是機器學習的本質!
那好,假設我們的總體數據如下圖所示:
(我這裡就假設總體數據分布滿足一個線性模型y = kx+b,現實中肯定不會這麼簡單,數據量也不會這麼少,至少也是多少億級別,但是不影響解釋。反正總體數據滿足模型y)
此時我們得到的部分數據,還有雜訊的話,如圖所示:
(紅色數據點為雜訊)
那麼由上面訓練數據點訓練出來的模型肯定不是線性模型(總體數據分布下滿足的標準模型),比如訓練出來的模型如下:
那麼我拿著這個有雜訊訓練的模型,在訓練集合上通過不斷訓練,可以做到損失函數值為0,但是拿著這個模型,到真實總體數據分布中(滿足線性模型)去泛化,效果會非常差,因為你拿著一個非線性模型去預測線性模型的真實分布,顯而易得效果是非常差的,也就產生了過擬合現象!
(2)訓練數據不足,有限的訓練數據
當我們訓練數據不足的時候,即使得到的訓練數據沒有雜訊,訓練出來的模型也可能產生過擬合現象,解釋如下:
假設我們的總體數據分布如下:
(為了容易理解,假設我們的總體數據分布滿足的模型是一個二次函數模型)我們得到的訓練數據由於是有限的,比如是下面這個:
(我只得到了A,B倆個訓練數據)那麼由這個訓練數據,我得到的模型是一個線性模型,通過訓練較多的次數,我可以得到在訓練數據使得損失函數為0的線性模型,拿這個模型我去泛化真實的總體分布數據(實際上是滿足二次函數模型),很顯然,泛化能力是非常差的,也就出現了過擬合現象!
(3)訓練模型過度導致模型非常複雜
訓練模型過度導致模型非常複雜,也會導致過擬合現象!這點和第一點倆點原因結合起來其實非常好理解,當我們在訓練數據訓練的時候,如果訓練過度,導致完全擬合了訓練數據的話,得到的模型不一定是可靠的。
比如說,在有雜訊的訓練數據中,我們要是訓練過度,會讓模型學習到雜訊的特徵,無疑是會造成在沒有雜訊的真實測試集上準確率下降!
好了,到這裡本文要講的內容已經講完了,我根據自己的理解,試圖通俗的講解產生過擬合的原因,希望能夠讓更多的人有一個直觀的理解~真心希望對大家有幫助,歡迎大家指錯交流~
封面圖片來自於Andrew機器學習課slide!
推薦閱讀:
※學習python入門的個人建議及資料
※現代讀心術:基於fMRI的視覺圖像重建/鑒別
※邊界效應與VOT2015
※網路結構中節點嵌入向量表達(network embedding)方法介紹
※《Image-to-Image Translation with Conditional Adversarial Networks》閱讀筆記
TAG:机器学习 | 深度学习DeepLearning | 自然语言处理 |