分層 K 折交叉驗證(Stratified K-Fold)是什麼?

確保每個折(Fold)中各類別樣本比例與原始資料集一致的 K 折交叉驗證變體。|本頁含完整原理、應用場景、iPAS 考試重點與 3 個常見問答。

英文
Stratified K-Fold
主題標籤
交叉驗證、模型評估、類別不平衡
考點定位
非 iPAS 核心術語
最後更新
2026/06/22
分層 K 折交叉驗證(Stratified K-Fold)是什麼? 交叉驗證模型評估
術語快查

搜尋意圖: 如果你在找「分層 K 折交叉驗證 是什麼」或「分層 K 折交叉驗證 和相近概念差在哪」,先看這頁的短定義、完整說明與延伸比較。

TL;DR: 確保每個折(Fold)中各類別樣本比例與原始資料集一致的 K 折交叉驗證變體。

實用情境: 適合用在閱讀 AI 文章、產品文件或和同事討論時,先用一頁快速對齊概念。

下一步: 先讀完定義,再往下看延伸比較與對應工具,把概念轉成實際應用。

確保每個折(Fold)中各類別樣本比例與原始資料集一致的 K 折交叉驗證變體。

分層 K 折交叉驗證(Stratified K-Fold Cross-Validation)是機器學習模型評估的重要工具,它在標準 K 折交叉驗證的基礎上增加了一個關鍵約束:確保每個折中各類別的樣本比例與原始資料集相同。

標準 K 折交叉驗證的做法是將資料集隨機分成 K 等份,輪流以其中一份作為驗證集,其餘 K-1 份作為訓練集,重複 K 次後取評估指標的平均值。這個方法能夠充分利用有限的資料進行模型評估,同時減少因單一訓練集-測試集分割帶來的偶然性。

然而,當面對類別不平衡的資料集時,純隨機分割可能導致某些折的類別分佈與整體資料差異很大,甚至在某個驗證折中完全沒有某個少數類別的樣本。例如,若一個二元分類資料集中正類佔 5%、負類佔 95%,在 10 折交叉驗證中,純隨機分割可能讓某些折的正類比例偏差至 2% 或 10%,甚至某個小資料集的折中正類樣本數為 0,這會讓評估結果失去可靠性。

分層 K 折交叉驗證透過按類別比例分配樣本到各折,確保每個折都能代表整體資料分佈。以同樣的例子,10 折分層 K 折後,每個折都會保持接近 5% 正類的比例,使得每次訓練和評估的資料分佈更加一致,得到更穩健可靠的評估結果。

在 Python scikit-learn 中,StratifiedKFold 類別提供了標準實作,使用方式與 KFold 幾乎相同,只需在建立 fold 分割物件時指定使用 StratifiedKFold,並在 split() 方法中傳入目標標籤 y,讓分割器能夠感知各類別的分佈。對於回歸問題,scikit-learn 也提供了 StratifiedGroupKFold,以及可以用於回歸的 KFold,但標準 StratifiedKFold 主要適用於分類任務。

分層 K 折在以下場景中特別重要:醫療診斷模型(陽性病例比例通常遠低於陰性)、詐欺偵測系統(詐欺樣本是少數)、罕見事件預測等所有類別不平衡場景。在這些場景中,若不使用分層,模型可能在某些折上因為訓練集缺乏少數類別而過度偏向多數類,或驗證集因缺乏少數類別而無法有效評估模型對關鍵類別的識別能力。

值得補充的是,分層 K 折解決的是評估過程中的類別分佈問題,但它本身並不解決類別不平衡的學習問題。若需要讓模型更好地學習少數類別,還需要配合過採樣(SMOTE)、欠採樣、調整類別權重(class_weight='balanced')等針對不平衡學習的技術。分層 K 折確保的是我們在公平條件下評估這些技術的效果。

