機器學習中的過擬合

寬邦科技發表於2019-02-13

成千上萬的資料科學新手會在不知不覺中犯下一個錯誤,這個錯誤可以一手毀掉你的機器學習模型,這並不誇張。你知道是什麼嗎?

我們現在來討論應用機器學習中最棘手的障礙之一:過擬合(overfitting)

在本文中,我們將詳細介紹過擬合、如何在模型中識別過擬合,以及如何處理過擬合。最後你會學會如何一勞永逸地處理這個棘手的問題。你將讀到下面這些內容:

  1. 過擬合的例子

  2. 訊號與噪音

  3. 擬合優度

  4. 過擬合欠擬合

  5. 如何檢查過擬合

  6. 如何避免過擬合

過擬合的例子

如果我們想根據一個學生的簡歷預測她是否會獲得面試機會。現在,假設我們從10000份簡歷的資料集及其結果中訓練模型。接下來,我們在原始資料集上嘗試這個模型,它預測結果的準確率達到99%……哇!但這是個壞訊息。當我們在簡歷的新(“沒見過的”)資料集上執行模型時,我們只能獲得50%的準確度…

我們的模型從訓練資料到新資料的泛化能力並不好。

這被稱為過擬合,也是機器學習資料科學中的常見問題。事實上,過擬合在現實世界中也一直在發生著。看看這樣的新聞報導:

機器學習中的過擬合訊號與噪音

您可能聽說過Nate Silver著名的《訊號與噪音》一書。在預測建模中,您可以將“訊號”視為希望從資料中學習到的真正底層模式。另一方面,“噪音”指的是資料集中無關的資訊或隨機性。例如,假設您正在建模兒童身高與年齡的關係。如果您對大部分人口進行抽樣,您會發現一個非常明確的關係:

機器學習中的過擬合

這就是是訊號。然而,如果你只能對當地的一所學校進行抽樣調查,這種關係可能會更加複雜。 它會受到異常值(比如,爸爸是NBA球員的孩子)和隨機性(例如在不同年齡段進入青春期的孩子)的影響。

噪音干擾了訊號”

這成為機器學習的用武之地,一個執行良好的機器學習演算法能將訊號從噪聲中分離出來。

如果演算法過於複雜或靈活(例如,它有太多的輸入特性或它沒有適當的正則化),它最終可能“記住噪音”而不是找到訊號。

這個過擬合模型將基於這些噪聲進行預測。它將在訓練資料上表現得異常出色……但在新的、未見過的資料上表現得非常糟糕。

擬合優度

在統計學中,擬合優度是指模型的預測值與觀測值(真實)的匹配程度。一個學習了噪聲而不是訊號的模型被認為是“過擬合”的,因為它適合訓練資料集,但與新資料集的擬合度較差。

機器學習中的過擬合

過擬合欠擬合

透過觀察相反的問題,我們可以更好地理解欠擬合。 當一個模型過於簡單時,因為它的特性太少,或者過於正則化,就會出現欠擬合現象,這使得它在學習資料集時不夠靈活。簡單的模型在預測結果上往往有較小的方差和較大的偏差(見:偏差-方差權衡)。另一方面,複雜的模型往往在預測中有更大的方差。

偏差和方差都是機器學習中預測誤差的兩種形式。

通常,我們可以減少由偏差引起的誤差,但同時可能會增加由方差帶來的誤差,反之亦然。太簡單(高偏差)與過於複雜(高方差)之間的權衡是統計和機器學習中的關鍵概念,也是影響所有監督學習演算法的關鍵概念。

機器學習中的過擬合

如何檢查過擬合

過擬合以及機器學習的一個關鍵挑戰是,在我們實際測試之前,我們無法知道模型對新資料的執行情況。為了解決這個問題,我們可以將初始資料集拆分為單獨的訓練測試子集。

機器學習中的過擬合

這種方法可以估計出我們的模型在新資料上的表現。

如果我們的模型在訓練集上比在測試集中表現得好得多,那麼我們很可能會過擬合

例如,如果我們的模型在訓練集上有99%的準確率,但在測試集上只有55%的準確率,那將是一個很危險的訊號。

另一個建議是從一個非常簡單的模型開始,以此作為基準

然後,當您嘗試更復雜的演算法時,您將有一個參考基準來檢視額外的複雜性是否值得。這是奧卡姆剃刀試驗。如果兩個模型具有類似的效能,那麼通常應該選擇比較簡單的一個。

如何避免過擬合

檢查過擬合是有用的,但它不能解決問題。幸運的是,有幾個方法您可以嘗試。以下是一些最常用的過擬合解決方案:

交叉驗證

交叉驗證是預防過擬合的一個強有力措施。

將您的初始訓練資料拆分成多個資料集(類似於迷你火車),使用這些拆分子集來調整模型,這是一個聰明的想法。在標準的K-fold交叉驗證中,我們將資料劃分為K個子集,稱為“摺疊(folds)”。然後我們迭代地在K-1個摺疊上訓練演算法,同時使用剩餘的摺疊作為測試集。

交叉驗證允許您僅使用原始訓練集來調整超引數。這使您可以將測試集儲存為真正“未見過”的資料集,以便選擇最終模型。

機器學習中的過擬合

使用更多資料

它不會每次都有效,但是使用更多資料進行訓練可以幫助演算法更好地檢測到訊號。

在早期的兒童身高與年齡建模的例子中,很明顯如何抽樣更多的學校將有助於您的模型。當然,情況並非總是如此。如果我們只是新增更多的噪聲資料,這種技術將無濟於事。這就是為什麼您應該始終確保您的資料是乾淨和相關的。

刪除無用特徵

有些演算法有內建的特徵選擇。 您可以透過刪除不相關的輸入特性來手動改進它們的通用性。

一種有趣的方法是透過描述每個特性是如何融入模型的。如果很難證明一些特性的存在合理性,說明這些特徵是沒必要的。

及時中止

當您迭代訓練學習演算法時,您可以度量模型的每次迭代的執行情況。

當迭代至一定次數之前,新的迭代會不斷改進模型。然而,在那之後,模型的泛化能力會隨著訓練資料開始過擬合而減弱。

機器學習中的過擬合

現在,這種方法主要用於深度學習,而其他的方法(如正則化)更適合於經典的機器學習

正則化

正則化是指人為地迫使模型變得更簡單的一系列技術。這個方法將取決於你使用的模型型別。例如,您可以修剪決策樹,在神經網路上使用dropout,或者在迴歸中向代價函式新增一個懲罰引數。

通常,正則化方法也是一個超引數,這意味著它可以透過交叉驗證進行調優。

整合學習

整合(Ensembling)是一種機器學習方法,用於將多個不同模型的預測組合在一起。

整合有幾種不同的方法,但最常見的兩種是:

Bagging:降低複雜模型過擬合的可能性。

  • 它同時訓練大量“強大”的模型。

  • 一個“強大”的模型是一個相對不受約束的模型。

  • 然後將所有“強大”的模型結合在一起,以“平滑”他們的預測。

Boosting:改進簡單模型的預測能力。

  • 它訓練大量“弱”的模型。

  • 一個“弱”模型是一個受約束的模型(例如,你可以限制每個決策樹的最大深度)。

  • 每個模型都專注於從之前的錯誤中學習。

  • 然後把所有的弱學習者組合成一個強大的學習者。

雖然Bagging和Boosting都是整合方法,但它們從相反的方向解決問題。Bagging使用複雜的基礎模型,試圖“平滑”他們的預測,而Boosting使用簡單的基礎模型,並試圖“提高”他們的總複雜度。

原文連結:機器學習中的過擬合

相關文章