Bagging Bootstrap Aggregation Variance Reduction

# Bagging: Bootstrap Aggregation & Variance Reduction

## Introduction & Motivation

Bagging trains base learners on bootstrap samples (random sampling with replacement) and averages predictions. Reduces variance without bias increase. Foundation for Random Forest, Extra Trees. Parallelizable; complements boosting.

Motivation: Single learner overfits. Multiple independent learners via resampling reduce variance. Averaging stable predictions; each base learner sees different data distribution.

Applications: Ensemble methods, outlier detection, robustness to dataset variations.

---

## Core Concepts & Theory

### Bootstrap Sample

Sample n points from n points with replacement. ~63.2% unique; 36.8% duplicates.

### Variance Reduction

Var[Ensemble] = (1 - ρ)σ²/m + ρσ² where ρ is correlation, m is learners.

---

## Summary & Key Takeaways

Bagging reduces variance via bootstrap sampling and averaging, foundation for ensemble methods.

Principles:
1. Bootstrap creates diverse datasets.
2. Independent learners reduce variance.
3. Averaging stabilizes predictions.
4. Works well with unstable learners (trees).
5. Parallel training efficient.

---

---

## Appendix: Practical Labs

### Lab 1: Bagging Classifier

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

base = DecisionTreeClassifier(max_depth=5)
bagging = BaggingClassifier(base_estimator=base, n_estimators=10, random_state=42)
bagging.fit(X_train, y_train)

y_pred = bagging.predict(X_test)
acc = accuracy_score(y_test, y_pred)

print(f"Accuracy: {acc:.4f}")
assert acc > 0.7, "Should exceed baseline"
print("✓ Bagging working")

if __name__ == "__main__":
 print("Lab 1: Bagging - PASSED")

### Lab 2: Bootstrap Samples

import numpy as np
from sklearn.utils import resample

X = np.arange(10).reshape(-1, 1)
y = np.arange(10)

n_samples = 100
bootstrap_samples = []

for _ in range(5):
 X_boot, y_boot = resample(X, y, n_samples=len(X), random_state=42)
 bootstrap_samples.append(X_boot.flatten())

print(f"Bootstrap samples created: {len(bootstrap_samples)}")
assert len(bootstrap_samples) == 5, "Should have 5 bootstrap samples"
print("✓ Bootstrap sampling working")

if __name__ == "__main__":
 print("Lab 2: Bootstrap - PASSED")

### Lab 3: OOB Error

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

bagging = BaggingClassifier(DecisionTreeClassifier(), n_estimators=10, oob_score=True, random_state=42)
bagging.fit(X_train, y_train)

oob_score = bagging.oob_score_

print(f"OOB score: {oob_score:.4f}")
assert 0.5 < oob_score < 1.0, "OOB should be reasonable"
print("✓ OOB error working")

if __name__ == "__main__":
 print("Lab 3: OOB - PASSED")

### Lab 4: Ensemble Size

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

for n in [5, 10, 20]:
 bagging = BaggingClassifier(DecisionTreeClassifier(), n_estimators=n, random_state=42)
 bagging.fit(X_train, y_train)
 acc = accuracy_score(y_test, bagging.predict(X_test))
 print(f"n_estimators={n}: {acc:.4f}")

print("✓ Ensemble size working")

if __name__ == "__main__":
 print("Lab 4: Ensemble Size - PASSED")

Go deeper with CFSGPT

Get AI-powered deep-dives, save terms, and run advanced simulations — free account.

Create Free Account