앙상블
앙상블 ensemble
- 여러 학습 알고리즘을 조합하여 단독 알고리즘보다 더 높은 성능을 내는 방법
- 종류:
- 배깅
- 부스팅
- 스태킹
배깅 bagging
- 부트스트랩 집계(bootstrap aggregation)의 약자
- 데이터셋에서 동일한 크기의 부분 집합들을 샘플링
- 부분 집합으로 여러 개의 약한 모형을 학습
- 약한 모형의 예측을 평균/다수결하여 최종 예측
실습 준비
import pandas as pd
df = pd.read_excel('cancer.xlsx')
#데이터 분할
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state = 42)
의사결정나무
#의사결정나무
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier()
dt.fit(X_train, y_train)
#예측 및 정확도
from sklearn.metrics import accuracy_score
y_pred = dt.predict(X_test)
accuracy_score(y_test, y_pred)
배깅
#10개의 의사결정나무로 배깅
from sklearn.ensemble import BaggingClassifier
bg = BaggingClassifier(
estimator=DecisionTreeClassifier(),
n_estimators = 100, random_state = 42)
#학습
bg.fit(X_train, y_train)
#예측 및 정확도
y_pred = bg.predict(X_test)
accuracy_score(y_test, y_pred)
랜덤 포레스트 Random Forest
- 의사결정나무 + 배깅에 추가로 특징(feature)도 랜덤하게 사용
- 트리 간의 유사성을 낮추고, 과대적합을 방지
- 랜덤 포레스트
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators = 100, random_state = 42)
rf.fit(X_train, y_train)
- 예측 및 정확도
y_pred = rf.predict(X_test)
accuracy_score(y_test, y_pred)
부스팅 boosting
- 전체 데이터를 약한 모형에 학습
- 이전에 학습 모형의 예측 오차를 바탕으로 다음 약한 모형을 학습
AdaBoost
- 이전의 모형에서 잘못 분류한 사례에 가중치를 주어 다음 모형을 학습
#AdaBoost
from sklearn.ensemble import AdaBoostClassifier
ada = AdaBoostClassifier(n_estimators = 100, random_state = 42)
ada.fit(X_train, y_train)
#예측 및 정확도
y_pred = ada.predict(X_test)
accuracy_score(y_test, y_pred)
경사 부스트 gradient boost
- 경사하강법을 부스팅으로 구현한 것
- 이전 모형의 예측 오차를 다음 모형으로 예측
- 모형을 추가할 때마다 예측 오차가 점진적으로 줄어듦(경사하강법)
from sklearn.ensemble import GradientBoostingClassifier
gb = GradientBoostingClassifier(n_estimators = 100, random_state = 42)
gb.fit(X_train, y_train)
#예측 및 정확도
y_pred = gb.predict(X_test)
accuracy_score(y_test, y_pred)
스태킹 stacking
- 여러 개의 약한 모형을 학습
- 부스팅이나 배깅과 달리 서로 다른 종류의 모형을 사용
- 메타 모형에 약한 모형의 예측을 입력하여 최종 예측
스태킹
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import StackingClassifier
#스태킹
base_models = [('dt', DecisionTreeClassifier()), ('lr', LogisticRegression())]
meta_model = SVC(probability=True, random_state = 42) #메타 모형
st = StackingClassifier(base_models, meta_model)
st.fit(X_train, y_train)
#예측 및 정확도
y_pred = st.predict(X_test)
accuracy_score(y_test, y_pred)
앙상블의 동향
- 표 형태의 데이터에서는 의사결정나무에 기반한 앙상블이 주류
- 특히 경사부스팅 계열의 알고리즘들(XGBoost, LightGBM, CatBoost)이 각광
- 딥러닝도 일종의 앙상블로 이해할 수 있음
- 앙상블은 성능은 높지만 계산량이 많아, 예측의 정확도보다 계산량이나 속도가 더 중요할 경우 쓰지 않을 때도 많음
- 명시적으로 앙상블 기법은 아니어도, 비슷한 아이디어는 널리 사용됨
- 예: 넷플릭스 추천 시스템 - 한 사용자에게 복수의 추천 알고리즘을 사용
퀴즈
사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.