Pada bagian 1 seri ini kita membahas apa itu masalah ketimpangan kelas dan mengapa ketidakseimbangan kelas perlu diatasi. Pada bagian ini, kita akan mempelajari apa itu bobot kelas dan cara memperbaiki ketidakseimbangan kelas menggunakan bobot kelas.

Apa itu Bobot Kelas?

Dengan data kelas yang bias, sebagian besar algoritme pembelajaran mesin tidak terlalu berguna. Namun, kita dapat memodifikasi algoritme pelatihan untuk memperhitungkan distribusi kelas yang tidak merata. Hal ini dapat dilakukan dengan memberikan bobot yang berbeda terhadap kelas mayoritas dan minoritas. Pada tahap pelatihan, perbedaan bobot akan mempengaruhi klasifikasi kelas. Tujuan keseluruhan dari sistem ini adalah untuk menghukum kesalahan klasifikasi yang dilakukan oleh kelas minoritas dengan menetapkan bobot kelas yang lebih tinggi sekaligus mengurangi bobot kelas mayoritas.

Untuk memperjelasnya, kita akan meninjau kembali contoh kota yang kita bahas sebelumnya.

Anggap saja seperti ini: Anda menghabiskan sebulan terakhir di kota baru Anda. Daripada hanya keluar saat dibutuhkan, Anda menjelajahi kota baru selama sebulan penuh. Anda menghabiskan sebulan penuh untuk memahami rute dan tempat kota. Anda sekarang dapat memahami kota baru dengan lebih baik karena Anda menghabiskan lebih banyak waktu untuk menelitinya dan kecil kemungkinannya untuk tersesat.

Inilah cara kerja bobot kelas. Kami memberikan bobot lebih pada kelas minoritas pada fungsi biaya algoritma pada saat pelatihan sehingga dapat memberikan penalti yang lebih tinggi kepada kelas minoritas dan algoritma dapat mengurangi kesalahan pada kelas minoritas.

Harap dicatat bahwa ada ambang batas di mana bobot kelas minoritas dan mayoritas harus ditambah atau dikurangi. Dengan memberikan bobot yang sangat tinggi pada kelas minoritas, algoritma akan menjadi bias terhadap kelas minoritas sehingga meningkatkan kesalahan pada kelas mayoritas.

Mayoritas pustaka pemodelan pengklasifikasi sklearn serta beberapa pustaka berbasis peningkatan seperti LightGBM dan catboost menyertakan parameter bawaan “class_weight” yang memungkinkan kami mengoptimalkan penilaian untuk kelas minoritas. Secara default, class_weight=None, sehingga kedua kelas diberi bobot yang sama. Selain itu, kita dapat meneruskan kamus yang berisi bobot manual untuk kedua kelas atau memberinya nilai 'seimbang'. Model secara otomatis menetapkan bobot kelas yang berbanding terbalik dengan frekuensinya masing-masing ketika class_weights = 'seimbang'.

Untuk menghitungnya, rumusnya adalah sebagai berikut:

wj=n_sampel / (n_kelas * n_sampelj)

Di Sini,

  • j menandakan kelas.
  • wj = bobot tiap kelas
  • n_samples = jumlah total sampel atau baris dalam kumpulan data
  • n_classes = jumlah total kelas unik di target
  • n_samplesj = jumlah baris dari masing-masing kelas

Untuk contoh goresan kita (direferensikan di bagian 1):

n_sampel = 43400

n_kelas= 2(0&1)

n_sampel0= 42617

n_sampel1= 783

Artinya, bobot untuk kelas 0:

w0= 43400/(2*42617) = 0.509

Demikian pula bobot untuk kelas 1:

w1= 43400/(2*783) = 27.713

Mudah-mudahan, ini menjelaskan bagaimana class_weight = 'balanced' membantu kita dalam memberikan bobot yang lebih tinggi pada kelas minoritas dan bobot yang lebih rendah pada kelas mayoritas.

Meneruskan nilai sebagai 'seimbang' memberikan hasil terbaik secara umum, namun dalam kasus ketidakseimbangan kelas yang ekstrem, kita dapat menyesuaikan bobot secara manual.

Bobot Kelas dalam Regresi Logistik

Secara teori, kita dapat memodifikasi algoritme pembelajaran mesin apa pun dengan menambahkan bobot kelas yang berbeda ke fungsi biaya, namun kami akan membahas regresi logistik secara khusus di sini.

Catatan: Penjelasan ini hanya menggunakan regresi logistik karena algoritma canggih ini mudah digunakan.

