今天郭江師兄在實驗室講解了全體機器學習會第一章的知識,大家討論了一下過擬合的知識,這裡我根據自己的理解,整理了一下原因,力求同最通俗的語言來描述,可能不是太嚴謹,但是總體思想能保證正確!
一、過擬合的概念?
首先我們來解釋一下過擬合的概念?
過擬合就是訓練出來的模型在訓練集上表現很好,但是在測試集上表現較差的一種現象!下圖給出例子:
我們將上圖第三個模型解釋為出現了過擬合現象,過度的擬合了訓練資料,而沒有考慮到泛化能力。在訓練集上的準確率和在開發集上的準確率畫在乙個圖上如下:
從圖中我們能夠看出,模型在訓練集上表現很好,但是在交叉驗證集上表現先好後差。這也正是過擬合的特徵!
二、模型出現過擬合現象的原因
發生過擬合的主要原因可以有以下三點:
(1)資料有雜訊
(2)訓練資料不足,有限的訓練資料
(3)訓練模型過度導致模型非常複雜
(1)資料有雜訊
為什麼資料有雜訊,就可能導致模型出現過擬合現象呢?
所有的機器學習過程都是乙個 search 假設空間的過程!我們是在模型引數空間搜尋一組引數,使得我們的損失函式最小,也就是不斷的接近我們的真實假設模型,而真實模型只有知道了所有的資料分布,才能得到。
往往我們的模型是在訓練資料有限的情況下,找出使損失函式最小的最優模型,然後將該模型泛化於所有資料的其它部分。這是機器學習的本質!
那好,假設我們的總體資料如下圖所示:
(我這裡就假設總體資料分布滿足乙個線性模型 y = kx+b, 現實中肯定不會這麼簡單,資料量也不會這麼少,至少也是多少億級別,但是不影響解釋。反正總體資料滿足模型 y)
此時我們得到的部分資料,還有雜訊的話,如圖所示:
(紅色資料點為雜訊)
那麼由上面訓練資料點訓練出來的模型肯定不是線性模型(總體資料分布下滿足的標準模型),比如訓練出來的模型如下:
那麼我拿著這個有雜訊訓練的模型,在訓練集合上通過不斷訓練,可以做到損失函式值為 0,但是拿著這個模型,到真實總體資料分布中(滿足線性模型)去泛化,效果會非常差,因為你拿著乙個非線性模型去**線性模型的真實分布,顯而易得效果是非常差的,也就產生了過擬合現象!
(2)訓練資料不足,有限的訓練資料
當我們訓練資料不足的時候,即使得到的訓練資料沒有雜訊,訓練出來的模型也可能產生過擬合現象,解釋如下:
假設我們的總體資料分布如下:
(為了容易理解,假設我們的總體資料分布滿足的模型是乙個二次函式模型)
我們得到的訓練資料由於是有限的,比如是下面這個:
(我只得到了 a,b 兩個訓練資料)
那麼由這個訓練資料,我得到的模型是乙個線性模型,通過訓練較多的次數,我可以得到在訓練資料使得損失函式為 0 的線性模型,拿這個模型我去泛化真實的總體分布資料(實際上是滿足二次函式模型),很顯然,泛化能力是非常差的,也就出現了過擬合現象!
(3)訓練模型過度導致模型非常複雜
訓練模型過度導致模型非常複雜,也會導致過擬合現象!這點和第一點倆點原因結合起來其實非常好理解,當我們在訓練資料訓練的時候,如果訓練過度,導致完全擬合了訓練資料的話,得到的模型不一定是可靠的。
比如說,在有雜訊的訓練資料中,我們要是訓練過度,會讓模型學習到雜訊的特徵,無疑是會造成在沒有雜訊的真實測試集上準確率下降!
***********************************=分割線******************************==
mysql用大白話解釋 大白話說說mysql索引
前面其實寫了好幾篇關於 mysql 索引的文章了,文章中有具體的例項和 sql 語句,這篇文章我想再用純大白話講講 mysql 索引,文中不涉及具體 sql 我之前甚至想過為啥要用資料庫來儲存資料,用普通的 txt 或者 word 這類檔案不行麼,這個問題其實可以從幾個方面來看,乙個是併發訪問資料加...
大白話解釋 氣泡排序
原理 乙個陣列裡,相鄰的兩個元素進行比較,兩兩比較。使用雙層for迴圈,外層迴圈代表比較的輪數 陣列元素個數 1 內層迴圈代表每輪比較多少次 陣列元素個數 1 public class bubblesort for int i 0 ia j 1 system.out.println arrays.t...
OpenGl 名詞解釋之大白話
變換 opengl中的變換實際上是通過矩陣乘法來實現的,無論是移動 縮放 旋轉,都是通過在當前矩陣的基礎上乘以乙個新的矩陣來達到目的 檢視變換 視 就是看,圖當然就是我所看的 變換 不斷的變化 連線在一起就是指觀察者的位置在不斷的變化,從而導致的就是檢視在不斷的變化 例如 在unity的scene中...