Tại sao xgboost nhanh hơn nhiều so với sklearn GradientBoostingClassifier?


29

Tôi đang cố gắng đào tạo một mô hình tăng cường độ dốc hơn 50 nghìn ví dụ với 100 tính năng số. XGBClassifierxử lý 500 cây trong vòng 43 giây trên máy của tôi, trong khi GradientBoostingClassifierchỉ xử lý 10 cây (!) trong 1 phút và 2 giây :( Tôi không buồn cố gắng trồng 500 cây vì sẽ mất hàng giờ. Tôi đang sử dụng tương tự learning_ratemax_depthcài đặt , xem bên dưới.

Điều gì làm cho XGBoost nhanh hơn nhiều? Có phải nó sử dụng một số triển khai mới lạ để tăng cường độ dốc mà các chàng trai sklearn không biết? Hay là "cắt góc" và trồng cây nông?

ps Tôi biết về cuộc thảo luận này: https://www.kaggle.com/c/higgs-boson/forums/t/10335/xgboost-post-competition-survey nhưng không thể có câu trả lời ở đó ...

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)

2
đoán tôi sẽ sớm phải viết lại nó là "tại sao LightGBM lại nhanh hơn XGBoost nhiều như vậy?" :)
ihadanny

Câu trả lời:


25

×

Tôi đoán là hiệu ứng lớn nhất đến từ việc XGBoost sử dụng xấp xỉ trên các điểm phân chia. Nếu bạn có một tính năng liên tục với 10000 lần phân tách có thể, XGBoost chỉ xem xét phân tách "tốt nhất" 300 theo mặc định (đây là cách đơn giản hóa). Hành vi này được điều khiển bởi sketch_epstham số và bạn có thể đọc thêm về nó trong tài liệu . Bạn có thể thử hạ thấp nó và kiểm tra sự khác biệt mà nó tạo ra. Vì không có đề cập đến nó trong tài liệu tìm hiểu scikit , tôi đoán nó không có sẵn. Bạn có thể tìm hiểu phương pháp XGBoost trong bài báo của họ (arxiv) .

XGBoost cũng sử dụng một xấp xỉ để đánh giá các điểm phân chia như vậy. Tôi không biết bằng cách nào mà tiêu chí scikit learn đang đánh giá các phần tách, nhưng nó có thể giải thích phần còn lại của sự khác biệt về thời gian.


Bình luận địa chỉ

Về việc đánh giá các điểm phân chia

Tuy nhiên, ý của bạn là "XGBoost cũng sử dụng một phép tính gần đúng để đánh giá các điểm phân chia như vậy"? theo như tôi hiểu, đối với việc đánh giá họ đang sử dụng mức giảm chính xác trong hàm mục tiêu tối ưu, như nó xuất hiện trong eq (7) trong bài báo.

L(y,Htôi-1+htôi)LyHtôi-1htôiLLHtôi-1tôi

L(y,Htôi-1+htôi)L


Cảm ơn @Winks, tôi đã đọc bài báo và xem ý nghĩa của thuật toán xấp xỉ để chọn các ứng cử viên. Tuy nhiên, ý của bạn là "XGBoost cũng sử dụng một phép tính gần đúng để đánh giá các điểm phân chia như vậy"? theo như tôi hiểu, đối với việc đánh giá họ đang sử dụng mức giảm chính xác trong hàm mục tiêu tối ưu, như nó xuất hiện trong eq (7) trong bài báo.
ihadanny

Tôi chỉnh sửa câu trả lời của tôi để bình luận của bạn. Kiểm tra Q / A này để biết thêm chi tiết về việc đánh giá các điểm phân chia.
Nháy mắt

Cảm ơn rất nhiều, @Winks! sẽ thật tuyệt nếu bạn cũng có thể trả lời câu hỏi chi tiết hơn của tôi ở đây: datascience.stackexchange.com/q/10997/16050
ihadanny

Đây là một câu trả lời tuyệt vời. Hat-trick!
eliasah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.