Kehilangan log digunakan sebagai fungsi biaya untuk regresi logistik. Kami tidak menggunakan mean squared error sebagai fungsi biaya dalam regresi logistik karena kami menggunakan kurva sigmoid dan bukan garis lurus sebagai fungsi prediksi. Mengkuadratkan fungsi sigmoid akan menghasilkan kurva non-cembung, yang berarti akan terdapat beberapa minimum lokal, sehingga konvergensi menggunakan penurunan gradien menjadi sulit. Namun, kerugian log adalah fungsi cembung, dan kita hanya dapat konvergen ke satu titik minimum.

Mengisolasi sampel data yang sulit? Komet bisa melakukan itu. Pelajari lebih lanjut dengan skenario PetCam kami dan temukan Artefak Komet.

Kehilangan log dihitung sebagai berikut:

Di Sini,

  • N = jumlah nilai
  • yi = nilai sebenarnya dari kelas target
  • yi = prediksi probabilitas kelas target

Dengan menggunakan rumus log loss, mari buat tabel semu yang terdiri dari prediksi aktual, prediksi probabilitas, dan biaya yang dihitung.

Kami memiliki sepuluh observasi dalam tabel ini, sembilan dari kelas 0 dan satu dari kelas 1. Kolom berikutnya memberikan prediksi probabilitas untuk setiap observasi. Dan terakhir, kami mendapatkan penalti biaya berdasarkan rumus kerugian log.

Ketika bobot ditambahkan ke fungsi biaya, fungsi kerugian log yang dimodifikasi adalah:

Di Sini,

  • w0 = bobot kelas untuk kelas 0
  • w1 = bobot kelas untuk kelas 1

Sekarang, mari kita tambahkan bobotnya dan lihat pengaruhnya terhadap penalti biaya.

Kami akan menggunakan rumus class_weights= 'seimbang' untuk menghitung nilai bobot.

w0 = 10/(2*1) = 5

w1 = 10/(2*9) = 0.55

Biaya untuk nilai pertama dihitung sebagai berikut:

Biaya = -(5(0*log(0,32) + 0,55(1–0)*log(1–0,32))

= -(0 + 0,55*log(.68))

= -(0.55*(-0.385))

= 0.211

Dengan cara yang sama, kita dapat menghitung biaya tertimbang untuk setiap observasi dan tabel yang diperbarui adalah:

Tabel ini menegaskan bahwa bobot kecil yang diterapkan pada fungsi biaya untuk kelas mayoritas menghasilkan nilai kesalahan yang lebih kecil, sehingga menyebabkan lebih sedikit pembaruan koefisien model. Menambahkan nilai bobot yang lebih besar ke fungsi biaya untuk kelas minoritas akan menghasilkan kesalahan penghitungan yang lebih besar dan selanjutnya lebih banyak pembaruan pada koefisien model. Dengan demikian, kita dapat menyesuaikan bias model sehingga dapat mengurangi kesalahan pada kelas minoritas.

Kesimpulan

Kita akhirnya dapat menyimpulkan bahwa bobot yang kecil menghasilkan penalti yang kecil dan pembaruan kecil pada koefisien model, sedangkan bobot yang besar menghasilkan penalti yang besar dan pembaruan besar pada koefisien model.

Di bagian terakhir seri ini, kita akan mempelajari bagaimana kita dapat menemukan nilai optimal untuk bobot kelas dengan implementasi dengan Python.

Catatan Editor: Heartbeat adalah publikasi online dan komunitas berbasis kontributor yang berdedikasi untuk menyediakan sumber daya pendidikan utama bagi ilmu data, pembelajaran mesin, dan praktisi pembelajaran mendalam. Kami berkomitmen untuk mendukung dan menginspirasi developer dan engineer dari semua lapisan masyarakat.

Secara editorial independen, Heartbeat disponsori dan diterbitkan oleh Comet, sebuah platform MLOps yang memungkinkan ilmuwan data & tim ML melacak, membandingkan, menjelaskan, & mengoptimalkan eksperimen mereka. Kami membayar kontributor kami, dan kami tidak menjual iklan.

Jika Anda ingin berkontribusi, kunjungi panggilan untuk kontributor kami. Anda juga dapat mendaftar untuk menerima buletin mingguan kami (“Deep Learning Weekly” dan “Comet Newsletter”), bergabunglah dengan kami di “” “Slack”, dan ikuti Comet di “Twitter” dan “LinkedIn” untuk sumber daya, acara, dan masih banyak lagi yang akan membantu Anda membangun model ML yang lebih baik dan lebih cepat.