Saya telah menemukan He dan Garcia (2009) sebagai ulasan yang bermanfaat untuk belajar dalam masalah kelas yang tidak seimbang. Berikut adalah beberapa hal yang pasti tidak komprehensif untuk dipertimbangkan:
Pendekatan berbasis data:
Seseorang dapat menggarisbawahi kelas mayoritas atau terlalu banyak kelas minoritas. (Breiman menunjukkan bahwa ini secara formal setara dengan menetapkan biaya kesalahan klasifikasi yang tidak seragam.) Ini dapat menyebabkan masalah: Undersampling dapat menyebabkan pelajar kehilangan aspek-aspek dari kelas mayoritas; oversampling meningkatkan risiko overfitting.
Ada metode "undersampling informasi" yang mengurangi masalah ini. Salah satunya adalah EasyEnsemble , yang secara mandiri mengambil sampel beberapa himpunan bagian dari kelas mayoritas dan membuat beberapa pengklasifikasi dengan menggabungkan setiap subset dengan semua data kelas minoritas.
SMOTE (Sintetis Minority Oversampling Technique) atau SMOTEBoost, (menggabungkan SMOTE dengan boosting) membuat instance sintetis dari kelas minoritas dengan membuat tetangga terdekat di ruang fitur. SMOTE diimplementasikan dalam R dalam paket DMwR (yang menyertai buku Luis Torgo "Penambangan Data dengan R, pembelajaran dengan studi kasus" CRC Press 2016 ).
Pendekatan model fitting
Terapkan bobot kelas-spesifik dalam fungsi kerugian Anda (bobot lebih besar untuk kasus minoritas).
Untuk pendekatan berbasis pohon, Anda dapat menggunakan jarak Hellinger sebagai fungsi pengotor simpul, seperti yang disarankan dalam Cieslak et al. "Pohon keputusan jarak Hellinger kuat dan tidak peka" ( kode Weka di sini .)
Gunakan classifier satu kelas , belajar baik (tergantung pada model) kepadatan probabilitas atau batas untuk satu kelas dan memperlakukan kelas lain sebagai outlier.
Tentu saja, jangan gunakan akurasi sebagai metrik untuk pembuatan model. Kappa Cohen adalah alternatif yang masuk akal.
Pendekatan evaluasi model
Jika model Anda mengembalikan probabilitas yang diprediksi atau skor lainnya, pilih cutoff keputusan yang membuat tradeoff dalam kesalahan (menggunakan dataset yang independen dari pelatihan dan pengujian). Dalam R, paket OptimalCutpoints mengimplementasikan sejumlah algoritma, termasuk yang sensitif biaya, untuk memutuskan cutoff.
Pemahaman saya adalah bahwa ini adalah bidang penelitian aktif dalam komunitas pembelajaran mesin dan tidak ada jawaban yang bagus, tetapi lebih banyak dan semakin banyak solusi potensial. Anda kemungkinan akan mendapatkan jawaban yang lebih baik jika Anda menentukan algoritma spesifik yang Anda pertimbangkan.
Jika Anda menggunakan model parametrik (regresi logistik) ini seharusnya tidak terlalu menjadi masalah dan Anda bisa memvariasikan ambang batas berdasarkan fungsi kerugian Anda (biaya negatif palsu ke positif palsu)
Jika Anda menggunakan algoritma pembelajaran mesin, ini mungkin lebih sulit. Max Kuhn melakukan upaya yang adil untuk meringkas masalah dalam Bab 16 dari "Pemodelan Prediktif Terapan". Tapi topik yang menantang untuk diringkas. Jika Anda tidak ingin membeli buku, kode R tersedia dalam paket AppliedPredictiveModeling untuk bab ini dan mungkin cukup tergantung pada keakraban Anda dengan R dan algoritma yang digunakan.
Biasanya pembahasan berkisar pada algoritma undersampling / oversampling +/- sensitif biaya. Dengan variasi seperti jous-boost juga dimungkinkan.
Contoh diskusi semacam ini: Chen et al "Menggunakan Hutan Acak untuk Mempelajari Data yang Tidak Seimbang" http://statistics.berkeley.edu/sites/default/files/tech-reports/666.pdf
sumber
Anda dapat melihat implementasi scikit-learn. perhatikan argumen bobot class_ yang dapat memiliki nilai kamus bobot kelas atau 'otomatis':
class sklearn.svm.SVC (C = 1.0, kernel = 'rbf', degree = 3, gamma = 0.0, coef0 = 0.0, menyusut = Benar, probabilitas = Salah, tol = 0.001, cache_size = 200, class_weight = Tidak ada, verbose = Salah, max_iter = -1, random_state = Tidak Ada)
Anda bisa bermain dengan nilai argumen class_weight yang bisa berupa kamus bobot kelas atau 'otomatis'. Dalam mode 'otomatis', algoritma pembelajaran akan secara otomatis menetapkan bobot untuk setiap kelas berdasarkan jumlah sampel dalam masing-masing kelas.
scikit-learn memiliki beberapa algoritma klasifikasi lain, beberapa di antaranya menerima bobot kelas.
sumber