Saya melatih classifier biner SVM menggunakan Scikit belajar.
Karena sifat masalah saya, saya perlu menghindari negatif palsu. Karena tidak ada yang gratis, saya oke mendapatkan tingkat positif palsu yang lebih tinggi untuk mengurangi jumlah negatif palsu. Bagaimana kita bisa melakukan itu (idealnya dengan Scikit belajar)?
Dengan kata lain, bagaimana kita bisa meminimalkan negatif palsu menggunakan klasifikasi SVM? Apakah ada cara untuk menyempurnakan parameter hiper untuk mendukung positif palsu daripada negatif palsu?
machine-learning
cross-validation
svm
python
scikit-learn
Pierre-Antoine
sumber
sumber
Jawaban:
Scikit mempelajari implementasi classifier biner SVM tidak membiarkan Anda menetapkan ambang batas seperti komentar / balasan lain yang disarankan. Alih-alih memberikan probabilitas kelas, straighaway menerapkan cutoff default untuk memberi Anda keanggotaan kelas misalnya 1 atau 2.
Untuk meminimalkan negatif palsu, Anda dapat mengatur bobot lebih tinggi untuk sampel pelatihan yang berlabel kelas positif, secara default bobot ditetapkan ke 1 untuk semua kelas. Untuk mengubah ini, gunakan parameter-hiper
class_weight
.Idealnya, Anda harus menghindari memilih cutoff dan cukup memberikan probabilitas kelas kepada pengguna akhir yang kemudian dapat memutuskan cutoff mana yang akan diterapkan ketika membuat keputusan berdasarkan classifier.
Metrik yang lebih baik untuk membandingkan pengklasifikasi adalah fungsi penilaian yang tepat, lihat https://en.wikipedia.org/wiki/Scoring_rule dan
score()
metode dalam modul classifier svmsklearn.svm.SVC
.sumber
Seperti banyak model prediksi, SVM akan menampilkan skor probabilitas dan ambang batas berlaku untuk probabilitas untuk mengubahnya menjadi label positif atau negatif.
Seperti, @Sycorax disebutkan dalam komentar, Anda dapat menyesuaikan ambang batas untuk menyesuaikan trade-off antara false positive dan false negative.
Berikut ini beberapa contoh dalam R.
Perhatikan ketika kita berubah
cut_off
, matriks kebingungan (false postive, false negative dll) berubahsumber