訓練和測試集:分割資料

先前單元介紹了將資料集分割成兩個子集的概念:

  • training set:訓練模型的子集。
  • test set:測試訓練模型的子集。

您可以想像將單一資料集劃分如下:

水平長條分為兩部分:80% 是訓練集,20% 用於測試集。

圖 1. 將單一資料集分割成一個訓練集和測試集。

請確認您的測試集符合下列兩個條件:

  • 大小足以產生具有統計意義的結果。
  • 代表整個資料集。換句話說,請勿挑選有與訓練集不同特性的測試集

假設您的測試集符合上述兩個條件,您的目標是建立可通用於新資料的模型。我們的測試集可做為新資料的 Proxy。例如,請看下圖。請注意,用來訓練資料的模型非常簡單。這個模型無法做到完美的預測,只有少數幾項預測會出現錯誤。不過,此模型測試資料的方式與訓練資料相同。換句話說,這個簡單的模型不會使訓練資料過度配適。

兩種模型:一個使用訓練資料,另一個則使用測試資料。這個模型非常簡單,只要一條線將藍點與橘色圓點隔開。訓練資料的損失與測試資料中的損失類似。

圖 2. 使用測試資料驗證已訓練的模型。

一律不使用測試資料進行訓練。如果評估指標顯示出令人驚訝的結果,這可能表示您不小心對測試集進行訓練。例如,高準確率可能表示測試資料已外洩到訓練集。

舉例來說,假設某個模型會使用主旨行、電子郵件內文和寄件者電子郵件地址做為功能,預測電子郵件是否為垃圾郵件。我們會按照 80 至 20 的比例,將資料分為訓練集和測試集。完成訓練後,模型在訓練集和測試集上都能達到 99% 的精確度。我們預期測試集的精確度較低,因此再次查看資料,並發現測試集中的許多範例都是訓練集中的範例重複項目 (在分割資料前,系統已忽略輸入資料庫中相同垃圾電子郵件的重複項目)。我們不小心以部分測試資料完成訓練,因此無法再準確評估模型一般化新資料的成效。