Table of Contents

728x90

배깅(Bagging)

Bootstrap Aggregating, 일반적으로 배깅(Bagging)이라고 불리는 이 기법은 Ensemble Learning의 한 방법으로, 모델의 예측 성능을 향상시키고 과적합(overfitting)을 줄이기 위해 사용됩니다. 배깅은 여러 개의 모델을 독립적으로 학습시킨 후, 그 예측 결과를 평균 내거나 다수결 투표를 통해 최종 예측을 도출하는 방법입니다.

배깅의 과정

  1. 데이터셋 샘플링: 원본 데이터셋에서 크기가 같은 여러 개의 부트스트랩(bootstrap) 샘플을 생성합니다. 부트스트랩 샘플은 원본 데이터셋에서 복원 추출(즉, 중복을 허용하여)로 생성됩니다. 각 샘플은 원본 데이터셋과 같은 크기이지만, 중복된 데이터 포인트를 포함할 수 있습니다.
  2. 모델 학습: 각 부트스트랩 샘플에 대해 동일한 모델을 학습시킵니다. 즉, 여러 개의 독립적인 모델을 생성합니다. 이 모델들은 같은 알고리즘을 사용하지만, 서로 다른 데이터 샘플에 대해 학습됩니다.
  3. 예측 결합: 모든 개별 모델의 예측을 결합하여 최종 예측을 도출합니다. 결합 방법에는 주로 두 가지가 있습니다:
    • 회귀 문제: 각 모델의 예측값을 평균 내어 최종 예측값을 도출합니다.
    • 분류 문제: 각 모델의 예측 클래스에 대해 다수결 투표를 실시하여 최종 예측 클래스를 도출합니다.

배깅의 장점

  1. 예측 성능 향상: 개별 모델의 예측을 결합함으로써, 모델의 분산을 줄이고, 보다 안정적이고 정확한 예측을 할 수 있습니다.
  2. 과적합 감소: 여러 개의 모델을 사용함으로써, 개별 모델이 과적합된 경우에도 전체 앙상블 모델의 과적합 위험이 줄어듭니다.
  3. 노이즈 감소: 데이터 샘플링을 통해 모델이 데이터의 노이즈에 덜 민감해집니다.

배깅의 단점

  1. 계산 비용: 여러 개의 모델을 학습시키고 예측을 결합하는 과정에서 계산 비용이 증가합니다.
  2. 메모리 사용량: 여러 개의 모델을 동시에 유지해야 하기 때문에 메모리 사용량이 증가합니다.

배깅의 대표적인 알고리즘: 랜덤 포레스트

랜덤 포레스트(Random Forest)는 배깅을 기반으로 하는 앙상블 알고리즘 중 하나로, 여러 개의 결정 트리를 학습시키고, 그 예측을 결합하여 최종 예측을 도출합니다.

  • 랜덤 포레스트의 특징:
    • 각 결정 트리는 부트스트랩 샘플을 사용하여 학습됩니다.
    • 각 노드에서 최적의 분할을 찾을 때, 전체 특징 중 무작위로 선택된 일부 특징만을 사용합니다. 이는 트리들 간의 상관성을 줄여 앙상블의 성능을 향상시킵니다.

코드 예시

사이킷런(Scikit-learn)을 사용하여 배깅을 구현하는 예시입니다. 여기서는 BaggingClassifier를 사용하여 배깅을 직접 구현합니다.

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

# 데이터 로드 및 분할
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)

# 기본 결정 트리 모델
base_model = DecisionTreeClassifier(random_state=42)

# 배깅 모델 생성
bagging_model = BaggingClassifier(base_estimator=base_model, n_estimators=100, random_state=42)
bagging_model.fit(X_train, y_train)

# 예측 및 평가
y_pred = bagging_model.predict(X_test)
print("Accuracy with Bagging:", accuracy_score(y_test, y_pred))

이 코드는 결정 트리를 기본 학습기로 사용하는 배깅 모델을 구현한 것입니다. BaggingClassifier를 사용하여 100개의 결정 트리를 학습시키고, 그 예측 결과를 결합하여 최종 예측을 도출합니다.

요약

배깅(Bagging)은 여러 개의 모델을 독립적으로 학습시키고, 그 예측을 결합하여 예측 성능을 향상시키고 과적합을 줄이는 앙상블 기법입니다. 이를 통해 모델의 안정성과 정확성을 높일 수 있습니다. 대표적인 예로 랜덤 포레스트가 있으며, 다양한 머신러닝 문제에서 널리 사용됩니다.

