Ketidakseimbangan kelas dalam Pembelajaran dengan Mesin yang Dibimbing

47

Ini adalah pertanyaan secara umum, tidak spesifik untuk metode atau kumpulan data apa pun. Bagaimana kita menangani masalah ketidakseimbangan kelas dalam pembelajaran Supervised Machine di mana angka 0 adalah sekitar 90% dan angka 1 adalah sekitar 10% dalam dataset Anda. Bagaimana kita melatih penggolong secara optimal.

Salah satu cara yang saya ikuti adalah sampling untuk membuat dataset seimbang dan kemudian melatih classifier dan ulangi ini untuk beberapa sampel.

Saya merasa ini acak, Apakah ada kerangka kerja untuk mendekati masalah semacam ini.

NG_21
sumber

Jawaban:

45

Ada banyak kerangka kerja dan pendekatan. Ini adalah masalah berulang.

Contoh:

  • Undersampling . Pilih subsampel set nol sehingga ukurannya cocok dengan set. Ada kehilangan informasi yang jelas, kecuali jika Anda menggunakan kerangka kerja yang lebih kompleks (misalnya, saya akan membagi set pertama pada 9 subset yang lebih kecil, saling eksklusif, latih model pada masing-masing dari mereka dan ensemble model).
  • Oversampling . Hasilkan yang buatan hingga proporsinya 50% / 50%. Majikan saya sebelumnya menggunakan ini secara default. Ada banyak kerangka kerja untuk ini (saya pikir SMOTE adalah yang paling populer, tapi saya lebih suka trik sederhana seperti Noisy PCA ).
  • Pembelajaran Satu Kelas . Anggap saja data Anda memiliki beberapa poin nyata (yang) dan banyak suara acak yang secara fisik tidak ada bocor ke dalam dataset (apa pun yang bukan satu adalah suara). Gunakan algoritme untuk menolak data, bukan algoritma klasifikasi.
  • Pelatihan Biaya-Sensitif . Gunakan fungsi biaya asimetris untuk menyeimbangkan proses pelatihan secara artifisial.

Beberapa ulasan yang menyala, dengan tingkat kerumitan teknis \ tingkat perincian yang meningkat:

Oh, dan omong-omong, 90% / 10% tidak tidak seimbang. Kumpulan data penipuan transaksi kartu sering kali dibagi 99,97% / 0,03%. Ini tidak seimbang.

Lucas Gallindo
sumber
Hanya memperhatikan bahwa Noise PCA yang saya kutip dapat dilihat sebagai Oversampling, Regularisasi atau Jitter, tergantung pada detail implementasi.
Lucas Gallindo
Terima kasih Lucas atas sumber dayanya. Sangat membantu. Saya memiliki masalah khusus di mana semua sampel saya dilabeli sebagai '1'. Namun pada kenyataannya sampel ini memiliki pengotor minimal, yaitu ada beberapa catatan yang sebenarnya seharusnya '0' tetapi diberi label sebagai '1'. Saya percaya masalah semacam ini termasuk dalam satu klasifikasi kelas. Apakah pemahaman saya benar. Apakah ada kerangka umum yang digunakan untuk mengidentifikasi mereka, awalnya saya mencoba pengelompokan tetapi itu tidak berhasil.
NG_21
1
Semua algoritme ini memerlukan beberapa data yang berlabel nol dan sebagian lagi memiliki 100% kepastian tentang kebenaran label (atau sesuatu yang sangat mendekati 100%). Anda memiliki semua yang ada, tetapi Anda tahu bahwa sebagian kecil dari data ini salah label, situasi yang berbeda. Tanpa pengetahuan tentang domain aplikasi, saya akan menyerangnya menggunakan Deteksi Anomali, lalu label anomali sebagai nol. Kemudian cobalah beberapa algoritma klasifikasi (Pembelajaran Satu Kelas, mungkin). Dengan pengetahuan tentang domain aplikasi, saya akan mencari bantuan dari pakar domain sebelum apa pun.
Lucas Gallindo
13

Ini sangat tergantung pada metode pembelajaran. Sebagian besar pendekatan tujuan umum memiliki satu (atau beberapa) cara untuk menghadapinya. Perbaikan umum adalah menetapkan hukuman kesalahan klasifikasi yang lebih tinggi pada kelas minoritas, memaksa classifier untuk mengenalinya (SVM, regresi logistik, jaringan saraf, ...).

Mengubah sampling juga kemungkinan seperti yang Anda sebutkan. Dalam hal ini, oversampling kelas minoritas biasanya merupakan solusi yang lebih baik daripada undersampling kelas mayoritas.

Beberapa metode, seperti hutan acak, tidak memerlukan modifikasi apa pun.

Marc Claesen
sumber
Terima kasih. Bisakah Anda menunjuk sumber daya mana pun yang dijelaskan dengan beberapa contoh. Apakah ada cara untuk mencapai ini di R / Python tanpa menggunakan kode algoritma dari awal.
NG_21
1
Periksa fungsi pertama pada paket R ini: cran.r-project.org/web/packages/unbalanced/unbalanced.pdf
Lucas Gallindo
7
Mengapa Hutan Acak tidak perlu modifikasi? Saya pikir Anda masih dapat menetapkan bobot kelas
mac
4

Seringkali masalahnya bukan frekuensi tetapi jumlah absolut kasus di kelas minoritas. Jika Anda tidak memiliki cukup variasi dalam target ketika dibandingkan dengan variasi dalam fitur, maka itu mungkin berarti bahwa algoritma tidak dapat mengklasifikasikan sesuatu dengan sangat akurat.

Satu hal adalah hukuman kesalahan klasifikasi dapat digunakan pada langkah klasifikasi dan tidak pada langkah estimasi parameter jika ada. Beberapa metode tidak memiliki konsep parameter, mereka hanya menghasilkan label kelas langsung atau probabilitas kelas.

Ketika Anda memiliki estimator probabilistik maka Anda dapat membuat keputusan klasifikasi berdasarkan alasan teori informasi atau dengan kombinasi nilai bisnis.

Analis
sumber
1

Tambahkan dua trik: 1. gunakan CDF, hitung frekuensi dalam data pelatihan Anda atau gunakan validasi yang sangat besar (jika set tes Anda tidak akan berubah, tetapi set validasi harus memiliki distribusi yang sama dengan set pelatihan), kemudian sortir prediksi Anda, dan dapatkan X% pertama (hitungan frekuensi Anda sebelumnya) untuk satu kelas dan yang lain adalah / 2. sampel tertimbang, model akan cenderung ke kelas sampel tertimbang, Anda dapat menggunakan varians sampel v. mis. weighti = 1/2 (1- (vmax - vi) / vmax)

pengguna102423
sumber