iPAS AI 應用規劃師 中級 科目二 大數據處理分析與應用

這段虛擬程式碼在描述哪一種驗證法?

原題 40

請參考附圖,下列虛擬程式碼(pseudocode)最可能是在描述何種驗證法? Input: - data_set: 包含 N 筆資料的資料集 - model_training_function: 用來訓練模型的函式 - model_evaluation_function: 用來評估模型的函式(如計算誤差或準確率) Output: - 平均評估指標(如平均準確率或平均誤差) Algorithm: 1. 初始化評估指標列表 metrics = [] 2. 對 i = 1 到 N: a. 將第 i 筆資料作為測試集 test_data b. 將其餘 N-1 筆資料作為訓練集 train_data c. 使用 model_training_function 在 train_data 上訓練模型 d. 使用訓練好的模型對 test_data 做預測,計算評估指標 metric_i e. 將 metric_i 加入 metrics 3. 計算 metrics 的平均值 mean_metric 4. 回傳 mean_metric

白話

有一段虛擬程式碼,它的運作方式是:每次從 N 筆資料中拿出第 i 筆當測試集,用剩下 N-1 筆訓練模型,這樣重複 N 次(每筆資料輪流當一次測試),最後取 N 次評估指標的平均值。

問你:這段程式碼描述的是哪一種模型驗證方法?

點選你的答案。

01 總結

一句話總結

每次只留一筆當測試、用剩下 N-1 筆訓練,重複 N 次取平均,這就是留一交叉驗證 LOOCV(Leave-One-Out Cross Validation),它是 K-fold 的極端特例:K=N

02 情境

先感受問題:小資料集要怎麼評估模型

「北城醫療研究」的研究員文哲,手上有一個珍貴的罕見疾病資料集,只有 50 筆病患記錄,每一筆都是花了大量人力標註的。

他要評估一個分類模型的效能,但 50 筆資料如果切成訓練集和測試集,測試集可能只有 10-15 筆,評估結果不穩定、方差太大。

文哲需要一個方法,讓每一筆資料都被拿去測試,同時訓練集盡量大(用 N-1 筆)。這樣評估結果最接近「用所有資料訓練的模型效能」,且偏差最小。

03 對照

其他驗證方式在小資料集上的問題

  1. Hold-out 切一次就完,評估不穩定:隨機切 70/30,測試集只有 15 筆,碰到分佈偏斜就差很多,重跑一次結果可能差 5-10%。
  2. K-fold 每折測試集仍有多筆,評估不夠細緻:5-fold 時每折測試集有 10 筆,LOOCV 每次只有 1 筆,後者對每個樣本的「留出評估」更精確。
  3. Bootstrap 有放回抽樣,訓練集可能重複同一筆:Bootstrap 訓練集用有放回抽樣,可能同一筆出現多次,訓練集代表性不如 LOOCV 的 N-1 筆不重複。
  4. 隨機切分每次結果不同,難以重現:Hold-out 和普通 K-fold 依賴隨機種子,不同種子結果不一樣,LOOCV 切法固定,結果確定性最高。
  5. 資料少時,統計量估計誤差大:測試集越少,指標方差越大;LOOCV 每次只測 1 筆是極端情況,N 次結果的方差雖然大,但平均偏差最小(偏差-方差取捨)。
04 解法

讀懂 pseudocode 的三個關鍵線索

文哲看到這段 pseudocode,抓住三個識別 LOOCV 的關鍵:

  1. 循環從 i=1 到 N:重複 N 次,每次循環對應資料集中的一筆
  2. 測試集 = 第 i 筆,訓練集 = 其餘 N-1 筆:每次只留「一筆」出來,這就是「Leave-One-Out」的含義
  3. 最終取 N 次評估的平均值:不是看某一次的結果,是全部 N 次取平均

對比 K-fold:K-fold 的外層循環是「i=1 到 K」(通常 5 或 10),測試集是「第 i 折」(多筆);LOOCV 的外層循環是「i=1 到 N」,測試集是「第 i 筆」(一筆)。

這就是選項 B 講的:留一交叉驗證 LOOCV(Leave-One-Out Cross Validation)

技術版:LOOCV 的 pseudocode 完整解析

中級考試大概率會考程式碼跟公式,所以這部分你還是要學。但如果現在學起來很痛苦,可以先跳過,等讀完其他題目回頭再來。

Step 1 純故事版
  1. 有 N 個學生的考試成績,想評估一個「分數預測模型」的準確度
  2. 第一輪:把第 1 個學生的成績藏起來,用其他 N-1 人訓練模型,再去預測第 1 人的成績,記錄誤差
  3. 第二輪:藏第 2 個人,用其他 N-1 人訓練,預測第 2 人,記錄誤差
  4. …重複 N 次,每個學生都輪流當「那個被藏起來的測試」
  5. 最後把 N 個誤差平均,得到模型的評估指標
Step 2 中文 ↔ pseudocode 對照
故事pseudocode
有 N 個學生的資料data_set(包含 N 筆)
每輪輪流藏一個for i = 1 to N
被藏起來的那個test_data = 第 i 筆
其他 N-1 人train_data = 其餘 N-1 筆
記錄每輪誤差metrics.append(metric_i)
最後取平均mean_metric = avg(metrics)
Step 3 符號角色表
N
資料集中的總筆數,也是 LOOCV 的迭代次數(每筆都要被測試一次)。
i
當前輪次的索引,從 1 到 N,代表「這輪拿第 i 筆當測試集」。
test_data
每次輪到的「第 i 筆」資料,只有 1 筆,這是 LOOCV 最核心的特徵。
train_data
每次的訓練集,是「除了第 i 筆之外」的所有 N-1 筆資料。
metrics
儲存每輪評估指標的列表,最後的平均值就是 LOOCV 的最終評估結果。
Step 4 完整公式對應

