AI-ML · INTRO

模型評估入門:訓練、驗證、測試與資料洩漏

模型表現取決於你怎麼定義問題與切分資料。從一個合成裝置資料例子,理解為什麼看過答案的測試不能代表新情境。

讀完後,你可以
  • 說明特徵、目標與訓練/驗證/測試集的責任。
  • 檢查群組交集並判斷切分是否符合部署問題。
  • 區分成功執行程式與模型泛化證據。

先把預測問題寫清楚

監督式機器學習用輸入特徵與已知目標學習預測規則。例如以一段合成感測值預測設備狀態,特徵是可在預測當下取得的資訊,目標是要預測的狀態。若把事後才知道的維修結論放進輸入,就改變了原本問題。

先聲明未來要面對的是同一設備的新時段,還是從未看過的設備。這個差異會影響切分單位、指標與可主張的泛化範圍;沒有一個比例能代替這個問題定義。

三個資料集各自回答什麼

訓練集用來擬合模型;驗證集支援開發選擇;測試集留給最後的評估。若反覆看測試分數再改模型,測試資訊已參與選擇,不能再把它當成完全獨立的最後驗證。

重複樣本或高度相關的同來源樣本可能跨越切分邊界。前處理若需要從資料估計參數,也應只在訓練部分擬合,再套用相同轉換。切分與前處理必須一起規劃。

延伸閱讀:Google ML Crash Course: Dividing datasets

用群組切分對齊你的問題

若要評估未見設備,來自同一設備的資料應避免同時出現在訓練與測試。若問題是預測未來時段,時間順序也需保留。群組切分並非任何問題的唯一正解;它是針對特定泛化問題的設計。

以下六列資料只示範交集檢查,沒有訓練模型,也不足以估計真實效果。實際研究還要確認樣本數、代表性、標記品質與指標的不確定性。

例子:三台設備,各有兩筆資料

資料依序為 A1、A2、B1、B2、C1、C2。若把奇數位置放 train、偶數位置放 test,三台設備都同時出現在兩邊。

這個切分可能測到已知設備的新紀錄,但不能直接回答未見設備的問題。把 A 放 train、B 放 validation、C 放 test,能示範群組分離;只有一台測試設備仍不足以主張廣泛泛化。

判斷:先讓切分對準問題,再討論分數。

離線練習:找出群組交集

只需 Python 3 與六個寫在程式中的合成 ID,不下載資料、不使用個資、不訓練模型。

  1. 閱讀程式,先預測 naive_overlap 與 grouped_overlap。
  2. 執行 python3 split_demo.py,核對兩行輸出。
  3. 寫明若部署對象改為「同設備的未來時段」,還需要哪個切分條件。
rows = [(device, sample) for device in "ABC" for sample in (1, 2)]
naive_train = {d for d, _ in rows[::2]}
naive_test = {d for d, _ in rows[1::2]}
train, validation, test = {"A"}, {"B"}, {"C"}
print("naive_overlap=" + repr(sorted(naive_train & naive_test)))
print("grouped_overlap=" + repr(sorted((train & validation) | (train & test) | (validation & test))))

下載練習程式

預期結果

naive_overlap=['A', 'B', 'C'];grouped_overlap=[]。第二行只證明本例群組無交集。

自行檢核

為什麼無交集還不能證明模型準確?請指出本練習根本沒有執行哪個步驟。

結束與清理

程式不建立資料檔;保留輸出與自己的解釋即可。

Q&A · 檢查你的理由

選一個答案與作答信心,再閱讀所有選項的解析。答案只儲存在此瀏覽器。

ai-split-q1 · 原創練習

每次看 test 分數後都調參,最後的 test 還是獨立評估嗎?

每次看 test 分數後都調參,最後的 test 還是獨立評估嗎?
ai-split-q2 · 原創練習

要評估未見設備,哪個切分最符合問題?

要評估未見設備,哪個切分最符合問題?
ai-split-q3 · 原創練習

split_demo.py 成功且無群組交集,證明什麼?

split_demo.py 成功且無群組交集,證明什麼?

連結下一個概念

詞彙:資料洩漏(模型評估)·泛化·證據邊界

參考來源與範圍

以下來源支持技術原理;例子、題目與安全練習由本系列原創設計。