Stratified K-fold is a way to split data into K parts (folds) so that each fold has the same proportion of each class as the whole dataset. This helps keep the data balanced during training and testing.
Click to reveal answer
beginner
Why use Stratified K-fold instead of regular K-fold?
Regular K-fold may create folds with uneven class distributions, which can cause biased model evaluation. Stratified K-fold keeps class proportions consistent, giving more reliable results especially for imbalanced data.
Click to reveal answer
intermediate
How does Stratified K-fold handle imbalanced datasets?
It ensures each fold has roughly the same percentage of samples from each class as the full dataset, so minority classes are fairly represented in every fold.
Click to reveal answer
advanced
In Stratified K-fold, what happens if the number of samples in a class is less than the number of folds?
Some folds may not contain samples from that class because there aren't enough samples to distribute evenly. This can affect the stratification quality.
Click to reveal answer
beginner
Write a simple Python code snippet to perform Stratified K-fold cross-validation using scikit-learn.
from sklearn.model_selection import StratifiedKFold
import numpy as np
X = np.array([[1], [2], [3], [4], [5], [6]])
y = np.array([0, 0, 1, 1, 0, 1])
skf = StratifiedKFold(n_splits=3)
for train_index, test_index in skf.split(X, y):
print("TRAIN:", train_index, "TEST:", test_index)
Click to reveal answer
What is the main goal of Stratified K-fold cross-validation?
ATo randomly shuffle data without any class consideration
BTo keep class proportions balanced in each fold
CTo increase the number of folds beyond the dataset size
DTo use only one fold for training
✗ Incorrect
Stratified K-fold ensures each fold has the same class proportions as the full dataset.
Which type of problem benefits most from Stratified K-fold?
AClassification with imbalanced classes
BRegression with continuous targets
CUnsupervised clustering
DData with no labels
✗ Incorrect
Stratified K-fold is designed to keep class balance, which is important in classification, especially with imbalanced classes.
If you have 5 folds, how does Stratified K-fold split the data?
AEach fold has random samples ignoring class
BEach fold has all samples of one class
CEach fold has roughly 1/5 of each class
DEach fold has only majority class samples
✗ Incorrect
Stratified K-fold splits data so each fold has about the same fraction of each class.
What happens if a class has fewer samples than the number of folds in Stratified K-fold?
ASome folds may not contain samples from that class
BThe class samples are duplicated to fill all folds
CThe class is ignored during splitting
DThe number of folds is automatically reduced
✗ Incorrect
If there are fewer samples than folds, some folds won't have that class.
Which Python library provides StratifiedKFold for easy use?
ANumPy
BTensorFlow
CMatplotlib
Dscikit-learn
✗ Incorrect
scikit-learn has StratifiedKFold in its model_selection module.
Explain how Stratified K-fold cross-validation works and why it is useful for classification problems.
Think about how data balance affects training and testing.
You got /4 concepts.
Describe a situation where using Stratified K-fold is better than regular K-fold and why.
Consider datasets where some classes are rare.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of using Stratified K-fold in machine learning?
easy
A. To increase the size of the training data
B. To randomly shuffle data without considering classes
C. To keep the class distribution balanced in each fold
D. To reduce the number of features in the dataset
Solution
Step 1: Understand Stratified K-fold concept
Stratified K-fold splits data into parts (folds) while keeping the proportion of each class the same in every fold.
Step 2: Compare options with concept
Only To keep the class distribution balanced in each fold describes this balancing of class distribution. Other options describe unrelated tasks.
Final Answer:
To keep the class distribution balanced in each fold -> Option C
Quick Check:
Stratified K-fold = Balanced class distribution [OK]
Hint: Stratified means keeping class ratios same in each fold [OK]
Common Mistakes:
Thinking it just shuffles data randomly
Confusing with data augmentation
Assuming it changes feature numbers
2. Which of the following is the correct way to import StratifiedKFold from scikit-learn in Python?
easy
A. import StratifiedKFold from sklearn.cross_validation
B. from sklearn.model_selection import StratifiedKFold
C. from sklearn.cross_validation import StratifiedKFold
D. import StratifiedKFold from sklearn.model_selection
Solution
Step 1: Recall correct import syntax
In scikit-learn, StratifiedKFold is in the model_selection module, imported as: from sklearn.model_selection import StratifiedKFold.
Step 2: Check each option
from sklearn.model_selection import StratifiedKFold matches the correct syntax. Options A, B, and C use wrong import style or deprecated module.
Final Answer:
from sklearn.model_selection import StratifiedKFold -> Option B
Quick Check:
Correct import = from sklearn.model_selection import StratifiedKFold [OK]
Hint: Use 'from sklearn.model_selection import StratifiedKFold' [OK]
Common Mistakes:
Using old module cross_validation
Wrong import order (import ... from ...)
Misspelling module or class name
3. Given this code snippet, what will be the output lengths of train and test indices in each fold?
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))
medium
A. 8 2
B. 5 5
C. 7 3
D. 6 4
Solution
Step 1: Understand StratifiedKFold split sizes
With n_splits=2, data is split into 2 folds. Total data size is 10.
Step 2: Calculate train and test sizes per fold
Each fold has 5 samples. For each split, test set is one fold (5 samples), train set is the other fold (5 samples). So train=5, test=5.
Step 3: Check actual output
However, the code prints lengths of train_index and test_index. For each fold, train_index length is 8 and test_index length is 2 because StratifiedKFold with n_splits=2 splits data into 2 folds, but the test fold size is 2 due to stratification and class distribution.
Final Answer:
8 2 -> Option A
Quick Check:
Train + Test = 10, test size = 2 [OK]
Hint: Train + test sizes add to total samples [OK]
Common Mistakes:
Assuming equal split without stratification
Confusing train and test sizes
Ignoring class balance effect on fold sizes
4. Identify the error in this StratifiedKFold usage:
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)
medium
A. n_splits cannot be greater than the number of members in any class
B. X should be a numpy array, not a list
C. y must be one-hot encoded for StratifiedKFold
D. The loop syntax is incorrect
Solution
Step 1: Check n_splits vs class counts
StratifiedKFold requires n_splits ≤ number of samples in the smallest class. Here, smallest class has 2 samples but n_splits=3.
Step 2: Validate other options
X can be list or array, y can be labels, loop syntax is correct, and one-hot encoding is not required.
Final Answer:
n_splits cannot be greater than the number of members in any class -> Option A
Quick Check:
n_splits ≤ smallest class size [OK]
Hint: n_splits ≤ smallest class count to avoid error [OK]
Common Mistakes:
Thinking data type of X causes error
Believing one-hot encoding is needed
Misreading loop syntax as wrong
5. You have a dataset with 100 samples: 90 belong to class 0 and 10 to class 1. You want to use StratifiedKFold with 5 splits. How many samples of class 1 will be in each test fold?
hard
A. 5
B. 1
C. 10
D. 2
Solution
Step 1: Calculate class 1 samples per fold
Total class 1 samples = 10. With 5 splits, each fold should have 10 / 5 = 2 samples of class 1 in total, but test fold is one part.
Step 2: Understand stratification in test fold
Each test fold is 1/5th of data, so it should have 10 * (1/5) = 2 class 1 samples. But since 10 class 1 samples split evenly, each fold gets 2.
Final Answer:
2 -> Option D
Quick Check:
Class 1 per fold = total class 1 / splits [OK]
Hint: Divide class count by splits for per-fold count [OK]
Common Mistakes:
Assuming equal class counts in all folds without stratification
Confusing total samples with class samples
Ignoring that test fold is 1 split
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.