K-Cross 交叉驗證

K 摺疊交叉驗證是多次重複訓練/測試分割程式的系統過程,以減少與單次試驗列車/測試分裂相關的變化。你基本上將整個資料集拆分為 K 個相等大小的摺疊,每個摺疊用於測試模型一次,K-1 次用於訓練模型。

scikit 庫提供多種摺疊技術。它們的使用取決於輸入資料特徵。一些例子是

K-折

你基本上將整個資料集拆分為 K 個相等大小的摺疊,每個摺疊用於測試模型一次,K-1 次用於訓練模型。

from sklearn.model_selection import KFold
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([1, 2, 1, 2])
cv = KFold(n_splits=3, random_state=0)

for train_index, test_index in cv.split(X):
...    print("TRAIN:", train_index, "TEST:", test_index)

TRAIN: [2 3] TEST: [0 1]
TRAIN: [0 1 3] TEST: [2]
TRAIN: [0 1 2] TEST: [3]

StratifiedKFold 是 k-fold 的變體,它返回分層摺疊:每組包含與完整集合大致相同的每個目標類別的樣本百分比

ShuffleSplit

用於生成使用者定義數量的獨立列車/測試資料集拆分。首先將樣品洗牌,然後將其分成一對列車和測試裝置。

from sklearn.model_selection import ShuffleSplit
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([1, 2, 1, 2])
cv = ShuffleSplit(n_splits=3, test_size=.25, random_state=0)

for train_index, test_index in cv.split(X):
...    print("TRAIN:", train_index, "TEST:", test_index)

TRAIN: [3 1 0] TEST: [2]
TRAIN: [2 1 3] TEST: [0]
TRAIN: [0 2 1] TEST: [3]

StratifiedShuffleSplit 是 ShuffleSplit 的變體,它返回分層分裂,即通過為每個目標類保留與完整集合相同的百分比來建立分裂。

其他摺疊技術,例如 Leave One / p Out 和 TimeSeriesSplit(K-fold 的變體)可在 scikit model_selection 庫中找到。