Perbedaan matematika antara GBM, XGBoost, LightGBM, CatBoost?

33

Ada beberapa implementasi model keluarga GBDT seperti:

  • GBM
  • XGBoost
  • LightGBM
  • Catboost.

Apa perbedaan matematika antara implementasi yang berbeda ini?

Catboost tampaknya mengungguli implementasi lainnya bahkan dengan hanya menggunakan parameter standarnya sesuai dengan tanda bangku ini , tetapi masih sangat lambat.

Dugaan saya adalah bahwa catboost tidak menggunakan variabel dummi, sehingga bobot yang diberikan untuk masing-masing variabel (kategori) lebih seimbang dibandingkan dengan implementasi lainnya, sehingga variabel kardinalitas tinggi tidak memiliki bobot lebih dari yang lain. Ini memungkinkan kategori lemah (dengan kardinalitas rendah) untuk masuk ke beberapa pohon, sehingga kinerja yang lebih baik. Selain itu, saya tidak punya penjelasan lebih lanjut.

Metariat
sumber
Benchmark yang dimaksud adalah oleh tim yandex / catboost, kita perlu yang independen.
mrgloom

Jawaban:

27
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.

masukkan deskripsi gambar di sini

  • 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.

Alexey berkata Reinstate Monica
sumber
5
Saya bertanya-tanya mengapa ada orang yang menurunkan jawaban tanpa memberikan jawaban yang lebih baik? Selamat datang di panggung untuk memberikan masukan apa pun selain melakukan downvoting anonim, Pak.
Alexey mengatakan Reinstate Monica
itu menanggapi pertanyaan saya untuk catboost. Apakah Anda memiliki bahan pelengkap untuk LightGBM, XGBoost, dan GBM?
Metariat
Ya, saya akan berikan jawaban saya. Apakah Anda menghadapi matematika keras atau lebih suka penjelasan intuitif?
Alexey mengatakan Reinstate Monica
Terima kasih, saya dapat mengatasi keduanya dengan baik, penjelasan intuitif lebih cepat didapat, dan detail matematis membutuhkan waktu lebih banyak tetapi sangat bermanfaat untuk pemahaman / implementasi lebih lanjut.
Metariat
1
Jawaban diperkaya.
Alexey mengatakan Reinstate Monica