2.1.12 · HinglishData Preprocessing & Feature Engineering

Train - validation - test splitting

3,064 words14 min readRead in English

2.1.12 · AI-ML › Data Preprocessing & Feature Engineering

Teen-Way Split: Purpose & Philosophy

Training set wahan hai jahan model patterns seekhta hai. Validation set wahan hai jahan hum hyperparameters tune karte hain aur architecture decisions lete hain. Test set final exam hai—end tak bilkul untouched, yeh real-world performance measure karta hai.

Teen Sets Kyun, Do Kyun Nahi?

Information leakage problem: Agar tum same data use karo best model select karne aur evaluate karne dono ke liye, toh tumhara performance estimate optimistically biased hoga.

First principles se derivation:

  1. Goal: Unseen data par performance estimate karna
  2. Problem: Hamare paas sirf dataset hai
  3. Naive approach: Train/test mein split karo, test par evaluate karo → Lekin agar hum 100 models try karen aur best test score pick karen, toh humne implicitly test set par train kar liya hai (model selection ke through)
  4. Solution: Validation set use karo model selection ke liye, test set ko bilkul chhupa ke rakho final evaluation tak

Yeh holdout method (ek do-way train/test split) ko extend karta hai ek validation set add karke. Strictly speaking, "holdout" ek single test set hold out karne ko refer karta hai; teen-way version ko often holdout validation with a separate validation set kaha jaata hai cross-validation se distinguish karne ke liye.

Figure — Train - validation - test splitting

Splitting Process: Step-by-Step

Step 1: Shuffle (stratification ke saath)

Shuffle kyun? Raw datasets mein often temporal ordering ya grouped structure hoti hai. Agar pehle 80% sab class A ke hain aur last 20% class B ke, toh sequential split catastrophically fail ho jaata hai.

Stratify kyun? Imbalanced classes wali classification ke liye (jaise 95% negative, 5% positive), random splitting saare positives training mein daal sakti hai aur validation mein koi nahi.

Stratification math: Dataset mein proportion wali class ke liye:

Yeh ensure karta hai ki har split mein approximately original dataset jaisi class distribution ho.

Step 2: Indices assign karo (stratified)

Class proportions ko actually preserve karne ke liye, hume har class ke andar alag-alag split karni padegi, phir concatenate karna hoga. Plain shuffle-and-slice stratification guarantee nahi karta.

import numpy as np
 
def stratified_train_val_test_split(X, y, train_size=0.7, val_size=0.15,
                                    random_state=42):
    """
    Split data into train/val/test sets WITH true stratification.
    We split each class's indices separately, then combine, so that
    every split preserves the original class proportions.
    """
    rng = np.random.default_rng(random_state)
    train_idx, val_idx, test_idx = [], [], []
 
    for cls in np.unique(y):
        # Indices belonging to this class only
        cls_indices = np.where(y == cls)[0]
        rng.shuffle(cls_indices)               # shuffle within the class
 
        n_cls = len(cls_indices)
        train_end = int(train_size * n_cls)
        val_end = train_end + int(val_size * n_cls)
 
        train_idx.extend(cls_indices[:train_end])
        val_idx.extend(cls_indices[train_end:val_end])
        test_idx.extend(cls_indices[val_end:])
 
    # Shuffle the combined index lists so classes are interleaved
    train_idx = rng.permutation(train_idx)
    val_idx   = rng.permutation(val_idx)
    test_idx  = rng.permutation(test_idx)
 
    return (X[train_idx], y[train_idx],
            X[val_idx],   y[val_idx],
            X[test_idx],  y[test_idx])

Yeh step kyun? Data copy karne ki jagah indices ke saath kaam karna memory-efficient hai aur original samples tak trace back karne ki ability preserve karta hai.

Step 3: Fit-Transform Pattern (Critical!)

Data preprocessing mein SIRF training set statistics use honi chahiye.

Leakage scenario:

# WRONG! Test data leaks into normalization
scaler = StandardScaler()
X_scaled = scaler.fit(X_all)  # Uses test set mean/std
X_train_scaled = X_scaled[:train_end]
X_test_scaled = X_scaled[train_end:]

Galat kyun? Model indirectly test data "dekhta" hai scaling parameters ke through. Agar test set mein unusual values hain, toh woh training ke liye use hone wale mean/std ko influence karte hain.

Sahi approach:

# RIGHT! Only train statistics
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)  # Compute μ, σ from train only
X_val_scaled = scaler.transform(X_val)          # Apply train μ, σ
X_test_scaled = scaler.transform(X_test)        # Apply train μ, σ

Derivation: Feature ke liye, standardization hai:

Jahan sirf training set se compute hone chahiye:

Phir yahi same validation aur test sets par apply karo.

Recall Ek 12-Saal Ke Bache Ko Samjhao

Socho tum alag-alag birds ko pehchanna seekh rahe ho. Tumhare paas 100 bird photos hain.

Galat tarika: Seekhte waqt saari 100 photos dekho. Phir... inhi 100 photos par apna test karo. Bahut accha karoge! Lekin kya tumne sach mein birds pehchanna seekha, ya sirf woh specific photos yaad kar li?