在 iPAS AI 應用規劃師中級考試的模型評估與驗證主題中,分層 K 折是常見考點。考生應掌握它與標準 K 折的差異、適用場景(類別不平衡),以及為何在類別不平衡問題中標準隨機分割可能導致不可靠的評估結果。 分層 K 折交叉驗證(Stratified K-Fold Cross-Validation)是機器學習模型評估中的標準方法,特別適用於分類問題中類別不平衡的情境。它確保每個折疊(Fold)中各類別的比例與整體資料集相同,從而使每個折疊都是原始資料的代表性子集。

一般 K 折交叉驗證(K-Fold)隨機分割資料,可能導致某個折疊中某個類別樣本極少,使得訓練集缺乏該類別的代表樣本,或測試集評估結果方差過大。分層 K 折通過在分割時保持類別比例解決這個問題。

具體實現上,分層 K 折首先按類別分組,在每個類別內分別分割成 K 份,再合并各類別的對應份數組成每個折疊。以二元分類、正負類比例 1:9 為例,每個折疊中正負樣本比例都維持 1:9,避免某折疊幾乎全為負類而測試準確率虛高(預測全為負類即可達 90%)。

分層 K 折對計算模型的可靠性評估至關重要:它降低了評估指標的方差,提供更穩定可重複的 AUC、F1 等指標;確保了超參數調優(如 Grid Search CV)選出的參數在各折都有合理的測試集;在醫療、金融等少數類至關重要的應用中,確保評估結果不被採樣偏差影響。

在多分類問題中,分層 K 折對各個類別都執行同樣的比例保持,尤其當某些類別樣本量極少(例如罕見疾病多分類)時,防止稀有類在某些折疊中缺失導致訓練集缺乏代表性。

scikit-learn 的 StratifiedKFold 和 StratifiedGroupKFold(當資料還有分組約束時)提供了完整的實現,與 cross_val_score、GridSearchCV 等工具無縫整合。

常見問題

K 值(折數)應該如何設定?有沒有標準答案?

K 值的選擇需要在偏差(Bias)與變異數(Variance)之間取得平衡,同時考慮計算資源。常用的 K 值是 5 或 10,這是學術界和工業界廣泛採用的經驗值。K 值越大,每次訓練用到的資料越多,評估的偏差越小,但計算成本也越高,且 K 個驗證集之間的重疊度增加,評估的變異數可能上升。K 值越小(如 K=3),計算更快,但每次訓練資料較少,評估結果的偏差較大。一個特殊情況是 Leave-One-Out Cross-Validation(LOOCV),相當於 K 等於樣本總數,偏差最低但計算成本極高,僅適合小型資料集。對於資料量充足的情況,K=5 或 K=10 是合理的起點。

分層 K 折交叉驗證能用於多類別問題嗎?

分層 K 折交叉驗證完全支援多類別分類(Multi-class Classification)問題,這是它設計上的一個重要特性。在多類別場景中,分層 K 折會同時保持所有類別的比例,例如若有三個類別 A:B:C = 50%:30%:20%,每個折都會盡量維持這個比例分佈。這在多類別問題中尤為重要,特別是當各類別的樣本數差異較大時,分層確保了每個折都包含足夠的各類別樣本,使模型在訓練時能夠接觸到所有類別,在驗證時也能公平評估對每個類別的識別能力。scikit-learn 的 StratifiedKFold 預設支援多類別目標,使用方式與二元分類完全相同。

使用分層 K 折時,每個折都是獨立訓練一個模型嗎?最終用哪個模型做預測?

在標準的交叉驗證流程中,分層 K 折的主要目的是模型評估,而非選擇最終模型。每個折確實會獨立訓練一個模型,並在對應的驗證集上計算評估指標(如 AUC、F1-Score 等),K 個結果取平均值後作為模型表現的穩健估計。這個評估流程幫助我們比較不同超參數配置或不同演算法的相對優劣。最終用於部署的模型,通常是在確定最佳超參數後,用全量訓練資料(不含預留的測試集)重新訓練一次,得到最終的生產模型。交叉驗證是找到最佳設定的評估工具,而非直接產出生產模型的方法。