Saya mengalami banyak masalah dalam memahami bagaimana class_weightparameter dalam Regresi Logistik scikit-learn beroperasi.
Situasi
Saya ingin menggunakan regresi logistik untuk melakukan klasifikasi biner pada kumpulan data yang sangat tidak seimbang. Kelas diberi label 0 (negatif) dan 1 (positif) dan data yang diamati memiliki rasio sekitar 19: 1 dengan mayoritas sampel memiliki hasil negatif.
Upaya Pertama: Menyiapkan Data Pelatihan Secara Manual
Saya membagi data yang saya miliki menjadi beberapa set terpisah untuk pelatihan dan pengujian (sekitar 80/20). Kemudian saya secara acak mengambil sampel data pelatihan dengan tangan untuk mendapatkan data pelatihan dalam proporsi yang berbeda dari 19: 1; dari 2: 1 -> 16: 1.
Saya kemudian melatih regresi logistik pada subset data pelatihan yang berbeda ini dan memplot recall (= TP / (TP + FN)) sebagai fungsi dari proporsi pelatihan yang berbeda. Tentu saja, penarikan dihitung pada sampel TEST terputus-putus yang memiliki proporsi teramati 19: 1. Perhatikan, meskipun saya melatih model yang berbeda pada data pelatihan yang berbeda, saya menghitung penarikan kembali untuk semuanya pada data pengujian (terputus-putus) yang sama.
Hasilnya seperti yang diharapkan: penarikan kembali sekitar 60% pada proporsi pelatihan 2: 1 dan jatuh agak cepat pada saat mencapai 16: 1. Ada beberapa proporsi 2: 1 -> 6: 1 di mana penarikan cukup di atas 5%.
Percobaan Kedua: Pencarian Grid
Selanjutnya, saya ingin menguji parameter regularisasi yang berbeda, jadi saya menggunakan GridSearchCV dan membuat kisi dari beberapa nilai Cparameter serta class_weightparameter. Untuk menerjemahkan proporsi n: m saya dari sampel pelatihan negatif: positif ke dalam kamus bahasa class_weightsaya pikir saya hanya menentukan beberapa kamus sebagai berikut:
{ 0:0.67, 1:0.33 } #expected 2:1
{ 0:0.75, 1:0.25 } #expected 3:1
{ 0:0.8, 1:0.2 } #expected 4:1
dan saya juga termasuk Nonedan auto.
Kali ini hasilnya benar-benar aneh. Semua penarikan saya keluar kecil (<0,05) untuk setiap nilai class_weightkecuali auto. Jadi saya hanya bisa berasumsi bahwa pemahaman saya tentang cara mengatur class_weightkamus itu salah. Menariknya, class_weightnilai 'auto' dalam pencarian grid sekitar 59% untuk semua nilai C, dan saya kira itu seimbang dengan 1: 1?
Pertanyaan saya
Bagaimana Anda menggunakan dengan benar
class_weightuntuk mencapai keseimbangan yang berbeda dalam data pelatihan dari apa yang sebenarnya Anda berikan? Secara khusus, kamus apa yang saya berikanclass_weightuntuk menggunakan proporsi n: m sampel pelatihan negatif: positif?Jika Anda meneruskan berbagai
class_weightkamus ke GridSearchCV, selama validasi silang akankah itu menyeimbangkan kembali data lipatan pelatihan menurut kamus tetapi menggunakan proporsi sampel yang diberikan secara benar untuk menghitung fungsi penilaian saya pada lipatan tes? Ini penting karena metrik apa pun hanya berguna bagi saya jika berasal dari data dalam proporsi yang diamati.Apa
autonilaiclass_weightdo sejauh proporsi? Saya membaca dokumentasinya dan saya berasumsi "menyeimbangkan data berbanding terbalik dengan frekuensinya" berarti menjadikannya 1: 1. Apakah ini benar? Jika tidak, dapatkah seseorang menjelaskan?