랜덤 포레스트(Random Forest)와 배깅(Bagging)의 차이

랜덤 포레스트(Random Forest)는 배깅(Bagging)을 기반으로 한 앙상블 기법의 하나로, 배깅을 확장한 형태입니다. 따라서 랜덤 포레스트는 배깅의 일종이라고 생각할 수 있지만, 두 기법은 몇 가지 중요한 차이점을 가지고 있습니다.

배깅(Bagging)

배깅은 Bootstrap Aggregating의 줄임말로, 다음과 같은 과정을 통해 예측 모델을 생성합니다:

  1. 원본 데이터셋에서 부트스트랩 샘플링(복원 추출)을 통해 여러 개의 데이터셋을 생성합니다.
  2. 각 부트스트랩 샘플을 사용하여 개별 모델을 학습시킵니다.
  3. 모든 모델의 예측을 결합하여 최종 예측을 도출합니다. 분류 문제에서는 다수결 투표, 회귀 문제에서는 평균을 사용합니다.

랜덤 포레스트(Random Forest)

랜덤 포레스트는 배깅을 기반으로 하면서도 추가적인 무작위성을 도입하여 모델의 성능을 더욱 향상시킨 앙상블 기법입니다. 랜덤 포레스트의 주요 특징은 다음과 같습니다:

  1. 부트스트랩 샘플링: 배깅과 동일하게 원본 데이터셋에서 부트스트랩 샘플링을 통해 여러 개의 데이터셋을 생성합니다.
  2. 부분 특징 선택: 각 노드에서 최적의 분할을 찾을 때, 전체 특징 중 무작위로 선택된 일부 특징만을 사용합니다. 이는 개별 트리들 간의 상관성을 줄여 앙상블의 성능을 향상시킵니다.
  3. 여러 결정 트리: 여러 개의 결정 트리를 학습시키고, 이들의 예측을 결합하여 최종 예측을 도출합니다.

랜덤 포레스트와 배깅의 차이점

  1. 부분 특징 선택:
    • 배깅: 전체 특징을 사용하여 최적의 분할을 찾습니다.
    • 랜덤 포레스트: 각 노드에서 무작위로 선택된 일부 특징만을 사용하여 최적의 분할을 찾습니다. 이는 트리 간의 다양성을 증가시켜 과적합을 줄이는 데 도움이 됩니다.
  2. 결정 트리의 무작위성:
    • 배깅: 데이터 샘플링을 통해 모델 간의 다양성을 유도합니다.
    • 랜덤 포레스트: 데이터 샘플링뿐만 아니라, 부분 특징 선택을 추가하여 모델 간의 다양성을 더 강화합니다.

코드 예시

다음은 사이킷런(Scikit-learn)을 사용하여 랜덤 포레스트를 구현하는 예시입니다:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 데이터 로드 및 분할
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)

# 랜덤 포레스트 모델 생성
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)

# 예측 및 평가
y_pred = rf_model.predict(X_test)
print("Accuracy with Random Forest:", accuracy_score(y_test, y_pred))

이 코드는 랜덤 포레스트 모델을 생성하고, 이를 사용하여 예측을 수행하는 예제입니다. RandomForestClassifierBaggingClassifier와 달리 각 노드에서 무작위로 선택된 일부 특징만을 사용하여 트리를 생성합니다.

요약

랜덤 포레스트는 배깅을 기반으로 한 앙상블 기법으로, 두 방법 모두 여러 개의 모델을 학습시키고 그 예측을 결합하여 최종 예측을 도출합니다. 그러나 랜덤 포레스트는 각 노드에서 무작위로 선택된 일부 특징을 사용하여 트리를 생성함으로써 배깅보다 더 높은 성능과 안정성을 제공합니다. 따라서 랜덤 포레스트는 배깅의 확장판이라고 할 수 있지만, 두 기법은 동일하지 않다는 점을 이해하는 것이 중요합니다.

'ML' 카테고리의 다른 글

Validation set  (0) 2024.05.29
Random Forest에서의 Out-of-Bag (OOB)  (0) 2024.05.29
Ensemble 앙상블  (0) 2024.05.29
Decision tree -> pre-pruning, post-pruning  (0) 2024.05.29
Decision Tree  (0) 2024.05.29