LOOCV 估計的誤差公式:

  • CV_LOOCV = (1/N) × Σᵢ₌₁ᴺ L(yᵢ, ŷᵢ)
  • 其中 L 是損失函數(如 MSE 或 0-1 Loss),yᵢ 是真實值,ŷᵢ 是用 N-1 筆訓練的模型對第 i 筆的預測值

這和 K-fold 的公式幾乎一樣,差別在 K=N(每折只有 1 筆)。

Step 5 自我複述

蓋住 pseudocode,用自己的話說出這 4 步:

  1. 循環 N 次(N = 資料集大小)
  2. 每次第 i 筆當測試集,其他 N-1 筆當訓練集
  3. 訓練模型後評估第 i 筆的指標
  4. N 次結果取平均

能講出來代表你看懂這類 pseudocode 了。

05 陷阱

為什麼其他選項是錯的

AHold-out 驗證(Hold-out Validation)

字面在說什麼

把資料分成訓練集和測試集(如 70/30),只訓練和評估一次。

為什麼不對

Hold-out 只分一次、評估一次,沒有循環;pseudocode 有 N 次循環,明顯不是 Hold-out。Hold-out 的特徵:「固定切分、一次訓練、一次評估」。

誰會選錯

看到「訓練集 / 測試集」就聯想 Hold-out,沒有注意到 pseudocode 有明顯的 N 次迴圈結構。

CK-fold 交叉驗證(K-fold Cross Validation)

字面在說什麼

把資料分成 K 折,每次用 K-1 折訓練、1 折測試,重複 K 次取平均。

為什麼不對

K-fold 的外層迴圈是「i=1 到 K」(K 通常是 5 或 10),測試集是「第 i 折」(多筆資料);pseudocode 的迴圈是「i=1 到 N」,測試集是「第 i 筆」(只有 1 筆)。LOOCV 可以理解為 K=N 的 K-fold,但當 K=N 時,每個測試集只有 1 筆,這是 LOOCV 的定義。

誰會選錯

知道這是交叉驗證的一種,誤以為「K-fold 是所有交叉驗證的統稱」,沒有區分 K-fold(K 固定為小數字)和 LOOCV(K=N)的差別。

D拔靴法(Bootstrap)驗證

字面在說什麼

有放回地從原始資料抽取多個訓練集,用每次未被抽到的樣本(out-of-bag)做評估。

為什麼不對

Bootstrap 的關鍵特徵是「有放回抽樣」,同一筆資料可能在訓練集裡出現多次;pseudocode 的 train_data 是「其餘 N-1 筆」(不放回,沒有重複),和 Bootstrap 的放回抽樣完全不同。

誰會選錯

記得 Bootstrap 也是一種模型評估方法,但不記得 Bootstrap 的關鍵特徵是「有放回抽樣」,把所有「重複評估」的方法都歸成 Bootstrap。

06 變形

同個考點下次怎麼變形

變形 1

LOOCV 和 K-fold(K=N)在數學上等價嗎?

直覺

LOOCV 感覺就是 K=N 的 K-fold?

答案

是的,LOOCV 等價於 K=N 的 K-fold。但實作上,LOOCV 有專門的優化(利用 hat matrix 直接計算,不需要真的跑 N 次線性迴歸);sklearn 也有獨立的 LeaveOneOut 類別,不是靠 KFold(n_splits=N) 實現。

變形 2

LOOCV 的優缺點各是什麼?什麼時候該用?

直覺

LOOCV 聽起來很嚴格,有什麼缺點嗎?

答案

優點:偏差最小(每次訓練集大小 N-1,接近全量);確定性高(不依賴隨機切分)。缺點:計算成本高(N 次訓練),N 很大時不實際;評估結果方差高(每次測試只有 1 筆,結果不穩定)。適用:小資料集(N < 1,000)、需要偏差極小的場景。

變形 3

如果 pseudocode 的迴圈改成「for fold = 1 to K」,測試集是「第 fold 折」,這是什麼方法?

直覺

如果把 N 換成 K,每次測試集是「多筆」,會是什麼?

答案

就是標準的 K-fold 交叉驗證。迴圈從 1 到 K(K 通常是 5 或 10),每次測試集是「第 fold 折」(包含 N/K 筆資料),訓練集是其餘 K-1 折。和 LOOCV 的差別只在測試集大小:K-fold 是「一折(多筆)」,LOOCV 是「一筆」。

變形 4

Leave-P-Out(LPO)是什麼?和 LOOCV 有什麼關係?

直覺

LOOCV 是每次留一個,有沒有「每次留多個」的版本?

答案

Leave-P-Out(LPO)每次從 N 筆中留出 P 筆當測試集,訓練集是 N-P 筆。LOOCV 是 LPO 的特例(P=1)。LPO 的迭代次數是 C(N,P)(組合數),N=50、P=2 就要跑 1,225 次,計算量急劇增加,實務上少用。

變形 5

如果 N=10,000,LOOCV 要跑幾次?這是實際可行的嗎?

直覺

N 很大時,LOOCV 的計算量會怎樣?

答案

需要跑 10,000 次訓練。若每次訓練耗時 1 秒,就需要 10,000 秒(約 2.8 小時)。若是複雜模型(如神經網路),完全不可行。大資料集應改用 K-fold(K=5 或 10),只需訓練 5-10 次。LOOCV 只適合 N 很小的場景。

07 延伸

想再往下看,這 5 個

出處

iPAS 經濟部產業人才能力鑑定 ・ 114 年第二梯次 iPAS AI 應用規劃師 中級 科目二 大數據處理分析與應用 第 40 題

查看官方原文 PDF