XGBoost 매개 변수의 효율적인 조정안녕하세요 안녕하세요. ,
저는 XGBoost로 모델을 구축하고 NN과 같은 다른 트리 모델 및 비 트리 모델과 비교하는 작업을 해왔습니다. 나는 Nate에 대해 유사한 접근 방식을 수행하고 (완전히 다른 데이터 테이블에서) 원래 데이터 세트의 일부를 보류 한 다음 모델 비교 플랫폼을 사용하여 이러한 모델이 테스트 데이터 세트와 얼마나 잘 비교되는지 확인합니다.
XGBoost가 예상했던대로 테스트 데이터 세트에서 잘 수행되지 않는다는 것을 알게되었습니다. 현재 부트 스트랩 포리스트가 더 나은 작업을 수행한다는 것을 알았습니다. 최적화 된 XGBoost에 대한 튜닝 테이블의 최상의 출력으로 기본값과 다음을 비교했습니다. 내가 핏을 잘 조정하지 않을 수 있으므로 수정할 수있는 매개 변수가 너무 많기 때문에 핏을 조정하는 더 효율적인 방법이 있는지 궁금합니다.
예제를 살펴보고 PDF 도움말에 참조 된 온라인 문서를 읽었지만 모델 튜닝과 관련하여 실질적인 도움말에 대한 설명이 많지 않습니다. 참고로, k- 폴드 교차 검증이 아닌 단일 홀드 아웃 검증을 사용하고 있습니다. 먼저 약간 과적 합할 수있는 매우 복잡한 모델을 빌드 한 다음 다른 매개 변수로 다시 정리하여 더 보수적으로 만드는 것이 더 낫습니까?
DS
Re : XGBoost 매개 변수의 효율적인 조정안녕하세요 안녕하세요. ,
업데이트 된 정보에 감사드립니다. XGBoost를 내가 할 수있는 다른 플랫폼에 가깝게 조정 한 후 최적화 된 부스트 트리와 부트 스트랩 포리스트의 출력을 XGBoost에 대해 최선을 다해 테스트했습니다. 정확하지는 않지만 매우 가깝습니다!
앞서 게시 한 링크의 절차를 따르면 더 나은 튜닝 모델에 접근하는 데 큰 도움이되었습니다.
몇 가지 다른 피드백 사항 :
1. 나는 최근에 "비교"에서 "표시된 모델 제거"가하는 일이 무엇인지 이해했지만, 상자를 선택하지 않으면 유지 될 것이라는 점은 분명하지 않았습니다. 이것은 검증 R ^ 2에 의해 데이터 테이블을 정렬 한 후 가능한 적합을 제거하는 유용한 방법이었습니다.
2. 튜닝 디자인을 실행할 때 첫 번째 열이 최소 / 최대 열과 동일한 고정 값을 갖거나 제대로 작동하려면 그 사이 어딘가에 있는지 확인하는 것이 중요하다는 것을 알게되었습니다. min_child_weight와 같은 다른 값을 조정하고 반복에 대해 고정 값 (예 : Min / Max 150)을 입력했지만 첫 번째 열 값은 100으로 남아 있습니다. 이 경우 반복이 150이 아닌 100으로 유지됩니다. 최소 / 최대 값이 동일한 값으로 설정되면 첫 번째 열은 고정되지 않은 매개 변수에 대한 튜닝 테이블을 사용하는 것처럼 해당 값을 가져 와서 다시 채워야한다고 생각합니다. 아래 예에서는 max_depth 및 min_child_weight를 조정했지만 최소 / 최대가 387로 설정 되었음에도 불구하고 반복을 100으로 두는 몇 가지 인스턴스가 있습니다. 올바르게 계산하려면 수동으로 다시 들어가서 387로 변경해야했습니다.

