Saat ini saya menggunakan SVM dengan kernel linear untuk mengklasifikasikan data saya. Tidak ada kesalahan pada set pelatihan. Saya mencoba beberapa nilai untuk parameter ( ). Ini tidak mengubah kesalahan pada set tes.10 - 5 , … , 10 2
Sekarang saya bertanya-tanya: apakah ini kesalahan yang disebabkan oleh ikatan ruby untuk libsvm
saya gunakan ( rb-libsvm ) atau apakah ini dapat dijelaskan secara teoritis ?
Haruskah parameter selalu mengubah kinerja classifier?
machine-learning
svm
libsvm
alfa
sumber
sumber
Jawaban:
Parameter C memberi tahu optimasi SVM seberapa banyak Anda ingin menghindari kesalahan klasifikasi setiap contoh pelatihan. Untuk nilai C yang besar, optimisasi akan memilih hyperplane margin yang lebih kecil jika hyperplane itu melakukan pekerjaan yang lebih baik untuk mendapatkan semua poin pelatihan yang diklasifikasikan dengan benar. Sebaliknya, nilai C yang sangat kecil akan menyebabkan pengoptimal mencari hyperplane pemisah margin yang lebih besar, bahkan jika hyperplane itu mengklasifikasikan lebih banyak poin. Untuk nilai C yang sangat kecil, Anda harus mendapatkan contoh kesalahan klasifikasi, sering kali bahkan jika data pelatihan Anda terpisah secara linear.
sumber
Dalam SVM Anda sedang mencari dua hal: hyperplane dengan margin minimum terbesar, dan hyperplane yang memisahkan dengan benar sebanyak mungkin instance. Masalahnya adalah Anda tidak akan selalu bisa mendapatkan keduanya. Parameter c menentukan seberapa besar keinginan Anda untuk yang terakhir. Saya telah mengambil contoh kecil di bawah ini untuk menggambarkan hal ini. Di sebelah kiri Anda memiliki c rendah yang memberi Anda margin minimum yang cukup besar (ungu). Namun, ini mengharuskan kita mengabaikan outlier lingkaran biru yang gagal kita klasifikasikan. Di sebelah kanan Anda memiliki tinggi c. Sekarang Anda tidak akan mengabaikan outlier dan dengan demikian berakhir dengan margin yang jauh lebih kecil.
Jadi yang mana dari pengklasifikasi ini yang terbaik? Itu tergantung pada seperti apa data masa depan yang akan Anda prediksi, dan paling sering Anda tidak tahu itu. Jika data masa depan terlihat seperti ini:
maka classifier yang dipelajari menggunakan nilai c besar adalah yang terbaik.
Di sisi lain, jika data masa depan terlihat seperti ini:
maka classifier yang dipelajari menggunakan nilai c rendah adalah yang terbaik.
Bergantung pada set data Anda, mengubah c mungkin atau mungkin tidak menghasilkan hyperplane yang berbeda. Jika tidak menghasilkan hyperplane yang berbeda, yang tidak berarti bahwa classifier Anda akan keluaran kelas yang berbeda untuk data tertentu yang Anda telah menggunakannya untuk mengklasifikasikan. Weka adalah alat yang baik untuk memvisualisasikan data dan bermain-main dengan pengaturan yang berbeda untuk SVM. Ini dapat membantu Anda mendapatkan ide yang lebih baik tentang bagaimana data Anda terlihat dan mengapa mengubah nilai c tidak mengubah kesalahan klasifikasi. Secara umum, memiliki beberapa contoh pelatihan dan banyak atribut membuatnya lebih mudah untuk membuat pemisahan data secara linier. Juga fakta bahwa Anda mengevaluasi data pelatihan Anda dan bukan data baru yang tak terlihat membuat pemisahan lebih mudah.
Jenis data apa yang Anda coba pelajari dari sebuah model? Berapa banyak data? Bisakah kita melihatnya?
sumber
C pada dasarnya adalah parameter regularisasi, yang mengontrol trade-off antara mencapai kesalahan rendah pada data pelatihan dan meminimalkan norma bobot. Ini analog dengan parameter ridge dalam regresi ridge (pada kenyataannya dalam prakteknya ada sedikit perbedaan dalam kinerja atau teori antara SVM linear dan regresi ridge, jadi saya biasanya menggunakan yang terakhir - atau regresi ridge kernel jika ada lebih banyak atribut daripada pengamatan).
Tuning C dengan benar adalah langkah penting dalam praktik terbaik dalam penggunaan SVM, karena minimalisasi risiko struktural (prinsip kunci di balik pendekatan dasar) adalah pihak yang diimplementasikan melalui tuning C. Parameter C memberlakukan batas atas pada norma standar. bobot, yang berarti bahwa ada seperangkat kelas hipotesis yang diindeks oleh C. Saat kita meningkatkan C, kita meningkatkan kompleksitas kelas hipotesis (jika kita sedikit meningkatkan C, kita masih dapat membentuk semua model linier yang kita dapat sebelumnya dan juga beberapa yang kita tidak bisa sebelum kita meningkatkan batas atas pada norma bobot yang diizinkan). Jadi, serta mengimplementasikan SRM melalui klasifikasi margin maksimum, itu juga dilaksanakan dengan membatasi kompleksitas kelas hipotesis melalui pengendalian C.
Sayangnya teori untuk menentukan cara menetapkan C tidak berkembang dengan baik saat ini, sehingga kebanyakan orang cenderung menggunakan validasi silang (jika mereka melakukan sesuatu).
sumber
C adalah parameter regularisasi yang mengontrol trade off antara pencapaian kesalahan pelatihan rendah dan kesalahan pengujian rendah yang merupakan kemampuan untuk menggeneralisasikan classifier Anda untuk data yang tidak terlihat.
Pertimbangkan fungsi objektif SVM linier: min | w | ^ 2 + CÂξ. Jika C Anda terlalu besar, algoritma optimasi akan mencoba mengurangi | w | sebisa mungkin mengarah ke hyperplane yang mencoba untuk mengklasifikasikan setiap contoh pelatihan dengan benar. Melakukan ini akan menyebabkan kerugian dalam sifat generalisasi dari classifier. Di sisi lain jika C Anda terlalu kecil maka Anda memberi fungsi tujuan Anda kebebasan tertentu untuk meningkatkan | w | banyak, yang akan menyebabkan kesalahan pelatihan yang besar.
Gambar-gambar di bawah ini mungkin membantu Anda memvisualisasikan ini.
sumber
Jawaban di atas sangat bagus. Setelah membaca pertanyaan Anda dengan saksama, saya menemukan ada 2 fakta penting yang mungkin terlewatkan.
Mengingat 2 fakta, jika nilai C berubah dalam kisaran yang masuk akal, hyperplane optimal hanya akan bergeser secara acak dengan jumlah kecil di dalam margin (celah yang dibentuk oleh vektor dukungan).
Secara intuitif, misalkan margin pada data pelatihan kecil, dan / atau tidak ada titik data uji dalam margin juga, pergeseran hyperplane optimal dalam margin tidak akan memengaruhi kesalahan klasifikasi set tes.
Meskipun demikian, jika Anda menetapkan C = 0, maka SVM akan mengabaikan kesalahan, dan hanya mencoba untuk meminimalkan jumlah kuadrat dari bobot (w), mungkin Anda mungkin mendapatkan hasil berbeda pada set tes.
sumber
Parameter C digunakan untuk mengendalikan outlier - C rendah menunjukkan bahwa kami memperbolehkan outlier lebih banyak, C tinggi menyiratkan kami memperbolehkan outlier lebih sedikit.
sumber
C tinggi (biaya) berarti biaya kesalahan klasifikasi ditingkatkan. Ini berarti kernel yang fleksibel akan menjadi lebih berlekuk untuk menghindari kesalahan klasifikasi pengamatan dalam set pelatihan.
Jika kernel ingin berlekuk , model tidak akan menggeneralisasi dengan baik ketika memprediksi data baru.
Jika kernel lurus , model tidak akan menggeneralisasi dengan baik saat memprediksi data baru.
sumber