본문 바로가기

배우기/복습노트[Python과 분석]

[복습] Python | 분석 | 부스팅 이론(1) + 하루끝(20240206)

728x90
반응형

  - 트리기반 모델에서의 강한 예측기를 만들어주는 기법

  - 정의: 약한 학습기에서 강한 학습기를 만들어 최종 모형 평가

부스팅 트리는 서로 독립적이지 않다. 앞의 결과 트리가 뒤의 결과 트리에 영향을 주기 때문이다. 이전 트리 오차를 보완하는 두 번째 트리를 만드는 과정을 반복하는 기법이다. 즉, 이전 학습 결과 오차를 반영한 새로운 학습기를 만드는 과정인 것이다. 조금 더 복잡해지는 모델을 계속 반복하여 만들게 된다.

  - 서로 트리들이 상호 연관(오차를 보완하다보니 트리들끼리 독립적이지 않음 → parallel 효과 없음, 즉 CPU 코어를 갖고 job을 할당하여 마지막에 job을 합치게 되는데 서로 독립적이지 않은 모델들 가지고 parallel test를 하면 속도를 더 저하시키는 요인이 되기도 함. 즉, 계속 다음 job을 기다리기 때문에 기대만큼 효과가 좋지 않음.

  - 랜덤 포레스트보다 더 적은 수의 트리로도 높은 예측력을 나타냄(속도가 느린 편이긴 하지만 생각보다 느리진 않음. 점차 강력한 모델로 만들어지기 때문에 점차 적은 수의 트리로 완성됨)

  - 대용량, 고차원 데이터에 유리

  - GBT(Gradient Boosting Tree), AdaBoost, XGBM(eXtreme Gradient Boosting Tree), Light GBM

 

 

1) AdaBoost(에이다부스트)

  - 오분류에 높은 가중치를 부여하여 오분류 데이터들이 정분류 되도록 트리를 정교하게 만듦

 

2) GradientBoost(그래디언트부스트)

  - 이전 트리의 오차를 학습하여 오차를 줄이는 최적화 방식을 통해 트리를 보완

    오차 보완 정도는 학습률(learning rate)로 결정(학습률은 하이퍼 파라미트)

     그래디언트 → 오차의 가장 작은 지점을 찾아가는 과정(최적화 과정). 

 

    오차를 정의하는 방법

1. 회귀모형 일 떄: MSE를 오차 함수로 주요 사용

2. 분류모형 일 떄: 로그손실함수를 사용하여 오차를 측정, 측정된 오차를 가지고 기울기와의 관계를 파악. → 분명히 오차를 최소화하는 수렴 구간이 있을 것임. 이 구간으로부터 조금만 구간을 벗어나도 오차가 커짐.

오차를 최소화하는 최적화 지점을 미분을 통하여 찾을 수 있다는 것이 그래디언트 이론

오차함수를 정의하고 기울기와의 관계를 파악하는 최적화 방식을 통해 트리를 보완. 여기서말하는 기울기는 임계값.

학습률을 너무 작게 설정하면 오차의 최적화 되는 수렴구간을 찾을 수 있으나 너무 느리다. 속도라는 측면에서 적절한 수준에서 튜닝하여야한다.

 

다시 정리하면, 최적화 방식은,

1. 오차 함수를 정의(회귀는 MSE 기반의 오차 함수 사용, 분류는 로그 손실 함수 사용)

2. 오차와 기울기(=임계값) 관계를 파악

3. 오차의 최소 지점을 찾음(수렴 구간) → 최적화

 

그러다보니 몇 번 학습하면 오차는 최적화된다. stopping point는 랜덤포레스트보다 빠르다. 

 

 

cancer data로 활용하여 보자.

 

 

728x90

 

 

예제 - cancer data를 사용한 종양의 양성 분류(boosting tree)

 

 

1. 데이터 로딩

 

 

2. 모델링

여기서는 train/test를 나누지 않는다. CV를 할 것이므로 원본 그대로 두겠다.

 

 

 

XGB는 설치를 해야한다.

pip install xgboost

 

 

 

 

3. GB의 lr 튜닝(learning rate)

 

learning_rate를 조절하는 것이 그닥 효과가 있어보이지 않는다.

속도를 느리게 가져가더라도 lr을 작게 설정하여 수렴구간에 잘 도달하게 하는 것이 좋겠음.

728x90
반응형