나무 부스팅 및 배깅 (XGBoost, LightGBM) 특징의 y %의 N 개의 랜덤

나무 를 꾸리 거나 부스팅 하는 아이디어에 대한 많은 블로그 게시물, 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만큼 강력하지 않습니다.



답변

자루에 넣기 : 표본의 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) :

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