我們之所以需要擬合,就是因為我們難以甚至無法獲得全部真實數(shù)據(jù)
如果我們可以獲取完備的真實數(shù)據(jù)集,那么我們壓根就不需要做擬合了,我們只要查詢就好了。
所以,我們能獲取的數(shù)據(jù),以及能夠用于訓(xùn)練的數(shù)據(jù),只是真實數(shù)據(jù)的一部分,而且,我們也是假設(shè),訓(xùn)練數(shù)據(jù)分布與真實數(shù)據(jù)獨(dú)立同分布,所以訓(xùn)練數(shù)據(jù)越多,可以認(rèn)為越接近真實分布。
我們用訓(xùn)練誤差表示模型在訓(xùn)練集上表現(xiàn)好壞
用泛化誤差表示模型在測試集上表現(xiàn)好壞
實際上,訓(xùn)練數(shù)據(jù)分布與真實數(shù)據(jù)分布是有一定偏差的,而且,數(shù)據(jù)本身也存在噪聲。
這就暗示我們,如果我們只用訓(xùn)練數(shù)據(jù)去完美地擬合/訓(xùn)練一個模型M1即,但它在實際測試數(shù)據(jù)上很可能是不完美甚至是很差的即
,這就叫過擬合。
而如果我們連訓(xùn)練數(shù)據(jù)都擬合地很差,那在實際數(shù)據(jù)上一定也很差
,這就叫欠擬合。
泛化誤差
所謂泛化誤差,即訓(xùn)練好的模型使用測試數(shù)據(jù)評測時的誤差。
我們的根本目的是降低泛化誤差,因為訓(xùn)練一個模型,其根本目的是用于預(yù)測未知數(shù)據(jù)而不是訓(xùn)練數(shù)據(jù)。
對于一個真實的訓(xùn)練任務(wù),其樣本值往往是由可解釋的規(guī)律部分和不可解釋的噪音組成的即
e可以認(rèn)為是難以通過模型訓(xùn)練的噪音,我們往往會忽略(因為很小)
所以我們要擬合的部分是f(x),而不是去擬合Y(如果忽略e,那就是擬合Y)
用訓(xùn)練數(shù)據(jù)D訓(xùn)練的模型稱之為 注意此處是戴帽子的f(x)
當(dāng)我們使用相同的算法,但使用不同的訓(xùn)練數(shù)據(jù)D時就會得到多個則
代表了這個模型的期望,即使用某一算法訓(xùn)練模型所能得到的穩(wěn)定的平均水平。
方差variance
代表了這個模型/算法的穩(wěn)定性。我們稱之為方差。
如果方差很大,則代表相同算法在不同訓(xùn)練數(shù)據(jù)上會得到相差很大的結(jié)果,這往往表示模型訓(xùn)練過擬合,不同的擬合曲線相差很大,這樣就會導(dǎo)致對同一個測試樣本,結(jié)果相差大。這表示數(shù)據(jù)的變化會給模型帶來很大的擾動,就像打靶一樣,射點(diǎn)不集中
偏差 bias
而
此稱為偏差bias。注意這里為何不再加一個期望符號E了呢,因為括號內(nèi)兩者都已經(jīng)是定值了,而不是離散值。如果偏差很大,即這個此模型的平均水平與真實值相差太大,簡單來說就是結(jié)果整體跑偏。就像打靶一樣,射點(diǎn)整體偏離靶心。
泛化誤差:
對于泛化誤差,是由模型的損失(這部分可以通過改善模型來減小)再加上不可解釋的噪聲(這是單純數(shù)據(jù)的問題)帶來的損失組成的。
當(dāng)使用MSE作為損失函數(shù)的時候,有
那么有
注意第三項,是一個固定值
所以第三項
所以
即泛化誤差由偏差,方差和不可解釋的噪音組成。
我們能控制的就是偏差和方差,盡可能減少他們
也能看出,過擬合與bias和var有密切關(guān)系:
| 擬合程度 | 模型復(fù)雜度 | bias | var | error | 表現(xiàn) | 改善 |
|---|---|---|---|---|---|---|
| 欠擬合 | 低 | 高 | 高 | 預(yù)測不準(zhǔn) | 提高模型復(fù)雜度,增加迭代,boosting,減小正則參數(shù) | |
| 過擬合 | 高 | 高 | 高 | 敏感易受擾動 | 降低模型復(fù)雜度,增加訓(xùn)練集數(shù)據(jù),特征篩選,提高正則參數(shù),bagging | |
| 好擬合 | 中 | 低 | 低 | 低 | 準(zhǔn)而穩(wěn) |
參考
csdn1
blog1
PRML
bagging & var