機器學習中的過擬合
來自專欄人工智慧邂逅量化投資8 人贊了文章
成千上萬的數據科學新手會在不知不覺中犯下一個錯誤,這個錯誤可以一手毀掉你的機器學習模型,這並不誇張。你知道是什麼嗎?
我們現在來討論應用機器學習中最棘手的障礙之一:過擬合(overfitting)。
在本文中,我們將詳細介紹過擬合、如何在模型中識別過擬合,以及如何處理過擬合。最後你會學會如何一勞永逸地處理這個棘手的問題。你將讀到下面這些內容:
- 過擬合的例子
- 信號與噪音
- 擬合優度
- 過擬合和欠擬合
- 如何檢查過擬合
- 如何避免過擬合
過擬合的例子
如果我們想根據一個學生的簡歷預測她是否會獲得面試機會。現在,假設我們從10000份簡歷的數據集及其結果中訓練模型。接下來,我們在原始數據集上嘗試這個模型,它預測結果的準確率達到99%……哇!但這是個壞消息。當我們在簡歷的新(「沒見過的」)數據集上運行模型時,我們只能獲得50%的準確度…
我們的模型從訓練數據到新數據的泛化能力並不好。
這被稱為過擬合,也是機器學習和數據科學中的常見問題。事實上,過擬合在現實世界中也一直在發生著。看看這樣的新聞報道:
信號與噪音
您可能聽說過Nate Silver著名的《信號與噪音》一書。在預測建模中,您可以將「信號」視為希望從數據中學習到的真正底層模式。另一方面,「噪音」指的是數據集中無關的信息或隨機性。例如,假設您正在建模兒童身高與年齡的關係。如果您對大部分人口進行抽樣,您會發現一個非常明確的關係:
這就是是信號。然而,如果你只能對當地的一所學校進行抽樣調查,這種關係可能會更加複雜。 它會受到異常值(比如,爸爸是NBA球員的孩子)和隨機性(例如在不同年齡段進入青春期的孩子)的影響。
「噪音干擾了信號」
這成為機器學習的用武之地,一個運行良好的機器學習演算法能將信號從雜訊中分離出來。
如果演算法過於複雜或靈活(例如,它有太多的輸入特性或它沒有適當的正則化),它最終可能「記住噪音」而不是找到信號。
這個過擬合模型將基於這些雜訊進行預測。它將在訓練數據上表現得異常出色……但在新的、未見過的數據上表現得非常糟糕。
擬合優度
在統計學中,擬合優度是指模型的預測值與觀測值(真實)的匹配程度。一個學習了雜訊而不是信號的模型被認為是「過擬合」的,因為它適合訓練數據集,但與新數據集的擬合度較差。
過擬合和欠擬合
通過觀察相反的問題,我們可以更好地理解欠擬合。 當一個模型過於簡單時,因為它的特性太少,或者過於正則化,就會出現欠擬合現象,這使得它在學習數據集時不夠靈活。簡單的模型在預測結果上往往有較小的方差和較大的偏差(見:偏差-方差權衡)。另一方面,複雜的模型往往在預測中有更大的方差。
偏差和方差都是機器學習中預測誤差的兩種形式。
通常,我們可以減少由偏差引起的誤差,但同時可能會增加由方差帶來的誤差,反之亦然。太簡單(高偏差)與過於複雜(高方差)之間的權衡是統計和機器學習中的關鍵概念,也是影響所有監督學習演算法的關鍵概念。
如何檢查過擬合
過擬合以及機器學習的一個關鍵挑戰是,在我們實際測試之前,我們無法知道模型對新數據的執行情況。為了解決這個問題,我們可以將初始數據集拆分為單獨的訓練和測試子集。
這種方法可以估計出我們的模型在新數據上的表現。
如果我們的模型在訓練集上比在測試集中表現得好得多,那麼我們很可能會過擬合。
例如,如果我們的模型在訓練集上有99%的準確率,但在測試集上只有55%的準確率,那將是一個很危險的信號。
另一個建議是從一個非常簡單的模型開始,以此作為基準。
然後,當您嘗試更複雜的演算法時,您將有一個參考基準來查看額外的複雜性是否值得。這是奧卡姆剃刀試驗。如果兩個模型具有類似的性能,那麼通常應該選擇比較簡單的一個。
如何避免過擬合
檢查過擬合是有用的,但它不能解決問題。幸運的是,有幾個方法您可以嘗試。以下是一些最常用的過擬合解決方案:
1.交叉驗證
交叉驗證是預防過擬合的一個強有力措施。
將您的初始訓練數據拆分成多個數據集(類似於迷你火車),使用這些拆分子集來調整模型,這是一個聰明的想法。在標準的K-fold交叉驗證中,我們將數據劃分為K個子集,稱為「摺疊(folds)」。然後我們迭代地在K-1個摺疊上訓練演算法,同時使用剩餘的摺疊作為測試集。
交叉驗證允許您僅使用原始訓練集來調整超參數。這使您可以將測試集保存為真正「未見過」的數據集,以便選擇最終模型。
2.使用更多數據
它不會每次都有效,但是使用更多數據進行訓練可以幫助演算法更好地檢測到信號。
在早期的兒童身高與年齡建模的例子中,很明顯如何抽樣更多的學校將有助於您的模型。當然,情況並非總是如此。如果我們只是添加更多的雜訊數據,這種技術將無濟於事。這就是為什麼您應該始終確保您的數據是乾淨和相關的。
3.刪除無用特徵
有些演算法有內置的特徵選擇。 您可以通過刪除不相關的輸入特性來手動改進它們的通用性。
一種有趣的方法是通過描述每個特性是如何融入模型的。如果很難證明一些特性的存在合理性,說明這些特徵是沒必要的。
4.及時中止
當您迭代訓練學習演算法時,您可以度量模型的每次迭代的執行情況。
當迭代至一定次數之前,新的迭代會不斷改進模型。然而,在那之後,模型的泛化能力會隨著訓練數據開始過擬合而減弱。
現在,這種方法主要用於深度學習,而其他的方法(如正則化)更適合於經典的機器學習。
5.正則化
正則化是指人為地迫使模型變得更簡單的一系列技術。這個方法將取決於你使用的模型類型。例如,您可以修剪決策樹,在神經網路上使用dropout,或者在回歸中向代價函數添加一個懲罰參數。
通常,正則化方法也是一個超參數,這意味著它可以通過交叉驗證進行調優。
6.集成學習
集成(Ensembling)是一種機器學習方法,用於將多個不同模型的預測組合在一起。
集成有幾種不同的方法,但最常見的兩種是:
Bagging:降低複雜模型過擬合的可能性。
- 它同時訓練大量「強大」的模型。
- 一個「強大」的模型是一個相對不受約束的模型。
- 然後將所有「強大」的模型結合在一起,以「平滑」他們的預測。
Boosting:改進簡單模型的預測能力。
- 它訓練大量「弱」的模型。
- 一個「弱」模型是一個受約束的模型(例如,你可以限制每個決策樹的最大深度)。
- 每個模型都專註於從之前的錯誤中學習。
- 然後把所有的弱學習者組合成一個強大的學習者。
雖然Bagging和Boosting都是集成方法,但它們從相反的方向解決問題。Bagging使用複雜的基礎模型,試圖「平滑」他們的預測,而Boosting使用簡單的基礎模型,並試圖「提高」他們的總複雜度。
原文鏈接:《機器學習中的過擬合》
https://u.wechat.com/MM-vsIjPjNqE2IRIKN5E2CQ (二維碼自動識別)
推薦閱讀:
※iForest (Isolation Forest)孤立森林 異常檢測 入門篇
※Day6-《The Introduction of Statistical Learning》學習筆記
※[貝葉斯九]之EM演算法
※談談機器學習與數據分析中的問題定義
※一起來學西瓜書! 第二章 模型評估與選擇