이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[ML] Ensemble Method

  • 2025.12.05 16:44
  • Computer Science/Machine Learning
반응형

 

 

 

모델을 하나만 써서 예측하는 것 보다, 여러 모델을 만들어 각각 예측하게 하고 결과를 종합해서 최종 결론을 내리게 하는 방법이다.

 

Bias - 정답 값과 예측값의 차이. 높을수록 모델이 단순해서 패턴을 제대로 학습하지 않았음을 의미한다.

Variance - 예측값들의 흩어진 정도. 높을수록 모델이 너무 복잡해서 학습 데이터에 강하게 반응함을 의미한다.

 

 

 

 

(LaTex 하나하나 적기 너무 힘드니 이미지로...)

 

전체 에러인 MSE는 Variance와 Bias의 제곱의 합으로 분해된다. 

즉, 좋은 모델을 만드려면 저 두 가지를 동시에 줄여야 함. 

 

 

 

 

 

Capacity가 증가할수록 Bias는 줄어드는데, Variance는 커진다.

그러니 최적의 선을 찾아야 함. 저 둘을 합친 Generalization Error가 가장 낮은 지점을 찾는게 목표.

 

그 지점을 찾기 위해서 Ensemble Method를 사용한다.

 

 

 


 

 

 

Ensemble Method는 사용하는 모델의 특성에 따라 크게 두 가지 전략으로 구분된다.

 

 

Bagging 

Low Bias / High Variance 모델을 사용한다.

성능은 좋지만 예민하게 반응하는 모델을 합쳐서 Variance를 줄이기가 목표.

 

Bootstrap aggregating의 줄임말이다.

 

1. Bootstrapping - 원본 데이터에서 복원추출 방식으로 여러 개의 서로 다른 Bootstrap을 만든다.

2. Parallel Training - 만들어진 데이터셋으로 모델을 학습시킨다. 이 때 모델들은 서로의 존재를 모름.

3. Aggregating - 모델들의 예측 결과를 합친다. (Classification이면 다수결)

 

개별 모델은 데이터에 따라 High Variance 특성을 보일 수 있지만, 평균 때려버리면 안정적으로 변함.

 

Random Forest는 배깅의 일종이지만, Randomness를 강화한 모델이다.

 

배깅으로 Decision Tree를 만드는 경우, 데이터가 좀 달라도 데이터셋에 압도적으로 중요한 Feature가 있다면.. 모든 트리가 비슷하게 생길 수 있음.

트리들이 서로 너무 닮으면 Ensemble 효과가 떨어진다.

 

Bagging은 데이터 샘플만 무작위로 뽑지만, Random Forest는 트리의 각 분기를 나눌 때 전체 Feature를 다 보지 않고 Random subset of Variables 중에서 최적의 변수를 찾는다. 

 

이러면 개별 트리의 성능은 좀 떨어질 수 있지만, 트리의 모양이 다 다르게 되니 Ensemble에 적합하다.

 

 

Boosting

High Bias / Low Variance 모델을 사용한다.

단순한 모델을 합쳐서 Bias를 줄이기가 목표.

 

부스팅은 배깅과 다르게 순차적으로 학습한다.

배깅은 모델 1,2,3이 각자 공부하고 나중에 답만 맞춰보는 방식이고, 부스팅은 모델 1이 먼저 문제를 풀고 틀린걸 모델 2에게 넘겨주는 방식이다.

 

 

 

 

 

C1은 직선 하나로 데이터를 나눈다. 이러면 위쪽의 검은 점들을 제대로 분류하지 못함.

C2는 C1이 틀린 데이터에 집중해 선을 긋는다. 이번에는 다른 쪽을 맞추느라 에러가 또 생긴다.

C3은 앞선 모델들이 힘들어하는 부분을 보완한다.

 

Weak Linear 합쳐보니까 NonLinear Decision Boundary를 가진 강력한 모델이 완성됐다.

 

AdaBoost는 Adaptive Boosting의 약자로, 학습 데이터의 가중치를 조절하며 학습하는 방식이다.

 

 

 

 

1. 초기화 - 가중치를 1 / N 으로 설정함

2. 반복 학습 - 가중치를 반영해서 모델을 학습시킨다. 에러를 계산하는데.. 모델이 틀린 데이터는 exp 때문에 가중치가 팍 증가한다.

3. 최종 결합 - 예측 결과에 신뢰도를 곱해 최종 결과를 가져옴.

 

 

AdaBoost는 틀린 문제에 가중치만 설정했다면, Gradient Boosting은 틀린 문제 자체를 학습해버린다.

 

 

 

 

 

J(w) 는 줄여야 하는 에러 함수를 의미한다. 에러가 최소화 되는 가장 낮은 지점으로 가야 함.

