Bagaimana cara mengklasifikasikan dataset yang tidak seimbang oleh Convolutional Neural Networks (CNN)?

10

Saya memiliki dataset tidak seimbang dalam tugas klasifikasi biner, di mana jumlah positif vs jumlah negatif adalah 0,3% vs 99,7%. Kesenjangan antara positif dan negatif sangat besar. Ketika saya melatih CNN dengan struktur yang digunakan dalam masalah MNIST, hasil pengujian menunjukkan Tingkat Negatif Palsu yang tinggi. Juga, kurva kesalahan latihan turun dengan cepat dalam beberapa zaman di awal tetapi tetap nilai yang sama di zaman berikut.

Bisakah Anda memberi tahu saya cara untuk memproses masalah ini? Terima kasih!

Zhi Lu
sumber

Jawaban:

10

Ini terjadi karena ketika Anda mengambil mini-batch, sangat kecil kemungkinannya (mengingat rasio proporsi di sini) bahwa mini batch akan berisi sampel positif Anda sama sekali. Jadi pada akhirnya akan mempelajari pola untuk kelas negatif dan setelah beberapa zaman, semuanya baru saja diklasifikasikan sebagai kelas negatif.

Ada dua cara yang mungkin untuk menangani situasi seperti ini.

  1. Dengan proporsi sebesar 0,3% hingga 99,7%, ini adalah kumpulan data yang sangat miring. Anda hampir tidak memiliki 3 sampel kelas positif untuk setiap 1000 sampel. Saya akan mengatakan Anda harus melihat menyeimbangkan set data dengan mendapatkan lebih banyak kelas positif. Pergi dan dapatkan sampel positif sebanyak yang Anda bisa. Kemudian, Anda bisa menggunakan dataset yang lebih seimbang. Misalnya, Anda bisa mendapatkan 1000 sampel positif dan kemudian memilih set acak 1000 sampel negatif dan membangun penggolong. Sekarang, harus bisa belajar kedua kelas.

  2. Gunakan ukuran kesalahan tertimbang saat memperbarui bobot setelah batch mini. Bobot diperbarui secara proporsional dengan jumlah sampel kelas positif dan negatif selama mini-batch. Sekarang, dalam situasi saat ini diberi proporsi 3: 1000, bahkan trik ini mungkin tidak berfungsi. Jadi, Anda dapat mencoba mendapatkan proporsi dengan sesuatu seperti 300: 1000 dengan mendapatkan 297 sampel lebih positif dan menggabungkannya dengan 1000 sampel negatif. Kemudian dengan rasio 300: 1000 Anda harus mempertimbangkan kesalahan selama mini-batch berdasarkan jumlah sampel di masing-masing kelas. Ini seharusnya bekerja.

Pria London
sumber
Tahukah Anda berapa proporsi optimal di sini? apakah 3:10, atau yang lain?
donlan
4

Mengapa Anda ingin menggunakan CNN di sini? Sudahkah Anda mempertimbangkan model lain yang benar-benar menangani data yang tidak seimbang?

Sebagai contoh, saya telah menemukan dua teknik berikut ini telah bekerja dengan sangat baik untuk saya:

  • Random Forests w / SMOTE Boosting : Gunakan hibrida SMOTEyang memberi contoh rendah pada kelas mayoritas dan sampel berlebihan pada kelas minoritas dengan persentase yang dapat disesuaikan. Pilih persentase ini tergantung pada distribusi variabel respons Anda di set pelatihan. Masukkan data ini ke model RF Anda. Selalu validasi silang / lakukan pencarian jaringan untuk menemukan pengaturan parameter terbaik untuk RF Anda.

  • XGBoost w / hyper-parameter optimization : Sekali lagi, cross-validate atau lakukan gird-search untuk menemukan pengaturan parameter terbaik untuk model. Selain itu, xgboostmemungkinkan Anda untuk menyeimbangkan bobot kelas positif dan negatif menggunakan scale_pos_weight. Lihat dokumentasi parameter untuk daftar lengkap.

Saya juga harus menambahkan bahwa kumpulan data yang saya kerjakan memiliki persentase kemiringan yang sama dan saya dapat memperoleh skor Sensitivitas 0,941 dan spesifisitas 0,71 dengan xgboost, yang berarti model memprediksi positif sebenarnya dengan cukup akurat dan menjadi pertanda baik untukku.

(Maaf, saya tidak bisa meninggalkan komentar, reputasi tidak cukup dan saya benar-benar ingin tahu mengapa Anda memilih CNN)

119631
sumber
1

Dataset yang tidak seimbang adalah masalah umum di semua bidang dan tidak secara khusus menyangkut visi komputer dan masalah yang ditangani oleh Convolutional Neural Networks (CNNs).

Untuk mengatasi masalah ini, Anda harus mencoba menyeimbangkan dataset Anda, baik dengan over-sampling kelas minoritas atau kelas mayoritas under-sampling (atau keduanya). Arguably, pilihan yang baik adalah algoritma SMOTE (Synthetic Minority Over-sampling Technique), seperti yang disebutkan di atas. Di sini Anda dapat menemukan perbandingan berbagai algoritma pengambilan sampel berlebih. Jika Anda pengguna Python, ketidakseimbangan-belajar adalah perpustakaan yang bagus yang menerapkan banyak teknik yang berguna untuk menyeimbangkan dataset.

Di sisi lain, jika Anda mencoba untuk mengklasifikasikan gambar, cara yang bagus untuk meningkatkan ukuran dataset Anda adalah dengan menambahkannya (yaitu dengan membuat contoh sintetis yang masuk akal, misalnya gambar yang serupa tetapi diputar / digeser sedikit sehubungan dengan yang asli). Terkadang Anda mungkin perlu menambah kelas minoritas untuk mencapai keseimbangan yang lebih baik. Keras ImageDataGenerator kelas adalah alat yang bagus untuk tujuan ini.

Tomasz Bartkowiak
sumber