在本文中,我想解釋一下在我們訓練機器學習模型後遇到的機器學習和數據科學最重要的概念之一。這是一個必須知道的話題。

本文旨在解釋以下主題:

  1. 什麼是機器學習項目中的過度擬合?
  2. 我們如何檢測過度擬合?
  3. 我們如何解決過度擬合問題?
攝影:Isaac Smith在  Unsplash上
攝影:Isaac Smith在  Unsplash上

簡介 – 什麼是過度擬合?

讓我們首先確定概念的基礎。

假設您想要預測股票的未來價格變動。

然後,您決定收集過去10天的股票的歷史每日價格,並在散點圖上繪製股票價格,如下所示:

上圖顯示實際股票價格是隨機的。

要捕獲股票價格變動,您需要評估並收集以下16種功能的數據,您知道股票價格取決於:

  1. 行業表現
  2. 公司新聞發佈
  3. 公司的收益
  4. 公司的利潤
  5. 公司未來的公告
  6. 公司的股息
  7. 公司當前和未來的合約規模
  8. 公司的併購狀態
  9. 公司的管理信息
  10. 公司目前的合同
  11. 公司的未來合同
  12. 通貨膨脹
  13. 利率
  14. 外匯匯率
  15. 投資者情緒
  16. 公司的競爭對手

收集,清理,縮放和轉換數據後,您可以將數據拆分為訓練和測試數據集。此外,您將訓練數據提供給您的機器學習模型以進行訓練。

訓練模型後,您決定通過傳入測試數據集來測試模型的準確性。

我們期待看到什麼?

期望的結果

上圖顯示實際股票價格是隨機的。然而,預測的股票價格是平滑的曲線。它不適合自己太靠近訓練集,因此它能夠更好地推廣看不見的數據。

但是,讓我們假設你的情節實際與預測的股票價格,你會遇到以下圖表:

1.直線顯示預測價格

直線顯示預測價格

它顯示了什麼?

這意味着該算法具有非常強的數據預概念。這意味着它具有高偏見性。這被稱為欠配合。這些模型不適合預測新數據。

2.非常強大的緊密配合線

過擬合結果

它顯示了什麼?

這是另一個極端。它可能看起來好像在預測股價方面做得很好。然而,這被稱為過度擬合。它也被稱為高方差,因為它已經很好地學習了訓練數據,因此無法很好地推廣新的和看不見的數據。這些模型不適合預測新數據。如果我們為模型提供新數據,那麼它的準確性將最終變得極差。

這也表明我們沒有用足夠的數據訓練我們的模型。過度擬合是指您的模型過度訓練自己訓練的數據。可能是因為數據中存在太多功能,或者因為我們沒有提供足夠的數據。它發生在實際值和預測值之間的差值接近0時。

如何檢測過度擬合?

過度適應訓練數據的模型並不能很好地概括為新的例子。他們不善於預測看不見的數據。

攝影:Stephen Dawson,  來自Unsplash
攝影:Stephen Dawson,  來自Unsplash

這意味着它們在訓練期間非常準確,並且在預測看不見的數據期間產生非常差的結果。如果在模型訓練期間精度測量值(例如平均誤差平方)顯着降低,並且測試數據集的精度會下降,那麼這意味着您的模型過度擬合數據。

如果您想了解可用於測量機器學習模型準確性的算法,請查看本文:必須知道每個數據的數學測量科學家
關鍵的數學公式在易於遵循的子彈點介紹medium.com

我們如何解決過度擬合問題?

我們可以隨機刪除這些特徵并迭代地評估算法的準確性,但這是一個非常繁瑣和緩慢的過程。

基本上有四種減少過度擬合的常用方法。

1.減少功能:

最明顯的選擇是減少功能。您可以計算要素的相關矩陣,並減少彼此高度相關的要素:

import matplotlib.pyplot as pltplt.matshow(dataframe.corr())plt.show()

2.模型選擇算法:

您可以選擇模型選擇算法。這些算法可以選擇更重要的功能。

這些技術的問題在於我們最終可能會丟失有價值的信息。

3.提供更多數據

您的目標應該是為模型提供足夠的數據,以便對模型進行全面的培訓,測試和驗證。旨在提供60%的數據來訓練模型,20%的數據用於測試,20%的數據用於驗證模型。

4.正規化:

正則化的目的是保持所有特徵,但對係數的大小施加約束。

它是首選,因為您不必通過懲罰功能來丟失功能。當約束應用於參數時,模型不太容易過度擬合,因為它產生平滑的函數。

引入稱為懲罰因子的正則化參數,其控制參數並確保模型本身不會過度訓練訓練數據。

這些參數設置為較小的值以消除過度擬合。當係數取大值時,正則化參數懲罰優化函數。

有兩種常見的正則化技術:

  1. 套索

增加一個懲罰值,它是係數幅度的絕對值。這確保了特徵不會最終對算法的預測施加高權重。

from sklearn import linear_model
model = linear_model.Lasso(alpha=0.1)
model.fit([[0,0], [1, 1], [2, 2]], [0, 1, 2])

2. RIDGE

增加一個懲罰,它是係數大小的平方。結果,一些權重最終將為零。這意味着某些功能的數據將不會在算法中使用。

from sklearn.linear_model import Ridge
model = Ridge(alpha=1.0)
model.fit(X, y)
攝影:Sergey Pesterev,關於  Unsplash
攝影:Sergey Pesterev,關於  Unsplash

總結

本文重點介紹了我們在測試機器學習模型後遇到的一個關鍵主題。它概述了以下關鍵部分:

  1. 什麼是機器學習項目中的過度擬合?
  2. 我們如何檢測過度擬合?
  3. 我們如何解決過度擬合問題?

本文轉自 medium,原文地址