감사!,
DS
Re : XGBoost 매개 변수의 효율적인 조정안녕하세요 @DS ,
계속해 주셔서 감사합니다. 최근에 모델 비교 플랫폼에서 현재 XGBoost 결과에 부정적인 영향을 미칠 수있는 수식 메타 데이터의 몇 가지 문제를 발견하고 수정했습니다. 이러한 업데이트와 몇 가지 추가 업데이트는 JMP Pro 16 얼리 어답터에서 몇 달 내에 제공 될 예정입니다. 그 동안 JMP 테이블에서 직접 Boosted Tree 플랫폼과 몇 가지 기본적인 비교를 시도 할 수 있습니다.
다음 매개 변수는 Boosted Tree와 XGBoost간에 직접 매핑됩니다.
- 레이어 수 <-> 반복
- 트리 당 분할 <-> max_depth
- 학습률 <-> learning_rate
- 최소 크기 분할 <-> min_child_weight
- 행 샘플링 속도 <-> 서브 샘플링
- 열 샘플링 속도 <-> colsample_bytree
XGBoost 고급 매개 변수 grow_policy를 "lossguide"로 변경하는 것이 조금 더 도움이 될 수 있습니다. 표시된대로 두 개의 유사한 모델에서 예측을 피팅하고 저장 한 다음 서로에 대해 예측을 플로팅합니다. 상관 관계가 높아야합니다.
Advanced Options 아래의 Tuning Design Table은 예상대로입니다. XGBoost 매개 변수 이름과 정확히 일치하는 열 이름으로 별도의 JMP 테이블을 설정 한 다음 매개 변수 상자에이 JMP 테이블의 이름을 수동으로 입력해야합니다. 테이블을 처음부터 수동으로 생성하거나 모델 비교 테이블> 데이터 테이블로 저장을 마우스 오른쪽 버튼으로 클릭하여 시작할 수 있습니다. 이를 통해 모든 매개 변수에 대해 임의의 설계를 지정할 수 있지만이 시점에서 약간만 테스트되었으므로 결과를주의 깊게 확인해야합니다.
Re : XGBoost 매개 변수의 효율적인 조정안녕하세요 안녕하세요. ,
정보 주셔서 감사합니다. 이 게시물은 최소한 XGBoost 튜닝에 대한 직접적인 예제와 반복적 인 단계별 접근 방식을 통해 매우 유용하다는 것을 알았습니다.
https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
내 특정 상황에는 약 3500 개의 훈련 행과 1000 개의 테스트 행이 있습니다. 앞서 언급했듯이 테스트 행은 첫 번째 데이터 테이블에 연결 한 다음 모델을 비교하는 별도의 데이터 테이블에 있습니다. 이것은 실제로 사용되지 않는 데이터 세트에서 어떤 모델이 실제로 가장 잘 예측되는지 알아 내기위한 것입니다. 또한 3500 개의 훈련 행을 80/20 훈련 / 검증 행으로 분할하고 모델링중인 Y 출력으로 계층화했습니다.
어떤 것이 가장 잘 작동하는지 알아보기 위해 몇 가지 다른 튜닝 방식을 살펴 보겠습니다. 그러나 제가하고 싶은 한 가지는 XGBoost가 부트 스트랩 포리스트와 같은 "동일한"출력을 제공 할 수 있는지 확인하는 것입니다. 부트 스트랩 포리스트 또는 부스트 트리에서 매개 변수를 가져와 XGBoost의 적절한 설정으로 변환 할 수 있습니까? 원칙적으로 XGBoost는 거의 동일한 결과를 제공하지만 훨씬 빠릅니다. 이 작업을 수행하는 방법에 대한 몇 가지 게시물을 읽으려고 시도했지만 다른 플랫폼의 설정을 XGBoost로 변환하는 방법에 여전히 어려움을 겪고 있습니다.
모델 비교 플랫폼이 XGBoost 모델을 다르게 평가할 수 있습니까?
좀 더 명확한 질문 :
XGBoost 플랫폼에서 트리 수를 결정하는 방법이 있습니까? 이 필드가 "반복"입니까?
플랫폼에 자체 튜닝 설계 테이블을 "공급"할 수 있습니까? 고급 옵션 아래에 해당 이름의 필드가 있지만 비어 있습니다. 자체 튜닝 테이블이 있다면 거기에 이름을 입력 할 수 있습니까?
감사,
DS
Re : XGBoost 매개 변수의 효율적인 조정안녕하세요 @DS , 의견을 보내 주셔서 감사합니다. 튜닝을위한 몇 가지 적절한 수동 방법이 있습니다. 방금 인터넷 검색 "tuning xgboost"를 시도했는데 처음 몇 개의 링크가 합리적으로 보입니다. 이것들은 과학 이라기보다는 예술에 가깝다고 생각할 수 있지만, 각 매개 변수가 무엇을하는지 조명하고 XGBoost의 작동 방식에 대한 전반적인 직관을 구축하는 데 도움이됩니다.
설정을 공유하거나 게시 할 수있는 경우에 대비하여 설정에 대해 알고 싶습니다. Kaggle과 같은 경쟁 상황에서뿐만 아니라 여러 비교에서 XGBoost가 더 잘 수행되는 것을 발견했습니다. 성능 향상은 데이터 세트 크기가 증가할수록 더 강해지는 경향이 있습니다.
고전적인 훈련-검증-테스트 분할을 수행하는 것 같습니다. 성능 추정치가 얼마나 안정적인지 확인하기 위해 다른 분할로이 절차를 여러 번 실행하는 것이 좋습니다.
k-fold의 한 가지 장점은 k 모델 적합에 대해 "배깅 된"예측 변수를 얻을 수 있으며 거의 항상 데이터의 일부에 대해 훈련 된 단일 모델보다 더 나은 성능을 발휘한다는 것입니다. 다른 접근 방식은 원하는 검증 접근 방식으로 튜닝 한 다음 전체 훈련 + 검증 데이터를 사용하여 마지막에 하나의 최종 피팅을 수행하는 것입니다.