Baru-baru ini saya mulai belajar untuk bekerja sklearn
dan baru saja menemukan hasil yang aneh ini.
Saya menggunakan digits
dataset yang tersedia sklearn
untuk mencoba berbagai model dan metode estimasi.
Ketika saya diuji model Support Vector Machine pada data, saya menemukan ada dua kelas yang berbeda di sklearn
klasifikasi SVM: SVC
dan LinearSVC
, di mana mantan menggunakan satu-terhadap-satu pendekatan dan kegunaan lain satu-terhadap-sisa pendekatan.
Saya tidak tahu apa efeknya pada hasilnya, jadi saya mencoba keduanya. Saya melakukan estimasi gaya Monte Carlo di mana saya menjalankan kedua model 500 kali, setiap kali membagi sampel secara acak menjadi 60% pelatihan dan 40% tes dan menghitung kesalahan prediksi pada set tes.
Pengukur SVC biasa menghasilkan histogram kesalahan berikut: Sementara pengukur SVC linier menghasilkan histogram berikut:
Apa yang bisa menjelaskan perbedaan yang begitu mencolok? Mengapa model linear memiliki akurasi yang lebih tinggi?
Dan, terkait, apa yang bisa menyebabkan polarisasi pada hasil? Baik akurasi mendekati 1 atau akurasi mendekati 0, tidak ada di antaranya.
Sebagai perbandingan, klasifikasi pohon keputusan menghasilkan tingkat kesalahan terdistribusi jauh lebih normal dengan akurasi sekitar 0,85.
sumber
Similar to SVC with parameter kernel=’linear’, but implemented in terms of liblinear rather than libsvm, so it has more flexibility in the choice of penalties and loss functions and should scale better (to large numbers of samples).
Jawaban:
SVM reguler dengan nilai default menggunakan fungsi basis radial sebagai kernel SVM. Ini pada dasarnya adalah kernel Gaussian alias bell-curve. Berarti bahwa tanah tak bertuan antara kelas yang berbeda dibuat dengan fungsi Gaussian. Linear-SVM menggunakan kernel linear untuk fungsi basis, sehingga Anda dapat menganggapnya sebagai fungsi ^. Itu jauh lebih merdu dan pada dasarnya hanya interpolasi linier.
Orang-orang agak memalu pertanyaan ini karena Anda tidak memberikan banyak informasi, tetapi melihat secara mendalam apa yang Anda posting ... ini mengenai beberapa aspek mendasar dari benar-benar memahami detail bias dan varians dan perbedaan antara linear dan nonlinear fungsi dasar dalam SVM.
Lihat gambar ini yang menjelaskan empat wilayah dengan bias tinggi dan rendah dan varian tinggi dan rendah. Jelas tempat terbaik adalah varians rendah dan bias rendah.
Pertama mari kita menilai varians -
Sekarang lihat plot Anda:
Fungsi basis nonlinear memiliki varian yang lebih tinggi. Lihat bagaimana ini lebih berisik daripada kernel linear! Kernel linear memiliki varian yang lebih rendah. Lihat bagaimana itu kurang berisik!
Sekarang mari kita nilai bias -
Kernel mana yang lebih akurat? Kami dapat menambahkan kesalahan yang Anda berikan. Kernel nonlinear memiliki kesalahan total ~ 550 + 325 = ~ 875. Kernel linear memiliki kesalahan ~ 690 + ~ 50 = ~ 740. Jadi kernel linear tampaknya melakukan keseluruhan yang lebih baik, tetapi mereka secara keseluruhan cukup dekat. Ini adalah hal-hal yang rumit!
Menyatukan semuanya
Lihat bagaimana kernel linear melakukan pekerjaan yang buruk pada 1 dan pekerjaan yang sangat hebat pada 0. Ini sangat tidak seimbang. Sedangkan kernel nonlinear lebih seimbang. Sepertinya sweet spot mungkin untuk menciptakan model yang seimbang yang tidak memiliki varian tinggi. Bagaimana cara kita mengendalikan varian yang tinggi? Bingo - regularisasi. Kami dapat menambahkan regularisasi ke model nonlinear dan kami mungkin akan melihat hasil yang lebih baik. Ini adalah parameter C di scikit mempelajari SVM, yang ingin Anda tingkatkan dari default. Kami juga bisa bermain dengan parameter gamma. Gamma mengontrol lebar Gaussian. Mungkin coba tingkatkan satu itu sedikit untuk mendapatkan hasil yang kurang berisik misalnya tanah kosong yang tidak bertuan di antara kelas-kelas.
Semoga ini membantu!
sumber
Jika Anda menggunakan kernel default di SVC (), kernel Radial Basis Function (rbf), maka Anda mungkin mempelajari batas keputusan yang lebih nonlinear. Dalam kasus dataset digit , ini akan jauh mengungguli batas keputusan linier pada tugas ini (lihat 3.1 'Baseline Linear Classifier')
sumber