100 개의 숫자 특성을 사용하여 5 만 개 이상의 예제를 통해 그라디언트 부스팅 모델을 학습하려고합니다. XGBClassifier
는 500 개를 처리합니다. 내 컴퓨터에서 43 초 이내에 나무를, GradientBoostingClassifier
는 1 분 2 초에 10 그루의 나무 (!) 만 처리합니다 🙁 나는 500 그루의 나무를 키우려고 노력하지 않았습니다. 나는 동일한 learning_rate
및 max_depth
설정을 사용하고 있습니다. 아래를 참조하세요.
XGBoost가 그토록 많은 이유 더 빠를까요? sklearn 사람들이 모르는 그래디언트 부스팅을 위해 새로운 구현을 사용합니까? 아니면 “코너를 자르고”더 얕은 나무를 키우나요?
ps이 토론을 알고 있습니다. https://www.kaggle.com/c/higgs-boson/forums/t/10335/xgboost-post-competition-survey 하지만 거기에서 답을 얻을 수 없습니다 …
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1, gamma=0, learning_rate=0.05, max_delta_step=0, max_depth=10, min_child_weight=1, missing=None, n_estimators=500, nthread=-1, objective="binary:logistic", reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=0, silent=True, subsample=1) GradientBoostingClassifier(init=None, learning_rate=0.05, loss="deviance", max_depth=10, max_features=None, max_leaf_nodes=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=10, presort="auto", random_state=None, subsample=1.0, verbose=0, warm_start=False)
댓글
- ' 곧 " LightGBM이 XGBoost보다 훨씬 빠른 이유는 무엇입니까? " 🙂
답변
“숫자 “기능, 나는 당신의 기능이 범주가 아니며 높은 arity를 가지고 있다고 생각합니다 (많은 다른 값을 취할 수 있으므로 가능한 많은 분할 점이 있습니다). 이 경우 평가할 [많은 기능 $ \ times $ 많은 분할 점]이 있기 때문에 나무를 키우는 것이 어렵습니다.
내 생각에는 XGBoost가 가장 큰 영향을 미친다는 것입니다. 분할 점에 대한 근사치를 사용합니다. 10000 개의 분할이 가능한 연속 기능이있는 경우 XGBoost는 기본적으로 “최상의”300 분할 만 고려합니다 (단순화). 이 동작은 sketch_eps
매개 변수에 의해 제어되며 문서 에서 자세한 내용을 읽을 수 있습니다. 낮추고 차이를 확인할 수 있습니다. scikit-learn 문서 에 이에 대한 언급이 없기 때문에 사용할 수없는 것 같습니다. 논문 (arxiv) 에서 XGBoost 방법이 무엇인지 알 수 있습니다.
XGBoost는 이러한 분할 점의 평가에 대한 근사값도 사용합니다. . scikit이 어떤 기준으로 분할을 평가하는지는 모르지만 나머지 시간 차이를 설명 할 수 있습니다.
어드레싱 주석
분할 점 평가 관련
하지만 무엇을 의미 했습니까? “XGBoost는 또한 그러한 분할 점의 평가에 대한 근사치를 사용합니다”? 내가 이해하는 한, 평가를 위해 그들은 논문의 eq (7)에 나타난 것처럼 최적의 목적 함수의 정확한 감소를 사용하고 있습니다.
분할 점을 평가하려면 $ L (y, H_ {i-1} + h_i) $를 계산해야합니다. 여기서 $ L $는 비용 함수, $ y $는 목표, $ H_ {i- 1} $는 지금까지 빌드 된 모델이고 $ h_i $는 현재 추가됩니다. 이것은 XGBoost가하는 일이 아닙니다. 그들은 Taylor 확장에 의해 비용 함수 $ L $를 단순화하고 있습니다. 이것은 계산할 매우 간단한 함수로 이어집니다. $ H_ {i-1} $에 대해 $ L $의 Gradient와 Hessian을 계산해야하며 $ i $ 단계에서 모든 잠재적 분할에이 숫자를 재사용하여 오버 럴 계산을 빠르게 할 수 있습니다. 자세한 내용은 Taylor 확장을 사용한 손실 함수 근사치 (CrossValidated Q / A) 를 확인하거나 논문에서 파생 된 내용을 확인할 수 있습니다.
The 요점은 $ L (y, H_ {i-1} + h_i) $를 효율적으로 근사하는 방법을 찾았다는 것입니다. 최적화 나 회피 또는 중복 계산을 허용하는 내부 지식없이 $ L $를 완전히 평가하면 분 할당 더 많은 시간이 소요됩니다. 이와 관련하여 근사치입니다. 그러나 다른 그래디언트 부스팅 구현도 프록시 비용 함수를 사용하여 분할을 평가하며 XGBoost 근사가 다른 것보다 더 빠른지 여부는 알 수 없습니다.
댓글
- @Winks에게 감사합니다. 논문을 읽고 분할 후보를 선택하는 근사 알고리즘의 의미를 확인했습니다. 그러나 " XGBoost는 이러한 분할 점 평가에 대한 근사값도 사용합니다 "의 의미는 무엇입니까? 내가 아는 한, 평가를 위해 그들은 논문의 eq (7)에 나타난 것처럼 최적의 목적 함수에서 정확한 감소를 사용하고 있습니다.
- 나는 귀하의 의견을 해결하기 위해 내 대답을 편집했습니다. 분할 점 평가에 대한 자세한 내용은 이 Q / A 를 확인하세요.
- 감사합니다. @Winks! 여기에 더 자세한 질문에 답할 수 있다면 좋을 것입니다. datascience.stackexchange.com/q/10997/16050
- 이것은 좋은 대답입니다. 해트트릭!