xgboost의 초과 적합에 대한 토론


20

내 설정은 다음과 같습니다.

"Applied Predictive Modelling"의 지침을 따르고 있습니다. 따라서 상관 된 기능을 필터링하고 다음과 같이 끝납니다.

  • 훈련 세트의 4900 데이터 포인트와 테스트 세트의 1600 데이터 포인트
  • 26 개의 기능이 있으며 대상은 연속 변수입니다.

caret패키지를 사용하여 모델을 훈련시키기 위해 5 배 교차 검증을 적용 합니다. MARS 모델을 적용하면 훈련 세트와 테스트 세트에서 평균 절대 오차 (MAE)가 약 4가됩니다.

그러나 xgboost (트리 알고리즘 또는 선형 알고리즘)를 적용하면 훈련 세트에서 0.32 (!)와 테스트 세트에서 2.4와 같은 것을 얻습니다.

따라서 테스트 오류가 교육 오류의 8 배인 경우 다음과 같이 말합니다. 교육 데이터를 과적 합했습니다. 어쨌든 테스트에서 더 작은 오류가 발생합니다.

xgboost에서 다음 매개 변수를 사용합니다.

  • nrounds = 1000eta = 0.01(nrounds 증가와 ETA를 감소하는 것은 도움이되지만 I 메모리가 부족하고 실행 시간이 너무 깁니다 수)
  • max_depth = 16: 다른 게시물과 기본값 6을 비교하면 크게 보이지만 문제는 매우 복잡합니다.이 경우 16은 너무 크지 않습니다.
  • colsample_bytree = 0.7, subsample = 0.8min_child_weight = 5:이 작업을 수행하면 초과 적합을 줄이려고합니다.

max_depth를 줄이면 train and test-error가 더 가까워 지지만 여전히 큰 간격이 있고 테스트 오류가 더 큽니다 (3보다 약간 높음).

선형 부스터를 사용하면 최적의 파레 미터에서 대략 동일한 트레인 및 테스트 오류가 발생합니다.

  • lambda = 90 그리고 alpha = 0 : 교차 검증에 의해 발견되며, 람다는 과적 합을 방지해야합니다.
  • colsample_bytree = 0.8, subsample = 0.8min_child_weight = 5:이 작업을 수행하면 초과 적합을 줄이려고합니다.

내 느낌은 xgboost가 여전히 초과 적합하다는 것입니다.하지만 훈련 오류와 실시간 테스트에서 볼 수있는 한 (xgboost 모델과 실제 앙상블을 4 일 동안 사용했습니다) 오류가 있습니다 (오류는 테스트 오류보다 크지 만 기능 및 기타 변수의 예측에 대해서는 실제 생활에서 더 많은 불확실성이 있습니다).

어떻게 생각하십니까? (가능한 경우) 실제 성능이 우수한 경우 과잉 적합을 수락 할 수 있습니까? 내 설정의 xgboost가 과적 합하는 경향이 있습니까?

답변:


34

과적 합이 너무 나빠서 테스트 오류가 더 작더라도 과적 합을하는 모델을 선택해서는 안됩니까? 아니요. 그러나 선택에 대한 정당성이 있어야합니다.

이 동작은 XGBoost로 제한되지 않습니다. 모든 머신 러닝 기술에서 공통적 인 스레드입니다. 불충분과 과적 합 사이의 올바른 균형을 찾는 것. 공식적인 정의는 Bias-variance tradeoff (Wikipedia) 입니다.

편향-분산 트레이드 오프

다음은 모델의 선택을 정당화하는 데 도움이되는 바이어스-분산 트레이드 오프를 단순화 한 것입니다.

  • 우리는 모델이 데이터의 정보를 완전히 사용할 수 없다면 바이어스 가 높다고 말합니다 . 가장 빈번한 사례, 응답의 평균 또는 몇 가지 강력한 기능과 같은 일반 정보에 너무 의존합니다. 변수가 정규 분포를 따르거나 모형이 선형이라고 가정하면 바이어스는 잘못된 가정에서 비롯 될 수 있습니다.

  • 데이터에서 너무 많은 정보를 사용 하는 모델은 분산 이 높다고 말합니다 . 그것은 제시 된 훈련 세트에서만 관련이있는 정보에 의존합니다.이 정보는 충분히 일반화되지 않습니다. 일반적으로 훈련 세트를 변경하면 모델이 많이 변경되므로 "고 분산"이름입니다.

이러한 정의는 언더 피팅 및 오버 피팅 정의와 매우 유사합니다. 그러나 이러한 정의는 종종 너무 단순화되어 반대의 경우가 아닙니다

  • 훈련 오류와 테스트 오류가 모두 높은 경우 모델이 적합하지 않습니다. 이것은 모델이 너무 단순하다는 것을 의미합니다.
  • 테스트 오차가 훈련 오차보다 높으면 모형이 과적 합됩니다. 이것은 모델이 너무 복잡하다는 것을 의미합니다.

모델의 올바른 복잡성을 선택하는 데 도움이되므로 이러한 단순화는 물론 도움이됩니다. 그러나 그들은 (거의) 모든 모델에 편향과 분산 성분이 모두 있다는 중요한 점을 간과합니다. 언더 피팅 / 과피 팅 설명은 편차가 너무 많거나 편차가 너무 많지만 항상 (거의) 둘 다 있음을 나타 냅니다.

