머신러닝(앙상블)

1 minute read

앙상블 개요

앙상블 방법

  • 앙상블은 서로 다른/또는 같은 알고리즘을 결합하지만 대부분 동일한 알고리즘을 결합한다.
  • 앙상블 학습의 유형 : 보팅, 배깅, 부스팅, 스태킹 등

앙상블의 종류

  • 보팅 : 여러 개의 분류기가 투표를 통해 최종 예측 결과를 결정하는 방식

  • 배깅(Bagging) : 각각의 분류기가 모두 같은 유형의 알고리즘 기반이지만, 데이터 샘플링을 서로 다르게 가져가면서 학습을 수행해 보팅을 수행
    • 랜덤 포레스트(Random Forest) : 뛰어난 예측 성능, 상대적으로 빠른 수행시간, 유연성
  • 부스팅(Boosting) : 여러 개의 분류기가 순차적으로 학습하되, 앞에서 학습한 분류기가 예측이 틀린 데이터에 대해서는 올바르게 예측할 수 있도록 다음 분류기에 가중치를 부여한다. 쉽게말하면 배깅같은 경우는 단일 모델을 만들고 bootstrap과정으로 데이터를 랜덤으로 추출한 뒤 모델을 훈련시켰다면 부스팅은 앞에서 예측한 분류기가 틀린부분에 있어 가중치를 부여한다. 이로써 가중치를 부여해서 틀린 부분을 더 잘 맞출 수 있도록 하는 것이다.
    • 그래디언트 부스팅(Gradient Boosting) : 뛰어난 예측 성능을 가지고 있지만, 수행 시간이 너무 오래 걸림
    • XgBoost(eXtra Gradient Boost)와 LightGBM : 기존 그래디언트 부스팅의 예측 성능을 한 단계 발전시키면서도 수행 시간을 단축시킨 알고리즘이다. 정형 데이터의 분류 영역에서 가장 활용도가 높은 알고리즘이다.
  • 스태킹(앙상블의 앙상블) : 여러 가지 다른 모델의 예측 결괏값을 다시 학습 데이터로 만들어서 다른 모델로 재 학습시켜 결과를 예측

보팅

    from sklearn.neural_network import MLPClassifier
    clfs = [('LR', LogisticRegression()), ('RF', RandomForestClassifier(max_depth=5)), ('MLP', MLPClassifier()) ]

    vote_clf = VotingClassifier(clfs)   

배깅

각각의 Decision Tree 들의 평균 결과를 얻어서 보팅을 하는 방식이다.

    clf = RandomForestClassifier(n_estimators=50, max_depth=5, random_state=2019)
    clf.fit(x_train, y_train)
    print('Single Random Forest Acc : {:.2f}%'.format(clf.score(x_test, y_test)*100))

XGBoost(eXtra Gradient Boost)

XGBoost of 하이퍼 파라미터 여기 링크에 XGBoost에서 사용하는 하이퍼 파라미터와 코드가 나와있다.

  • Overfitting 방지 노하우
  1. eta 값을 낮춘다 -> eta 값을 낮추면 반대로 num_boost_round(n_estimator)를 높여준다.
  2. max_depth 값을 낮춘다.
  3. min_child_weight 값을 높인다.
  4. gamma 값을 높인다.
  5. subsample과 colsample_bytree를 낮춘다.

Leave a comment