Hasil LightGBM berbeda tergantung pada urutan data

8

Saya memiliki dua dataset A dan B yang persis sama dalam hal jumlah kolom, nama kolom, dan nilai-nilai. Satu-satunya perbedaan adalah urutan kolom-kolom itu. Saya kemudian melatih model LightGBM pada masing-masing dua set data dengan langkah-langkah berikut

  1. Bagilah setiap dataset ke dalam pelatihan dan pengujian (gunakan seed dan rasio acak yang sama untuk A dan B)
  2. Biarkan hiperparameter sebagai default
  3. Tetapkan status acak sebagai nomor tetap (untuk reproduksi)
  4. Tune the learning_rate menggunakan Pencarian Grid
  5. Latih model LightGBM pada perangkat pelatihan dan ujilah pada perangkat uji
  6. Tingkat pembelajaran dengan kinerja terbaik pada set pengujian akan dipilih

Model output pada dua set data sangat berbeda, yang membuat saya berpikir bahwa urutan kolom tidak mempengaruhi kinerja pelatihan model menggunakan LightGBM.

Apakah Anda tahu mengapa demikian?

Duy Bui
sumber

Jawaban:

6

Penjelasan yang mungkin adalah ini:

Ketika urutan kolom berbeda, ada sedikit perbedaan dalam prosedur.

Apa yang dilakukan oleh LightGBM, XGBoost, CatBoost adalah memilih kolom yang berbeda dari fitur dalam dataset Anda di setiap langkah dalam pelatihan.

Pilihan kolom ini dilakukan secara acak: Katakanlah dataset Anda memiliki 20 kolom. Node root memilih fitur 1, 3 dan 18 , pada kedua dataset fitur 1, 3 dan 18 berbeda di kedua set data yang mungkin. Ini berulang kali dilakukan dan dalam setiap langkah ada keacakan yang mempengaruhi hasil akhir Anda.

Juan Esteban de la Calle
sumber
Bagaimana kita bisa mengontrol keacakan itu ketika algoritma memilih subset fitur untuk membangun pohon keputusan? Itu juga satu-satunya pikiran saya untuk menjawab situasi ini. Selain itu, saya kira jika kita selalu memilih semua fitur per pohon, algoritme akan menggunakan Gini (atau yang serupa) untuk menghitung pentingnya fitur di setiap langkah, yang tidak akan membuat keacakan.
Duy Bui
lightgbmmemungkinkan pengguna untuk mengatur benih acak yang digunakan untuk pengambilan sampel baris dan kolom.
bradS
1
@bradS: Saya tidak menetapkan seed sebagai hyperparameter di LightGBM tapi saya memeriksa lagi dan seed harus ditetapkan sebagai nomor tetap secara default. Itu berarti harus memiliki hasil yang sama, yang tidak terjadi di sini. lightgbm.readthedocs.io/en/latest/Parameters.html
Duy Bui
3

Sementara pemesanan data tidak penting dalam teori, penting dalam praktiknya. Mempertimbangkan Anda mengambil langkah-langkah untuk memastikan reproduksibilitas, urutan data yang berbeda akan mengubah logika split-tes kereta Anda (kecuali Anda tahu pasti bahwa set kereta dan set tes dalam kedua kasus persis sama). Meskipun Anda tidak menentukan bagaimana Anda membagi data, sangat mungkin bahwa bermacam-macam titik data tertentu membuat mesin lebih kuat untuk pencilan dan karenanya menawarkan kinerja model yang lebih baik. Jika kereta dan data uji sama dalam kedua kasus, Anda mungkin harus melihat apakah ada benih / ukuran reproduktifitas (di bagian mana pun dari kode Anda) yang belum Anda ambil.

gbdata
sumber
Maaf, saya lupa menyebutkan itu. Akan memperbarui kueri saya. Melatih dan menguji persis sama karena saya membaginya menggunakan benih acak yang sama.
Duy Bui
@DuyBui beberapa saran untuk dicoba: 1) jika Anda menggunakan Gpu set gpu_use_dp menjadi true Dari: github.com/Microsoft/LightGBM/pull/560#issuecomment-304561654 2) set num_threads ke nomor tetap Dari: github.com/ Microsoft / LightGBM / issues / 632 ;
gbdata