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
Anda ingin melihat makalah bahasa Inggris ini dari tim Yandex tentang keunikan matematika CATBoost.
Saya membacanya secara singkat, dan di antara beberapa hal yang dapat saya pahami dengan cepat adalah fakta bahwa mereka tidak menggunakan residu yang diperoleh pada TRAIN untuk melakukan TRAIN , karena residu ini menciptakan bias optimis dari kualitas pembelajaran. ( Pembaruan: hal baru ini menghasilkan cara untuk mengatasi overfitting, yang merupakan salah satu alasan algoritma bekerja lebih baik dibandingkan dengan analognya, terlepas dari berbagai cara untuk preprocess variabel kategori).
Saya minta maaf karena tidak memberi Anda jawaban yang spesifik dan lengkap.
Perbedaan matematika antara GBM, XGBoost
Pertama saya sarankan Anda membaca makalah oleh Friedman tentang Gradient Boosting Machine yang diterapkan pada model regresi linier, pengklasifikasi, dan pohon keputusan khususnya. https://statweb.stanford.edu/~jhf/ftp/trebst.pdf
Saya tidak akan membahas detailnya di sini. Itu hanya bacaan yang baik yang mencakup berbagai jenis kerugian (L) dan selain konsep pentingnya variabel. Tentu saja ini adalah kertas tonggak implementasi metode penurunan dalam ruang fungsi (model tingkat rendah) daripada parameter dalam mengejar minimisasi kerugian.
Jika Anda melihat di sini: https://arxiv.org/pdf/1603.02754.pdf
Anda menemukan sketsa matematika untuk model XGBoost oleh Tianqi Chen et al. Sekarang menjadi menarik. Beberapa penyimpangan matematis dari model ini membentuk Friedman GBM klasik:
- Parameter yang diatur (dihukum) (dan kami ingat bahwa parameter dalam boossting adalah fungsi, pohon, atau model linier): L1 dan L2 tersedia.
- Menggunakan turunan kedua untuk mempercepat proses (jika digunakan sebelumnya tolong perbaiki saya).
Untuk titik ini: lihat di sini untuk menemukan implementasi kehilangan kuantil di CATBoost, yang berguna dan menyediakan turunan pertama dan kedua: https://github.com/catboost/catboost/blob/master/catboost/libs/algo/ error_functions.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;
} };
Meskipun Anda tidak dapat menemukan fungsi kehilangan L1 yang berguna ini di XGBoost, Anda dapat mencoba membandingkan implementasi Yandex dengan beberapa fungsi kehilangan kustom yang ditulis untuk XGB.
- Selain itu, CATBoost bekerja sangat baik dengan fitur-fitur kategorikal, sedangkan XGBoost hanya menerima input numerik.
Pertimbangkan tautan ini: https://tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/#algorithm-main-stages_cat-to-numberic
Mereka menawarkan berbagai cara untuk memasukkan fitur-fitur kategorikal ke pelatihan model selain menggunakan pendekatan satu-panas yang lama dan terkenal. Mengurangi dimensi ruang input tanpa kehilangan banyak informasi adalah salah satu kemungkinan alasan model yang dipasang kurang dilengkapi.
Saya sudah selesai. Saya tidak menggunakan LightGBM, jadi tidak bisa menjelaskannya.