Bird
Raised Fist0
ML Pythonml~5 mins

Stratified K-fold in ML Python - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is Stratified K-fold cross-validation?
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
Which type of problem benefits most from Stratified K-fold?
AClassification with imbalanced classes
BRegression with continuous targets
CUnsupervised clustering
DData with no labels
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
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
Which Python library provides StratifiedKFold for easy use?
ANumPy
BTensorFlow
CMatplotlib
Dscikit-learn
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

      1. 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.
      2. 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.
      3. Final Answer:

        To keep the class distribution balanced in each fold -> Option C
      4. 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

      1. Step 1: Recall correct import syntax

        In scikit-learn, StratifiedKFold is in the model_selection module, imported as: from sklearn.model_selection import StratifiedKFold.
      2. 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.
      3. Final Answer:

        from sklearn.model_selection import StratifiedKFold -> Option B
      4. 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

      1. Step 1: Understand StratifiedKFold split sizes

        With n_splits=2, data is split into 2 folds. Total data size is 10.
      2. 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.
      3. 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.
      4. Final Answer:

        8 2 -> Option A
      5. 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

      1. 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.
      2. 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.
      3. Final Answer:

        n_splits cannot be greater than the number of members in any class -> Option A
      4. 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

      1. 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.
      2. 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.
      3. Final Answer:

        2 -> Option D
      4. 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 unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard