Hook — এক পরীক্ষায় বিচার নয়
একটা পরীক্ষায় ভালো করলে বুদ্ধিমান বলে দেওয়া যায় না। বিভিন্ন পরীক্ষায় repeatedly ভালো করলে তবেই বলা যায়। Cross Validation model এর সাথে ঠিক এটাই করে।
Why CV — Train/Test এর সীমাবদ্ধতা
Single train/test split এ score ভাগ্যের উপর নির্ভর করে। লাকি split এ ভালো, আনলাকি split এ খারাপ — তাই multiple fold দরকার।
CV_score = (1/K) Σ_{k=1}^{K} score(fold_k)
Important Variants
- K-Fold — সাধারণ, K সাধারণত 5 বা 10।
- Stratified K-Fold — class distribution preserve, imbalanced classification এ আবশ্যক।
- Leave-One-Out — N fold, ছোট dataset এর জন্য।
- Group K-Fold — একই group এর row যেন একই fold এ থাকে (medical patient, user)।
- TimeSeriesSplit — সময় এর ক্রম রক্ষা, future leakage prevent।
Code — Stratified ও TimeSeries
cv_demo.py
from sklearn.model_selection import StratifiedKFold, cross_val_score, TimeSeriesSplit
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
import numpy as np
X, y = load_breast_cancer(return_X_y=True)
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
scores = cross_val_score(LogisticRegression(max_iter=5000), X, y, cv=skf)
print("Stratified CV:", scores.mean(), "±", scores.std())
# Time series example
ts = TimeSeriesSplit(n_splits=5)
for tr, te in ts.split(np.arange(100)):
print("train:", tr[:5], "... test:", te[:5])Common Mistakes
Data Leakage
Whole dataset এ scaler/PCA fit করে তারপর CV — ভয়াবহ leakage। সবসময় Pipeline এর ভিতরে preprocessing রাখো।
- Imbalanced data এ plain KFold ব্যবহার।
- Time series এ shuffle করে CV।
- Same patient/user এর row দুই fold এ থাকা।
Mini Project — Pipeline + CV
একটা Pipeline বানাও: Imputer → Scaler → Logistic Regression। Stratified 10-fold CV চালিয়ে mean ± std accuracy report করো।
Summary
এক নজরে
CV = trust-worthy model evaluation। Pipeline + Stratified KFold = সোনার combo।