머신러닝에서 모델의 성능을 향상시키는 방법에는 여러가지 방법이 있습니다. 그중 Ensemble 방법은 가장 흔히 사용되는 방식 중 하나입니다. Ensemble method란 무엇인지, 그리고 그 중 Bagging(배깅)이 무엇인지, 이를 통해 어떻게 모델 성능을 향상시킬 수 있는지 살펴보겠습니다.
Ensemble method란?
머신 러닝에서 Ensemble method는 여러 개별 모델을 결합하여 하나의 머신러닝 모델을 만드는 방법입니다. 이를통해 예측의 전반적인 성능과 정확도를 향상시킬 수 있습니다. Ensemble method의 기본 개념은 약한 여러 모델을 결합하면 더 강력하고 정확한 모델을 만들 수 있다는 것입니다. Ensemble method는 Decision Tree(의사 결정 트리), Random Forest(랜덤 포레스트), SVM(서포트 벡터 머신), Neural Network(신경망) 등 다양한 머신 러닝 알고리즘과 함께 사용할 수 있습니다.
Bagging(배깅) 이란?
Bagging (Bootstrap Aggregating) 은 위에서 살펴본 Ensemble 기법 중 하나입니다. 원본 데이터 세트에서 무작위로 샘플링하여 여러 개의 Training set을 만들고, 각각의 새로운 Training set에 대해 머신러닝 모델을 학습시킵니다. 그러면 여러 개의 머신러닝 모델이 만들어지고, 각 모델에 Test set을 가지고 예측(Prediction)을 수행합니다. 각 머신러닝 모델이 예측한 값을 가지고 그 중 다수결로 많이 나온 예측값을 최종 예측 값으로 선택합니다.
Bagging(배깅)의 기본 개념은 Training 데이터의 서로 다른 하위 집합에 대해 여러 모델을 훈련함으로써 모델의 분산을 줄이고 Generalization(일반화) 성능을 향상시킬 수 있다는 것입니다. 부트스트랩 샘플링을 사용하면 다양하고 오버피팅(Overfitting) 가능성이 적은 Training Set을 생성하는 데 도움이 되며, 여러 모델을 조합하면 개별 모델에서 노이즈와 Outlier의 영향을 줄이는 데 도움이 됩니다.
쉽게 이해하기 위해서 한가지 예를 들어보겠습니다. 학생들이 먼저 개별적으로 시험문제를 풀어서 제출합니다. 그런 다음 같은 문제를 가지고 5명의 학생들끼리 그룹을 만들어 서로의 답을 비교하고 토론하여 그 그룹당 하나의 시험답안지를 제출합니다. 이렇게 했을 때 학생들은 개별적으로 문제를 풀었을 때 보다 5명의 학생이 함께 문제를 풀었을 때 더 좋은 점수를 기대할 수 있습니다. 이게 가능한 이유는 학생들마다 틀리게 푼 문제가 있을 수 있지만 5명의 학생이 모두 같은 문제를 틀렸을 확률은 적고 각자 다른 문제를 틀리게 풀었다면 서로 토론 하면서 다수결에 의해 맞는 답을 선택하기 때문에 함께 토론해서 푼 문제가 정답률이 올라가는 것입니다. 바로 이 원리를 이용한게 Bagging(배깅)입니다.
사이킷런(Scikit-larn)으로 Ensemble 및 배깅(Bagging) 적용해보기
이 예제에서는 사이킷런에서 제공하는 유방암 데이터를 사용합니다. 먼저 하나로 이루어진 Decision Tree 모델을 생성하고 학습시킵니다. 그런 다음 Test set에 대해 성능을 평가합니다. 다음으로, 100개의 Decision Tree를 사용하는 Bagging(배깅) 모델을 생성하고 동일한 Train Set에 학습시킵니다. 그런 다음 동일한 Test set에서 성능을 평가합니다. 그리고 각각의 성능을 출력하여 비교해보는 코드입니다.
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier
# Load the Breast Cancer dataset
cancer = load_breast_cancer()
# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, test_size=0.3)
# Create a single decision tree classifier
tree_clf = DecisionTreeClassifier()
# Train the single decision tree classifier
tree_clf.fit(X_train, y_train)
# Evaluate the performance of the single decision tree classifier
print("Single Decision Tree Classifier Accuracy:", tree_clf.score(X_test, y_test))
# Create a bagging classifier with 100 decision trees
bagging_clf = BaggingClassifier(base_estimator=DecisionTreeClassifier(), n_estimators=100)
# Train the bagging classifier
bagging_clf.fit(X_train, y_train)
# Evaluate the performance of the bagging classifier
print("Bagging Classifier Accuracy:", bagging_clf.score(X_test, y_test))
위의 코드를 실행해보면 아래와 같은 결과를 볼 수 있습니다.
보시다시피, Bagging(배깅) 모델은 하나로 이루어진 Decision Tree 모델보다 정확도가 더 높습니다. 이는 특히 분산이 크거나 Overfitting이 발생하기 쉬운 데이터 집합을 처리할 때 Bagging(배깅)이 단일 모델의 성능을 어떻게 향상시킬 수 있는지 보여주는 예시입니다.
<참고하면 좋을 포스팅>
'머신러닝' 카테고리의 다른 글
[머신러닝] Random Forest 랜덤 포레스트 모델 개념 제대로 이해하기 (0) | 2023.02.27 |
---|---|
머신러닝 Decision Tree 핵심 개념(Entropy, Information Gain) (1) | 2023.02.24 |
머신러닝 Decision Tree 핵심 개념 (데이터 사이언티스트 면접 질문) (0) | 2023.02.23 |
불균형 데이터(Imbalanced Data) 머신러닝 Classification 문제점 해결방법 (0) | 2023.02.23 |
머신러닝 Feature Selection 개념, 중요성, 하는 방법 (0) | 2023.02.22 |
댓글