Hook — একার চেয়ে দশের বুদ্ধি
একজন ডাক্তার ভুল করলে — সমস্যা। কিন্তু ১০ জন specialist মিলে diagnosis দিলে ভুলের সম্ভাবনা অনেক কমে। Ensemble Learning ঠিক এই idea — অনেকগুলো weak/strong model মিলে একটা strong প্রেডিকশন তৈরি করা।
Concept — তিন ধরনের Ensemble
- Bagging — সবাই parallel এ শেখে, vote বা average নেওয়া হয় (Random Forest)।
- Boosting — একজনের ভুল পরের জন শোধরায়, sequential (AdaBoost, XGBoost)।
- Stacking — অনেক base model এর output কে আরেকটা meta-model শেখে।
Core idea
Variance কমাতে → Bagging। Bias কমাতে → Boosting। Best of both → Stacking।
Math — কেন কাজ করে
N টা independent classifier, প্রত্যেকের accuracy p > 0.5 হলে — majority vote এর accuracy N বাড়ার সাথে 1 এর দিকে যায়।
P(majority correct) = Σ_{k=⌈N/2⌉}^{N} C(N,k) · p^k · (1-p)^{N-k}
Bagging variance কমায় কারণ ŷ_bag = (1/B) Σ ŷ_b → Var = σ²/B (independent হলে)।
Code — Voting Classifier
voting.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier
X, y = load_breast_cancer(return_X_y=True)
Xtr, Xte, ytr, yte = train_test_split(X, y, random_state=0)
lr = LogisticRegression(max_iter=5000)
dt = DecisionTreeClassifier(random_state=0)
sv = SVC(probability=True)
vc = VotingClassifier([("lr", lr), ("dt", dt), ("sv", sv)], voting="soft")
vc.fit(Xtr, ytr)
print("Ensemble:", vc.score(Xte, yte))
for name, model in vc.named_estimators_.items():
print(name, model.score(Xte, yte))Common Mistakes
- একই type এর model দিয়ে ensemble — diversity নেই।
- Hard voting দিয়ে probability হারানো — soft voting বেশি কার্যকর।
- Boosting এ noisy label রেখে overfit করানো।
Mini Project — Titanic Survival
Titanic dataset এ Logistic + Random Forest + XGBoost stacking করে accuracy বাড়াও — একক best model এর তুলনায়।
Summary
এক নজরে
Ensemble = অনেক model এর জ্ঞান একত্র করা = production-grade accuracy।