SVM untuk data yang tidak seimbang

15

Saya ingin mencoba menggunakan Support Vector Machines (SVMs) pada dataset saya. Sebelum saya mencoba masalah, saya diperingatkan bahwa SVM tidak bekerja dengan baik pada data yang sangat tidak seimbang. Dalam kasus saya, saya dapat memiliki sebanyak 95-98% 0 dan 2-5% 1.

Saya mencoba untuk menemukan sumber daya yang berbicara tentang penggunaan SVM pada data yang jarang / tidak seimbang, tetapi yang dapat saya temukan adalah 'sparseSVMs' (yang menggunakan sejumlah kecil vektor dukungan).

Saya berharap seseorang dapat menjelaskan secara singkat:

  1. Seberapa baik SVM diharapkan dilakukan dengan dataset seperti itu
  2. Yang mana, jika ada, modifikasi harus dilakukan pada algoritma SVM
  3. Sumber / makalah apa yang membahas hal ini
DankMasterDan
sumber

Jawaban:

15

Banyak implementasi SVM mengatasi hal ini dengan menetapkan bobot yang berbeda untuk instance positif dan negatif. Pada dasarnya Anda menimbang sampel sehingga jumlah bobot untuk positif akan sama dengan yang negatif. Tentu saja, dalam evaluasi Anda terhadap SVM, Anda harus ingat bahwa jika 95% data negatif, sepele untuk mendapatkan akurasi 95% dengan selalu memprediksi negatif. Jadi, Anda harus memastikan metrik evaluasi Anda juga tertimbang sehingga seimbang.

Khususnya di libsvm, yang Anda tambahkan sebagai tag, ada bendera yang memungkinkan Anda untuk mengatur bobot kelas ( -wsaya percaya, tetapi periksa dokumen ).

Akhirnya, dari pengalaman pribadi saya dapat memberitahu Anda bahwa saya sering menemukan bahwa SVM akan menghasilkan hasil yang sangat mirip dengan atau tanpa koreksi berat.

Bitwise
sumber
Kalahkan saya :-)
Marc Claesen
@Bitwise Saya memiliki masalah data ketidakseimbangan yang sama dan saya mendapatkan Akurasi 99%. Saya menggunakan bobot dalam libsvm. Anda menyebutkan bahwa metrik evaluasi juga harus ditimbang. Saya ingin tahu bagaimana kami dapat menimbang metrik penilaian.
Hani Goc
1
90/100=0.90.5(0/10+90/90)=0.5
7

SVM bekerja dengan baik pada data yang jarang dan tidak seimbang. SVM berbobot kelas dirancang untuk menangani data yang tidak seimbang dengan menetapkan hukuman kesalahan klasifikasi yang lebih tinggi untuk contoh pelatihan kelas minoritas.

Marc Claesen
sumber
5

Dalam hal data yang jarang seperti itu, SVM akan bekerja dengan baik.

Seperti yang dinyatakan oleh @Bitwise Anda tidak boleh menggunakan akurasi untuk mengukur kinerja algoritma.

Alih-alih, Anda harus menghitung ketepatan, daya ingat, dan F-Score dari algoritma.

alexandrekow
sumber
Bisakah Anda memperluas alasan Anda? Juga, bagaimana Anda akan mengukur F-score setelah klasifikasi (pada set tes) selesai? Terima kasih
Spacey
Untuk mengukur FScore pada set tes, Anda perlu mengklasifikasikannya secara manual, lalu menghitung daya ingat dan presisi menggunakan data manual vs data yang diprediksi. Apa yang Anda ingin saya perluas, mengapa SVM bekerja dengan baik dengan data yang jarang?
alexandrekow
Ya, mengapa SVM bekerja pada data jarang akan menyenangkan juga. Terima kasih
Spacey
"Hanya memiliki fitur jarang tidak menimbulkan masalah untuk SVM. Salah satu cara untuk melihat ini adalah Anda dapat melakukan rotasi acak dari sumbu koordinat, yang akan membuat masalah tidak berubah dan memberikan solusi yang sama, tetapi akan membuat data sepenuhnya non-jarang (ini adalah bagian bagaimana proyeksi acak bekerja "( stats.stackexchange.com/questions/23470/... )
alexandrekow