My guess is that catboost doesn't use the dummified variables, so the weight given to each (categorical) variable is more balanced compared to the other implementations, so the high-cardinality variables don't have more weight than the others.
https://arxiv.org/abs/1706.09516
Bạn muốn xem bài báo tiếng Anh này từ nhóm Yandex về tính độc đáo toán học của CATBoost.
Tôi đã đọc nó một cách ngắn gọn và trong số ít điều tôi có thể hiểu nhanh là thực tế là họ không sử dụng phần dư thu được trên TRAIN để thực hiện TRAIN , vì những phần dư này tạo ra sự thiên vị lạc quan về chất lượng học tập. ( Cập nhật: tính mới này mang đến một cách để chống lại quá mức, đó là một trong những lý do thuật toán hoạt động tốt hơn so với các chất tương tự của nó, ngoài nhiều cách khác nhau để xử lý các biến phân loại).
Tôi xin lỗi vì đã không cung cấp cho bạn một câu trả lời cụ thể và đầy đủ.
Sự khác biệt về toán học giữa GBM, XGBoost
Đầu tiên tôi khuyên bạn nên đọc một bài báo của Friedman về Gradient Boosting Machine được áp dụng cho các mô hình hồi quy tuyến tính, phân loại và cây quyết định nói riêng. https://statweb.stanford.edu/~jhf/ftp/trebst.pdf
Tôi sẽ không đi vào chi tiết ở đây. Nó chỉ là một bài đọc tốt bao gồm nhiều loại mất mát (L) và bên cạnh khái niệm quan trọng khác nhau. Tất nhiên đây là một bài báo quan trọng về việc thực hiện phương pháp gốc trong không gian của các hàm (mô hình mức thấp) chứ không phải là các tham số để theo đuổi giảm thiểu tổn thất.
Nếu bạn xem tại đây: https://arxiv.org/pdf/1603.02754.pdf
Bạn tìm thấy một họa tiết toán học cho mô hình XGBoost của Tianqi Chen et al. Bây giờ nó trở nên thú vị. Một vài sai lệch toán học của mô hình này tạo thành GBM cổ điển của Friedman là:
- Các tham số được chuẩn hóa (bị phạt) (và chúng tôi nhớ rằng các tham số trong boossting là hàm, cây hoặc mô hình tuyến tính): L1 và L2 có sẵn.
- Sử dụng các dẫn xuất thứ hai để tăng tốc quá trình (nếu nó được sử dụng trước khi xin vui lòng sửa cho tôi).
Đến thời điểm này: nhìn vào đây để tìm ra cách thực hiện mất lượng tử trong CATBoost, có ích và cung cấp cả dẫn xuất thứ nhất và thứ hai: https://github.com/catboost/catboost/blob/master/catboost/libs/algo/ error_fifts.h
class TQuantileError : public IDerCalcer<TQuantileError, /*StoreExpApproxParam*/ false> { public:
const double QUANTILE_DER2 = 0.0;
double Alpha;
SAVELOAD(Alpha);
explicit TQuantileError(bool storeExpApprox)
: Alpha(0.5)
{
CB_ENSURE(storeExpApprox == StoreExpApprox, "Approx format does not match");
}
TQuantileError(double alpha, bool storeExpApprox)
: Alpha(alpha)
{
Y_ASSERT(Alpha > -1e-6 && Alpha < 1.0 + 1e-6);
CB_ENSURE(storeExpApprox == StoreExpApprox, "Approx format does not match");
}
double CalcDer(double approx, float target) const {
return (target - approx > 0) ? Alpha : -(1 - Alpha);
}
double CalcDer2(double = 0, float = 0) const {
return QUANTILE_DER2;
} };
Mặc dù bạn không thể tìm thấy chức năng mất L1 hữu ích này trong XGBoost, bạn có thể thử so sánh việc triển khai của Yandex với một số chức năng mất tùy chỉnh được viết cho XGB.
- Bên cạnh đó, CATBoost hoạt động xuất sắc với các tính năng phân loại, trong khi XGBoost chỉ chấp nhận đầu vào số.
Xem xét liên kết này: https://tech.yandex.com/catboost/doc/dg/con accept / alacticm-main-stages_cat-to-numberic-docpage / # al Thuậtm-main-stages_cat-to-numberic
Họ cung cấp nhiều cách khác nhau để cung cấp các tính năng phân loại cho đào tạo mô hình trên cơ sở sử dụng phương pháp tiếp cận nóng và nổi tiếng cũ. Giảm kích thước của một không gian đầu vào mà không mất nhiều thông tin là một trong những lý do có thể khiến mô hình được trang bị ít bị thừa.
Tôi xong rồi Tôi không sử dụng LightGBM, vì vậy không thể làm sáng tỏ nó.