나무 부스팅 및 배깅 (XGBoost, LightGBM)


17

나무 를 꾸리 거나 부스팅 하는 아이디어에 대한 많은 블로그 게시물, YouTube 비디오 등이 있습니다. 내 일반적인 이해는 각각에 대한 의사 코드는 다음과 같습니다.

포장 :

  1. 표본의 x %와 특징의 y %의 N 개의 랜덤 표본 추출
  2. 각 N에 모델 (예 : 의사 결정 트리)을 적합
  3. 각 N으로 예측
  4. 최종 예측을 얻기 위해 예측 평균화

부스팅 :

  1. 모델 (예 : 의사 결정 트리)을 데이터에 적합
  2. 잔차 구하기
  3. 모형을 잔차에 적합
  4. N 부스팅 라운드는 2로 이동
  5. 최종 예측은 순차 예측 변수의 가중치 합계입니다.

위의 이해를 명확하게 설명하지만 의도 한 질문은 다음과 같습니다.

XGBoost와 LightGBM에는 모두 자루에 넣을 수있는 매개 변수가 있습니다. 응용 프로그램은 Bagging OR Boosting (모든 블로그 게시물에서 말하는 내용)이 아니라 Bagging AND Boosting입니다. 결합 된 배깅 및 부스팅이 발생하는 장소 및시기에 대한 의사 코드는 무엇입니까?

나는 그것이 "Bagged Boosted Trees"라고 예상했지만 그것이 "Boosted Bagged Trees"인 것 같습니다. 그 차이는 상당합니다.

부스트 부스트 트리 :

  1. 표본의 x %와 특징의 y %의 N 개의 랜덤 표본 추출
  2. N 개의 샘플 각각에 부스트 트리를 맞춤
  3. 각 N으로 예측
  4. 최종 예측을 얻기 위해 예측 평균화

가장 좋은 방법 인 것 같습니다. 결국, 부스팅의 위험은 과적 합이며 배깅의 주요 이점은 과적 합을 줄이는 것입니다. 부스트 모델을 포장하는 것은 좋은 생각처럼 보입니다.

그러나 scikit-learn 그라디언트 _boosting.py ( 예 : 임의의 기능을 선택하지는 않지만 그라디언트 _boosting.py)를 살펴보고 LightGBM 및 XGBoost 관련 게시물에서 작은 덩어리를 결합하면 XGBoost 및 LightGBM이 다음과 같이 작동하는 것처럼 보입니다.

부스트 트리 추가 :

  1. 의사 결정 트리를 데이터에 적합
  2. N 승압 라운드에서 i의 경우 :
    • 잔차 구하기
    • 내가 bag_frequency == 0 인 경우 (즉, 매 5 라운드마다 bag) :
      • 표본의 x %와 특징의 y %의 단일 랜덤 표본을 취합니다. 앞으로이 무작위 샘플을 사용하십시오
    • 나무를 잔차에 맞추다
  3. 최종 예측은 순차 예측 변수의 가중치 합계입니다.

여기에 내 이해를 수정하고 세부 사항을 작성하십시오. Boosted Bagged Tree (bag_frequency 당 1 개의 임의의 트리 만 있음)는 Bagged Boosted Tree만큼 강력하지 않습니다.


2
흥미롭고 공식적인 질문에 +1합니다. 그리고 사이트에 오신 것을 환영합니다.
mkt-Reinstate Monica

부스팅을 위해서는 "오류 계산"이 필요합니다. 잘못 된 잘못했다. 가중치는 adadoost에 중요합니다. 원시 잔존물이 아닙니다. ... 우리는 부스팅에 필요한 확률 적 그라디언트에 대해서는 이야기하지 않지만 속도는 향상시킵니다.
EngrStudent-복직 모니카

여기에 부스트 태그가 있습니다. 각 시리즈 단계마다 새 트리 대신 평균 출력을 가진 새 포리스트를 얻습니다. 유진 Tuv와 Kari Torkkola. jmlr.org/papers/volume10/tuv09a/tuv09a.pdf
EngrStudent-복직 모니카