Behtar tarika:

  • 70 photos lo → Train set (yeh tumhara study material hai)
  • 15 photos chhupao → Validation set (inhe use karo apne aap ko quiz karne ke liye aur figure out karne ke liye ki zyada padhna hai ya approach change karni hai)
  • Aur 15 photos chhupao → Test set (FINAL exam, ekdum end mein sirf ek baar dekho)

Validation set practice quizzes jaisi hai—tum inhe dobara de sakte ho aur apni study strategy adjust kar sakte ho. Test set real final exam hai—sirf ek chance milta hai, aur yeh batata hai ki tumne sach mein seekha ya sirf lucky the.

Magic trick: Kuch photos ekdum end tak chhupa ke, tum ensure karte ho ki tum "robin kya hota hai" seekh rahe ho instead of sirf yeh memorize karne ke ki "photo #23 robin hai."

Cross-Validation: Jab Simple Splitting Kaafi Nahi Hoti

Chhote datasets ke liye (), splitting bahut zyada training data hata deti hai. K-fold cross-validation ise solve karta hai.

Kaise kaam karta hai:

  1. Data ko equal folds mein split karo (typically ya )
  2. Har fold ke liye:
    • folds par train karo
    • Fold par validate karo
  3. Saare folds mein performance average karo

Variance reduction ki derivation: Single holdout validation ke liye samples use karta hai. K-fold cross-validation validation ke liye SAARE samples use karta hai (har sample exactly ek baar validate hota hai).

Performance estimate ka variance:

Kyunki , k-fold zyada stable estimates deta hai.

Trade-off: Computational cost zyada hai (1 ki jagah models train karne padte hain).

Time Series aur Special Cases

Doosre special cases:

  • Grouped data (ek patient/user ke multiple samples): GroupKFold use karo ensure karne ke liye ki ek group ke saare samples saath rahen
  • Imbalanced classes (1% positive): Class ratios maintain karne ke liye StratifiedKFold use karo
  • Multiclass: Saari classes balance karne ke liye target variable par stratify karo

Connections


#flashcards/ai-ml

Train/validation/test splitting mein teen subsets kya hain aur unke purposes kya hain? :: Training set (patterns seekhna/parameters fit karna), Validation set (hyperparameters tune karna/models select karna), Test set (bilkul unseen data par final performance evaluation)

Do-way train/test ki jagah alag validation set ki zaroorat kyun hai?
Model selection ke dauran information leakage rokne ke liye. Agar hum bahut saare models try karen aur best test performer pick karen, toh humne selection process ke through implicitly test set par train kar liya hota hai.
Stratification kya hai aur yeh kyun important hai?
Stratification ensure karta hai ki har split mein original dataset jaisi class distribution ho. Har class ko alag-alag split karke phir combine karke achieve hota hai. Imbalanced classes ke liye critical hai (jaise 95%/5%) taaki kisi split mein minority class ke samples na hon.
Preprocessing ka sahi order kya hai: scaler kis set par fit karein?
Preprocessing (scaler, imputer, encoder) SIRF training set par fit karo, phir unhi fitted parameters se train/val/test transform karo. Kabhi split se pehle saare data par fit mat karo.
Alag-alag dataset sizes ke liye standard split ratios kya hain?
N<1k: cross-validation use karo; 1k<N<100k: 70/15/15 ya 80/10/10; N>100k: 90:5:5 ya 95:2.5:2.5 (good estimates ke liye 10k test samples kaafi hain)
Time series data ko randomly split kyun nahi karna chahiye?
Random splitting temporal leakage create karta hai—model future dekhta hai past predict karne ke liye, jo causality violate karta hai. Chronologically split karna zaroori hai: Train→Validation→Test.
Fit-transform pattern kya hai?
Sirf training data par preprocessing fit karo (statistics jaise mean/std compute karo), phir unhi same statistics se train/val/test transform karo. Test data ka preprocessing parameters ke through leakage rokta hai.
Kya random shuffle-and-slice stratification guarantee karta hai?
Nahi. Random shuffling sirf on average splits balance karta hai. Imbalanced/chhote datasets ke liye phir bhi minority classes galat represent ho sakti hain. True stratification har class ko alag-alag split karta hai.
Holdout method aur three-way splitting mein kya fark hai?
"Holdout" strictly ek do-way train/test split ko refer karta hai. Teen-way split isme ek validation set add karke extend karta hai (holdout validation with separate validation set), jo cross-validation se alag hai.
Stratified splitting mathematically class distribution kaise preserve karti hai?
Proportion p_c wali class c ke liye, training set mein n_train^c = floor(p_c × n_train) samples allocate karo, similarly val/test ke liye. Splits mein proportions maintain hoti hain.
Simple split ki jagah K-fold cross-validation kyun use karen?
Chhote datasets ke liye, single split validation mein bahut zyada data "waste" karta hai. K-fold saare N samples validation ke liye use karta hai (har ek exactly ek baar validate hota hai), performance estimate ka variance σ²/n_val se σ²/n tak kam karta hai.

Concept Map

partition

partition

partition

fits

tunes

estimates

prevents

kept hidden until

motivates

extends

balances

use instead

Dataset D

Training set

Validation set

Test set

Model parameters

Hyperparameters and model selection

Generalization performance

Information leakage bias

Final evaluation

Three-way split not two-way

Holdout method

Split ratios 60:20:20 etc.

Data trade-off tension

N less than 1000

Cross-validation