Introduction
Stratified K-fold helps us split data into parts while keeping the same balance of groups in each part. This way, our model learns fairly from all groups.
from sklearn.model_selection import StratifiedKFold skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42) for train_index, test_index in skf.split(X, y): X_train, X_test = X[train_index], X[test_index] y_train, y_test = y[train_index], y[test_index]
skf = StratifiedKFold(n_splits=3) for train_idx, test_idx in skf.split(X, y): print('Train:', train_idx, 'Test:', test_idx)
skf = StratifiedKFold(n_splits=4, shuffle=True, random_state=1) for train_idx, test_idx in skf.split(X, y): print(f'Train size: {len(train_idx)}, Test size: {len(test_idx)}')
from sklearn.datasets import load_iris from sklearn.model_selection import StratifiedKFold import numpy as np # Load iris data data = load_iris() X = data.data y = data.target # Create StratifiedKFold with 3 splits skf = StratifiedKFold(n_splits=3, shuffle=True, random_state=0) fold = 1 for train_index, test_index in skf.split(X, y): y_train, y_test = y[train_index], y[test_index] # Count classes in train and test unique_train, counts_train = np.unique(y_train, return_counts=True) unique_test, counts_test = np.unique(y_test, return_counts=True) print(f'Fold {fold}') print('Train class distribution:', dict(zip(unique_train, counts_train))) print('Test class distribution:', dict(zip(unique_test, counts_test))) fold += 1
Stratified K-fold in machine learning?from sklearn.model_selection import StratifiedKFold
import numpy as np
X = np.arange(10)
y = np.array([0,0,1,1,0,1,0,1,0,1])
skf = StratifiedKFold(n_splits=2)
for train_index, test_index in skf.split(X, y):
print(len(train_index), len(test_index))from sklearn.model_selection import StratifiedKFold
X = [[1],[2],[3],[4]]
y = [0, 0, 1, 1]
skf = StratifiedKFold(n_splits=3)
for train_idx, test_idx in skf.split(X, y):
print(train_idx, test_idx)Pass the test and this pattern moves unknown