bagged boosted는 일련의 앙상블 숲을 만들고 평균 출력을 얻습니다. 시리즈 (부스트) 앙상블이 만들 수있는 과잉 피팅을 사용하고보다 강력한 출력을 제공 할 수 있지만 이득은 크지 않을 것입니다.
EngrStudent-복직 모니카

답변:


13

자루에 넣기 : 표본의 x %와 특징의 y %의 N 개의 무작위 표본 추출

인스턴스는 Bagging 에서 반복적으로 서브 샘플링 되지만 기능은 아닙니다. ( RandomForests , XGBoostCatBoost 는 둘 다 수행합니다) :

Given dataset D of size N.
For m in n_models:
    Create new dataset D_i of size N by sampling with replacement from D.
    Train model on D_i (and then predict)
Combine predictions with equal weight 

중복을 제거하려면 Boosting 의사 코드 에 초기화 단계를 포함하십시오 .

Init data with equal weights (1/N).
For m in n_model:
    Train model on weighted data (and then predict)
    Update weights according to misclassification rate.
    Renormalize weights
Combine confidence weighted predictions

Bagged Boosted Trees (당신이 부름)는 확실히 합리적인 접근법이지만 XGBoost 또는 CatBoost다릅니다 .

Given dataset D of size N.
For m in n_models:
    Create new dataset D_i of size N by sampling with replacement from D.
    (Insert Boosting pseudo code here (on D_i))
Combine predictions with equal weight 

XGBoostCatBoost 는 모두 Boosting을 기반으로 하며 전체 교육 데이터를 사용합니다. 또한 모든 부스팅 반복에서 한 번 서브 샘플링하여 배깅을 구현합니다.

Init data with equal weights (1/N).
For m in n_model:
    Train model on weighted bootstrap sample (and then predict)
    Update weights according to misclassification rate.
    Renormalize weights
Combine confidence weighted predictions

"모형을 잔차에 맞추기"를 고수하려면 " 부트 스트랩 샘플의 잔차에 모형을 맞추기"와 같습니다 .


추가 사항 :

제안한대로 " 최선의 방법 "은 없습니다 (무료 점심 정리 없음). "Bagged Boosted Trees"는 특정 데이터 세트에서 XGBoost를 능가 할 수 있습니다.

샘플의 x %를 단일 랜덤 샘플로 가져옵니다.

이 줄은 혼란 스럽습니다. 어디서 구했습니까?

내가 bag_frequency == 0 mod 인 경우 (즉, 매 5 라운드마다 bag) :

이것은 의사 코드에 언급되어서는 안됩니다. 특히 다른 중요한 매개 변수가 누락 된 경우 (예 : 학습 속도 ).


(+1) 좋은 답변입니다! 명확히하기 위해 : " XGBoost와 LightGBM에 모두 bagging을 허용하는 매개 변수가 있습니다 "라는 말에서 OP가 올바르지 않습니까?
mkt-Reinstate Monica

둘 다 bagging : LightGBMbagging_fractionXGBoost의 서브 샘플링허용 합니다. 확실하지 않습니다. 왜 내가 항상 CatBoost를 언급했는지. 그러나 질문과 관련하여 모두 동일한 방식으로 작동합니다.
락산 나단

내 실수, 나는 당신의 대답에서 그것을 언급하는 줄을 놓쳤다. " 부스트 반복마다 서브 샘플링을 한 번 설명 할 수 있습니까?" 각 부스팅 반복에서 많은 서브 샘플이 취해지고 트리가 각 서브 샘플에 적합한 다음 오 분류 비율이 포장 된 트리를 기반으로 계산되고 마지막으로 가중치가 업데이트된다는 것을 의미합니까? 그렇다면 의사 코드에서 이것을 명확히 할 수 있습니까?
mkt-Reinstate Monica

많은 서브 샘플이 그려지는 것은 하나뿐입니다. 모델을 모든 가중치 인스턴스에 맞추는 대신 모델이 부트 스트랩 샘플에 대해 학습됩니다.
락산 나단

"샘플의 x %의 단일 랜덤 샘플을 취하십시오"에 관하여; "행의 x %의 단일 샘플을 취하는 것"이 ​​더 좋습니다. 나는 여기 에서 그것을 얻었다 .
Jonathan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.