현재 위치에서 기울기를 구하고 기울기의 반대 방향으로 조금씩 이동한다. -> 반복해서 에러가 최소인 지점에 도달.

 

그냥 미분하면 되는거 아님? -> 맞는말이긴 한데, 현실의 문제가 y = x^2마냥 단순하지가 않다.

변수만 수십만개고 데이터간의 관계도 복잡하다. 

 

미분을 할 수는 있지만, 기울기가 0이 되는 방정식을 푸는게 너무 힘들다. 그래서 기울기만 보고 조금씩 내려가는 전략을 사용함.

 

애초에 Gradient Boosting은 완성된 식의 파라미터를 찾는게 아니고, 함수 자체를 만드는 것.

일단 하나 해 보고, 오차를 보고 그 다음꺼 해 보고.. 이런식으로 순차적으로 조립하는거임. 그러니 구조적으로 한 방 미분이 불가능.

 

 

 

 

1. 초기 에측 

평균으로 모든 데이터를 예측하는데, 당연히 많이 틀린다.

 

2. 잔차 계산 

실제값에서 예측값을 빼 Residual을 계산한다.

 

3. 모델 업데이트 

Tree1이 잔차를 학습했으니, 기존 예측에 Tree1의 예측을 더한다.

Prediction = Tree0 (50) + a * Tree1

 

예측값이 업데이트 됐으니 다시 반복해서 Tree N을 학습시킨다. -> 잔차가 0에 가깝게 줄어듦.

 

 

 

 

 

Loss Function으로 MSE를 사용할 때, 미분하면 잔차 계산식이 나옴.

즉, 잔차는 수학적으로 Negative Gradient라고 볼 수 있다. 

 

잔차를 학습해서 다하는 작업은, Gradient Descent에 따라 Loss function의 기울기 반대 방향으로 모델을 이동하는 것. 

대수 관점이 그대로 기하 관점으로 적용되는 것.. 그래서 이름이 Gradient Boosting이다. 

 

 

Regression 할 때는 숫자를 예측하고 더하면 됐는데, Classification 에서는 확률을 다뤄야 해서 약간 변환해야 함.

예측값으로 숫자 대신 Log Odds를 사용한다.

 

Log Odds는 어차피 -무한 ~ +무한까지 범위를 가질 수 있으니 회귀처럼 계속 값을 더하는 테크닉을 쓸 수 있음.

확률이 필요하면 Sigmoid 써서 변환해주면 되고..

 

1. 초기값 설정 

회귀에서는 평균값을 쓰지만 분류에서는 Log Odds의 초기값을 사용함. 

 

2. 잔차 계산

회귀에서는 MSE를 사용했지만 분류에서는 Log Loss를 사용한다. (어차피 미분하면 y - P(실제 - 확률))

식은 복잡해 보이지만 잔차를 구하는 핵심은 똑같음. 정답에서 현재 확률을 뺀 값.

 

3. 리프 노드 결정

트리 구조는 잔차를 보고 만드는데, 리프 노드에 적히는 값은 회귀에서처럼 단순 평균이 아님.

약간 복잡한 식을 쓰긴 하는데.. 그냥 평균이 아니다 정도만 알고 넘어갈 것

 

 

XGBoost는 Gradient Boosting Machine에서 속도, 성능을 깎아낸 방식이라고 보면 됨.

 

1. Similarity Score

트리를 만들 때 Gradient Boosting은 Variance 감소를 측정하지만, XGBoost는 Similarity Score를 계산해서 사용한다.

 

lambda가 Regularization 역할을 해 줘서 데이터가 너무 적은 리프 노드가 만들어지는걸 막아준다. (과적합 방지)

 

2. Prunning

Gradient Boosting은 트리를 다 키우거나 Depth를 제한하는 방식을 사용하지만, XGBoost는 Gain을 계산한다.

Gain = Left Score + Right Score - Parent Score

 

Gain이 미리 정의해 둔 gamma보다 작으면 잘라버림.

 

반응형
저작자표시 (새창열림)

'Computer Science > Machine Learning' 카테고리의 다른 글

[ML] Deep Neural Networks  (0) 2025.12.06
[ML] Neural Networks  (0) 2025.12.06
[ML] Decision Tree  (0) 2025.10.18
[ML] Nearest Neighbor Method  (0) 2025.10.18
[ML] Logistic Regression  (0) 2025.10.17

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [ML] Deep Neural Networks

    [ML] Deep Neural Networks

    2025.12.06
  • [ML] Neural Networks

    [ML] Neural Networks

    2025.12.06
  • [ML] Decision Tree

    [ML] Decision Tree

    2025.10.18
  • [ML] Nearest Neighbor Method

    [ML] Nearest Neighbor Method

    2025.10.18
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (679)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (10)
    • 💬 기록 (8)
    • 📚 공부 (6)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바