StratifiedKFold#
- class sklearn.model_selection.StratifiedKFold(n_splits=5, *, shuffle=False, random_state=None)[原始碼]#
分層 K 折交叉驗證器。
提供訓練/測試索引以將資料分割為訓練/測試集。
此交叉驗證物件是 KFold 的變體,會傳回分層的摺疊。這些摺疊會保留每個類別的樣本百分比。
請在使用者指南中閱讀更多內容。
如需視覺化交叉驗證行為以及比較常見的 scikit-learn 分割方法,請參閱在 scikit-learn 中視覺化交叉驗證行為
- 參數:
- n_splitsint,預設值=5
摺疊的數量。必須至少為 2。
在 0.22 版中變更:
n_splits
預設值從 3 變更為 5。- shufflebool,預設值=False
是否在將每個類別的樣本分割成批次之前先打亂每個類別的樣本。請注意,每個分割中的樣本不會被洗牌。
- random_stateint、RandomState 實例或 None,預設值=None
當
shuffle
為 True 時,random_state
會影響索引的順序,這會控制每個類別的每個摺疊的隨機性。否則,請將random_state
保留為None
。傳遞一個 int 以便在多個函數呼叫中產生可重複的輸出。請參閱詞彙表。
重複分層 K 折 n 次。
注意事項
該實作旨在
產生測試集,使所有測試集都包含相同的類別分佈,或盡可能接近。
不因類別標籤而異:將
y = ["Happy", "Sad"]
重新標記為y = [1, 0]
不應變更產生的索引。當
shuffle=False
時,保留資料集排序中的順序相依性:某些測試集中來自類別 k 的所有樣本在 y 中是連續的,或者在 y 中被來自類別 k 以外的類別的樣本分隔開。
產生測試集,其中最小和最大差異最多一個樣本。
範例
>>> import numpy as np >>> from sklearn.model_selection import StratifiedKFold >>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]]) >>> y = np.array([0, 0, 1, 1]) >>> skf = StratifiedKFold(n_splits=2) >>> skf.get_n_splits(X, y) 2 >>> print(skf) StratifiedKFold(n_splits=2, random_state=None, shuffle=False) >>> for i, (train_index, test_index) in enumerate(skf.split(X, y)): ... print(f"Fold {i}:") ... print(f" Train: index={train_index}") ... print(f" Test: index={test_index}") Fold 0: Train: index=[1 3] Test: index=[0 2] Fold 1: Train: index=[0 2] Test: index=[1 3]
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請檢查使用者指南以了解路由機制如何運作。
- 傳回值:
- routingMetadataRequest
一個
MetadataRequest
,封裝路由資訊。
- get_n_splits(X=None, y=None, groups=None)[原始碼]#
傳回交叉驗證器中的分割迭代次數。
- 參數:
- X物件
永遠被忽略,存在是為了相容性。
- y物件
永遠被忽略,存在是為了相容性。
- groups物件
永遠被忽略,存在是為了相容性。
- 傳回值:
- n_splitsint
傳回交叉驗證器中的分割迭代次數。
- split(X, y, groups=None)[原始碼]#
產生將資料分割為訓練集和測試集的索引。
- 參數:
- X形狀如 (n_samples, n_features) 的類陣列
訓練資料,其中
n_samples
是樣本數,而n_features
是特徵數。請注意,提供
y
足以產生分割,因此可以使用np.zeros(n_samples)
作為X
的預留位置,而不是實際的訓練資料。- y形狀如 (n_samples,) 的類陣列
用於監督式學習問題的目標變數。分層是根據 y 標籤完成的。
- groups物件
永遠被忽略,存在是為了相容性。
- 傳回值:
- trainndarray
該分割的訓練集索引。
- testndarray
該分割的測試集索引。
重複分層 K 折 n 次。
隨機化的 CV 分割器可能會在每次分割呼叫時傳回不同的結果。您可以將
random_state
設定為整數,使結果相同。