建好的網(wǎng)站怎么用橙子建站
在機器學(xué)習(xí)中,當一個算法的預(yù)測非常接近或者直接等于它的訓(xùn)練數(shù)據(jù),導(dǎo)致不能夠準確預(yù)測除了訓(xùn)練數(shù)據(jù)以外的數(shù)據(jù),我們把這種情況稱為過度擬合。算法能夠非常接近甚至就是訓(xùn)練的數(shù)據(jù),是個非常好的事,但是它不能準確預(yù)測除了訓(xùn)練數(shù)據(jù)以外的數(shù)據(jù)就很糟糕了,這就也失去了機器學(xué)習(xí)模型的作用。
機器學(xué)習(xí)算法在構(gòu)造時,它會利用一些樣本數(shù)據(jù)來訓(xùn)練模型。但是當模型在這些樣本數(shù)據(jù)上訓(xùn)練得太久或當這個模型太過復(fù)雜,它就會開始學(xué)習(xí)一些數(shù)據(jù)集中的“噪音”或不相關(guān)的信息。那么當這個模型記住了這些“噪音”,又擬合得太接近訓(xùn)練集,這個模型就會變得過度擬合。這樣得到的模型就不能夠很好地概括新數(shù)據(jù),不能夠很好地概括新數(shù)據(jù)就不能夠很好地執(zhí)行分類和預(yù)測任務(wù)。模型過度擬合的根本原因是訓(xùn)練的數(shù)據(jù)集中有噪音且被模型記住并反映到了權(quán)重上。也就是說訓(xùn)練數(shù)據(jù)集中那些不相關(guān)的信息,甚至是錯誤地信息,被模型記住了,并擬合到模型函數(shù)上,且擬合得非常好,很接近訓(xùn)練數(shù)據(jù)集。這些“噪音”就是湯里掉進了一粒老鼠屎,攪臭一煲湯。
那我們有什么辦法可以提前發(fā)現(xiàn)模型是否存在過度擬合呢?答案是有的。低誤差率和高方差都是存在過度擬合的信號。當我們的模型出現(xiàn)低誤差率或存在高方差時,我們就要考慮模型是否存在過度擬合的問題。
如何避免模型過度擬合呢?
為了避免模型過度擬合,通常不會把整個數(shù)據(jù)集都給模型去訓(xùn)練,而是留出一部分數(shù)據(jù)集作為測試集來檢查模型是否存在過度擬合。 過度擬合的模型對新的(沒有見過的)數(shù)據(jù)的分類或預(yù)測的準確性是很差的。利用這一點,我們就可以用測試集來檢驗?zāi)P褪欠翊嬖谶^度擬合的情況。如果模型對訓(xùn)練數(shù)據(jù)集已能夠達到比較低的誤差率,而對測試集的數(shù)據(jù)去表現(xiàn)高誤差率,那么模型可能存在過度擬合的問題。
過度訓(xùn)練也可能導(dǎo)致模型過度擬合,如果是這種情況,可以早一些結(jié)束模型的訓(xùn)練來避免模型過度擬合。那么具體該什么時候結(jié)束訓(xùn)練呢?停止訓(xùn)練過早或排除太多重要的數(shù)據(jù)都會使模型適得其反。當訓(xùn)練時間太短或訓(xùn)練數(shù)據(jù)相關(guān)性不夠(即數(shù)據(jù)對模型來說不夠重要,用不重要的數(shù)據(jù)來訓(xùn)練會導(dǎo)致輸入與輸出的相關(guān)性變得很差,就是生搬硬套的東西),就會發(fā)生欠擬合。
另外,如果模型太復(fù)雜也會導(dǎo)致過度擬合的問題,要解決這個問題可以通過排除那些不太相關(guān)或相關(guān)性很低的輸入來解決,簡單來說就是排除不重要的數(shù)據(jù),以此來減少模型的復(fù)雜性。
欠擬合與過度擬合一樣對于未見的數(shù)據(jù)的泛化都很差。前面我們說過過度擬合的預(yù)測表現(xiàn)出低誤差率、高方差,而在欠擬合的預(yù)測則表現(xiàn)出高偏差、低方差。隨著模型的學(xué)習(xí)的持續(xù)進行,它的偏差就慢慢減小,當模型變得過度擬合,方差就會隨之變高。模型的訓(xùn)練會從欠擬合轉(zhuǎn)移到過度擬合,我們必須權(quán)衡偏差與方差之間的取舍,即我們的目的是要找到模型在欠擬合與過度擬合之間那個最佳的點,在這個點上偏差方差都是可以接受的。這樣的模型在數(shù)據(jù)集就建立某種主導(dǎo)趨勢,也因此模型得以應(yīng)用到更廣泛的新數(shù)據(jù)上,即泛化能力更好。
怎樣做才能夠了解模型的準確性呢?怎樣才能知道模型擬合是否適度?K-fold交叉驗證是目前用來評價模型準確性最多的方法之一。具體的做法就是把訓(xùn)練數(shù)據(jù)集分成K個大小相等的子集,這些子集在這個方法中被稱為fold,拿出一個fold來扮演測試集,也叫抵抗組(holdout set)或驗證集(validation set),剩下的子集都用來訓(xùn)練模型,重復(fù)這個過程,都到每個子集都扮演過一次測試集。每一輪都會得到一個分數(shù),當進行完所有輪后,對分數(shù)進行平均,用這個平均分來評價整個模型的性能。
我們再來回顧一下如何避免過度擬合的問題?現(xiàn)實世界很多問題都不是簡單的線性關(guān)系,雖然我們常常使用線性模型來幫助我們避免過度擬合的問題。總結(jié)一下解決擬合問題的方法大概有以下這些:
-
提前停止訓(xùn)練:這樣做的原因正如前已經(jīng)提到過那樣,因為訓(xùn)練數(shù)據(jù)中有“噪音”,提前停止,就可以避免模型學(xué)習(xí)了太多“噪音”數(shù)據(jù),如果停止適當,還有可能直接避免了噪音數(shù)據(jù)被模型學(xué)習(xí)到。不過要注意,想法雖好,但是如果停止太早導(dǎo)致模型訓(xùn)練不足,造成欠擬合,停止太晚,導(dǎo)致模型學(xué)習(xí)了太多噪音數(shù)據(jù),造成過度擬合,所以這種方法,我們就要在欠擬合和過度擬合之間做出權(quán)衡,以期在找到一個處于兩者之間的最佳的權(quán)衡點,這個點就是使用這種方式解決擬合問題要找的。
-
使用更多的數(shù)據(jù)來訓(xùn)練模型: 這一點無可質(zhì)疑,只要保證訓(xùn)練數(shù)據(jù)是非常干凈,相關(guān)的,沒有什么噪音的,否則只會讓模型變得復(fù)雜,甚至導(dǎo)致過度擬合。
-
數(shù)據(jù)擴充:訓(xùn)練數(shù)據(jù)是干凈又相關(guān)的,這當然是最好的,其實適時加入一些噪音數(shù)據(jù),據(jù)說可以讓模型更加穩(wěn)定,這樣的操作要有所節(jié)制,否則還是出現(xiàn)過擬合的問題。
-
特征選擇:在構(gòu)建一個模型時,會有很多特征供我們選擇,用來預(yù)測特定的結(jié)果,很多時候這些特征有很多都是彼此重復(fù)的,識別并選擇出最重要的那么特征,排除無關(guān)的,冗余的特征是很重要的。這聽起來是不是很像在做降維的事?不過它們是不一樣的,前者是要把無關(guān)的,重復(fù)的排除掉,后者則是為了減少特征的數(shù)量,但是這些特征是相關(guān)的,不重復(fù)的。但是兩者的目的都是為了簡化模型,使其在訓(xùn)練數(shù)據(jù)集建立起主導(dǎo)趨勢。
-
正則化:當模型過于復(fù)雜導(dǎo)致出現(xiàn)了過度擬合,我們可以通過減少特征的數(shù)量來解決。如果我們不知道哪些特征應(yīng)該去掉,那些應(yīng)該留下?那么下正則化這個工具就派上用場了。具體的做法:正則化對系數(shù)較大的輸入?yún)?shù)施加懲罰,這將會限制模型中的方差。正則化方法有很多,如套索正規(guī)化(lasso regularization)、嶺回歸(ridge regression)、dropout。雖然有這么多正則化方法,但是它們都用于識別和減少數(shù)據(jù)中的噪聲。
-
集成方法:一種機器學(xué)習(xí)技術(shù),通過組合多個模型的預(yù)測結(jié)果來提高預(yù)測準確性和穩(wěn)定性。集成學(xué)習(xí)方法由一組分級器組成。集成學(xué)習(xí)方法的例子有:
決策樹——它們的預(yù)測是聚合在一起決定最優(yōu)結(jié)果的。
袋裝法與推升法—— 袋裝法它會從訓(xùn)練數(shù)據(jù)集中隨機選擇一個樣本集合。每個數(shù)據(jù)點被選中的機會是相等的,都可以被重復(fù)選擇。在選擇出若干個這樣的樣本集合后,模型用這些樣本集合單獨訓(xùn)練。結(jié)果取決于任務(wù)的類型,如果任務(wù)是回歸問題,那么就取這些預(yù)測值的平均值,產(chǎn)生一個更加準確的預(yù)估值,如果是分類問題,就取這些預(yù)測值的大多數(shù)。