바이어스-분산 트레이드 오프에 대한 자세한 정보를 원하면 Google을 통해 유용한 시각화 및 리소스를 많이 활용할 수 있습니다. 모든 머신 러닝 교재에는 바이어스-분산 트레이드 오프에 관한 섹션이 있습니다.

  • 통계 학습 및 통계 학습 요소 소개 (여기에서 사용 가능) .
  • Christopher Bishop의 패턴 인식 및 기계 학습.
  • 기계 학습 : 확률 론적 관점, Kevin Murphy.

또한, 스캇 포트만-로의 편견-차이점 트레이드 오프 이해에 도움이 된 멋진 블로그 게시물이 있습니다.

문제에 적용

두 가지 모델이 있습니다.

기차 MAEMAE 테스트화성4.04.0낮은 분산, 높은 바이어스,XGBoost0.32.4높은 분산, 낮은 바이어스,

하나를 선택해야합니다. 그러기 위해서는 더 나은 모델을 정의해야합니다. 의사 결정에 포함되어야하는 매개 변수는 모델의 복잡성과 성능입니다.

  • 하나의 성능 단위로 교환하려는 "단위"의 복잡도는 몇 개입니까?
    • 복잡성이 높을수록 분산이 높아집니다. 학습 한 것과 약간 다른 데이터 집합에서 모델을 일반화하려면 복잡성을 줄이십시오.
    • 쉽게 이해할 수있는 모델을 원한다면 모델의 복잡성을 줄임으로써 성능 비용을 절감 할 수 있습니다.
    • 당신은 당신이하는 데이터 세트에 최적의 성능을 목표로하는 경우 알고 훈련 세트에 비해 같은 생식 과정에서 오는, 당신은 당신의 테스트 오류를 최적화하고 통계로 사용하기 위해 복잡성을 조작 할 수 있습니다. 이것은 훈련 세트가 더 큰 세트에서 무작위로 샘플링되고 모델이이 세트에 적용될 때 발생합니다. 이것은 대부분의 Kaggle 대회에서 그렇습니다.

여기서 목표는 "과적 합하지 않은"모델을 찾는 것이 아닙니다. 바이어스 편차가 가장 좋은 모형을 찾는 것입니다. 이 경우, XGBoost 모델에 의해 달성 된 바이어스 감소는 분산 증가를 정당화하기에 충분하다고 주장합니다.

당신은 무엇을 할 수 있나요

그러나 하이퍼 파라미터를 조정하여 더 잘 수행 할 수 있습니다.

  • 라운드 수를 늘리고 학습 속도를 줄이는 것이 가능합니다. 그래디언트 부스팅에 대해 "이상한"것은 훈련 오류가 0에 도달 한 지점을 지나서 실행하면 여전히 테스트 오류를 ​​개선하는 것으로 보입니다 (여기에서 논의 된 것처럼 : 얕은 것이 좋을 때만 더 낫습니까? ). 다른 매개 변수를 설정하면 데이터 세트에서 모델을 조금 더 길게 학습 할 수 있습니다.

  • 자라는 나무의 깊이는 시작하기에 아주 좋은 곳입니다. 하나의 깊이 단위마다 구성 할 리프 수를 두 배로 늘립니다. 크기가 16이 아닌 크기가 2 인 나무를 키우려면1/214그 시간의! 더 작은 나무를 키우는 것이 좋습니다. 그 이유 는 트리의 깊이가 피처 상호 작용의 정도를 나타내야하기 때문 입니다. 이것은 전문 용어 일 수 있지만 기능의 상호 작용 수준이 3 인 경우 (거의 : 4 개의 기능 조합이 해당 기능의 3 + 4 조합보다 강력하지 않은 경우) 3보다 큰 크기의 나무가 자랍니다. 해로운. 깊이 3의 두 나무는 깊이 4의 한 나무보다 일반화 능력이 더 높습니다. 이것은 다소 복잡한 개념이므로 지금은 다루지 않겠지 만 시작하기 위해이 논문 모음을 확인할 수 있습니다 . 또한 깊은 나무는 높은 분산으로 이어집니다!

  • 로 알려진 서브 샘플링, 사용 포기할을 , 분산을 줄이기 위해 중대하다. 개별 나무의 분산이 높은 경우, 자루에 넣는 것은 나무의 평균을 구하고 평균은 개별 나무보다 덜 분산됩니다. 트리의 깊이를 조정 한 후에도 여전히 높은 분산이 발생하면 서브 샘플링을 늘리십시오 (즉, 사용 된 데이터의 일부를 줄이십시오). 특징 공간의 서브 샘플링도이 목표를 달성합니다.


1
"감사합니다"라는 말은하지 말고이 길고 흥미로운 답변에 대해 "감사합니다"라고 말하고 싶습니다. 나는 aleady가 당신이 쓰는 것들에 대해 약간의 지식을 가지고 있었지만 이것은 정말로 훌륭하게 정리되었습니다. 나는 당신의 참고 문헌 중 일부를 살펴보고 새로운 나무를 키우고 주석으로 돌아올 것입니다. 지금 : 감사합니다! 큰!
Ric

상호 작용 페이지 stat.columbia.edu/~jakulin/Int에 대한 링크 는 정말 좋습니다!
Ric

나는 당신의 조언을 취하고 나무의 깊이를 3으로 제한했지만 1200 주위를 차지했으며 resuls는 기분이 좋았습니다. 매우 빠른 계산, 기차와 테스트의 차이가 줄어 듭니다. 이야기의 나머지 부분은 여기에 있습니다 : stats.stackexchange.com/questions/205858/…
Ric
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.