Apa pengaruh C dalam SVM dengan kernel linear?

134

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 2C105,,102

Sekarang saya bertanya-tanya: apakah ini kesalahan yang disebabkan oleh ikatan ruby untuk libsvmsaya gunakan ( rb-libsvm ) atau apakah ini dapat dijelaskan secara teoritis ?

Haruskah parameter selalu mengubah kinerja classifier?C

alfa
sumber
Hanya komentar, bukan jawaban: Setiap program yang meminimalkan jumlah dari dua istilah, seperti harus (imho) memberi tahu Anda apa dua istilah pada akhirnya, sehingga Anda dapat melihat bagaimana mereka menyeimbangkan. (Untuk bantuan dalam penghitungan dua istilah SVM sendiri, coba ajukan pertanyaan terpisah. Pernahkah Anda melihat beberapa poin dengan klasifikasi terburuk? Bisakah Anda memposting masalah yang serupa dengan milik Anda?)|w|2+Cξsaya,
denis

Jawaban:

136

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.

Marc Shivers
sumber
1
OK, saya mengerti bahwa C menentukan pengaruh kesalahan klasifikasi pada fungsi objektif. Fungsi objektif adalah jumlah dari istilah regularisasi dan tingkat kesalahan klasifikasi (lihat en.wikipedia.org/wiki/Support_vector_machine#Soft_margin ). Ketika saya mengubah C, ini tidak berpengaruh pada minimum fungsi tujuan saya. Bisakah itu berarti bahwa istilah regularisasi selalu sangat kecil?
alfa
3
Saya akan menyarankan mencoba rentang nilai C yang lebih luas, mungkin 10 ^ [- 5, ..., 5], atau lebih jika optimasi cepat pada dataset Anda, untuk melihat apakah Anda mendapatkan sesuatu yang terlihat lebih masuk akal. Kesalahan pelatihan dan nilai biaya minimum harus berubah karena C bervariasi. Juga, apakah skala data Anda ekstrem? Secara umum, parameter C optimal harus lebih besar ketika Anda menurunkan data Anda, dan sebaliknya, jadi jika Anda memiliki nilai yang sangat kecil untuk fitur, pastikan untuk memasukkan nilai yang sangat besar untuk nilai C yang mungkin. Jika tidak ada di atas yang membantu, saya kira masalahnya ada di ikatan ruby
Marc Shivers
3
mengubah akurasi yang seimbang dari 0,5 (hanya menebak) menjadi 0,86 tidak terdengar seperti pengaruh kecil bagi saya. Ini akan menjadi ide yang baik untuk menyelidiki kisi-kisi nilai yang lebih baik untuk C seperti yang disarankan Marc, tetapi hasil yang Anda berikan tampaknya merupakan perilaku yang cukup normal. Orang mungkin mengharapkan kesalahan untuk naik kembali karena C cenderung tak terbatas karena terlalu pas, tetapi itu tampaknya tidak banyak masalah dalam kasus ini. Perhatikan bahwa jika Anda benar-benar tertarik pada kesalahan seimbang dan set latihan Anda tidak memiliki 50:50, maka Anda mungkin bisa mendapatkan hasil yang lebih baik ...
Dikran Marsupial
2
... dengan menggunakan nilai C yang berbeda untuk pola-pola yang termasuk dalam kelas positif dan negatif (yang secara asimtotik setara dengan resampling data untuk mengubah proporsi pola milik masing-masing kelas).
Dikran Marsupial
2
Saya pikir adalah mungkin bahwa setelah Anda sampai ke C = 10 ^ 0 SVM sudah mengklasifikasikan semua data pelatihan dengan benar, dan tidak ada vektor dukungan terikat (alfa sama dengan C) dalam kasus itu membuat C lebih besar memiliki tidak berpengaruh pada solusi.
Dikran Marsupial
152

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.

masukkan deskripsi gambar di sini

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:

c besar adalah yang terbaik maka classifier yang dipelajari menggunakan nilai c besar adalah yang terbaik.

Di sisi lain, jika data masa depan terlihat seperti ini:

rendah c adalah yang terbaik 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?

Kent Munthe Caspersen
sumber
4
Saya tidak menyentuh data selama lebih dari 3 tahun sekarang. Ini sangat dimensi tinggi dan berisik dan saya tidak diizinkan mempublikasikannya. Pertanyaannya sudah dijawab tetapi saya pikir visualisasi Anda sangat bagus dan intuitif.
alfa
luar biasa. apakah Anda memiliki penjelasan untuk nilai gama juga?
MonsterMMORPG
2
Parameter gamma digunakan untuk fungsi kernel Gaussian. Fungsi kernel dapat dilihat sebagai cara yang efisien untuk mengubah fitur asli Anda ke ruang lain, di mana hyperplane pemisah di ruang fitur baru tidak harus linear dalam ruang fitur asli. Misalnya, posisi dua dimensi dari titik data dalam ruang fitur asli dapat digunakan untuk menghitung fitur baru yang mewakili jarak ke beberapa penanda pada peta. Dengan fitur baru ini, classifier non-linear (dalam ruang asli) dapat dibuat yang mana batas keputusan membentuk lingkaran di sekitar penanda
Kent Munthe Caspersen
@KentMuntheCaspersen bukankah penjelasan Anda tentang C salah? Ini kebalikan dari apa yang dikatakan dalam buku "Pengantar Pembelajaran Statistik".
diugalde
2
@diugalde dapatkah Anda mengutip dari buku apa sebenarnya yang berbeda dari penjelasan saya? Saya selalu menganggap c sebagai biaya kesalahan klasifikasi (mudah diingat oleh c dalam klasifikasi). Dengan cara yang lebih tinggi c berarti biaya kesalahan klasifikasi yang tinggi, mengarah pada algoritma yang berusaha memisahkan semua titik data dengan sempurna. Dengan pencilan ini tidak selalu mungkin atau tidak selalu mengarah pada hasil umum yang baik, yang merupakan alasan yang baik untuk menurunkan / memperkenalkan c.
Kent Munthe Caspersen
26

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).

Dikran Marsupial
sumber
OK, saya pikir saya mengerti arti C sekarang. :)
alfa
2
Tetapi jika C adalah parameter regularisasi, mengapa C tinggi meningkatkan overfitting, ketika regularisasi secara umum dilakukan untuk mengurangi overfitting, yaitu dengan menciptakan model yang lebih umum?
user1603472
2
C adalah parameter regularisasi, tetapi pada dasarnya melekat pada istilah data misfit (jumlah variabel slack) daripada istilah regularisasi (bit margin), sehingga nilai C yang lebih besar berarti lebih sedikit regularisasi, daripada lebih banyak. Atau Anda dapat melihat representasi biasa dari parameter rgularisasi sebagai 1 / C.
Dikran Marsupial
8

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. Linear SVM Classifier dengan C = 10000000Linear SVM Classifier dengan C = 0,001

deerishi
sumber
Saya tidak begitu mengerti plot Anda. Bisakah Anda menjelaskannya?
alfa
1
@alfa: Maksud saya untuk menunjukkan plot adalah: 1) Jika C terlalu besar (plot 1), maka classifier Anda akan terlalu cocok, yaitu akan mencoba untuk mengklasifikasikan setiap titik data pelatihan secara akurat. Plot 1 menunjukkan hampir semua poin pelatihan diklasifikasi dengan benar. 2) Di sisi lain jika C terlalu sedikit (plot 2), maka classifier Anda akan cocok. Plot 2 menunjukkan classifier yang kurang pas. Itu tidak memisahkan poin ke dalam kelas masing-masing. Semoga ini membantu.
deerishi
Itu berarti bahwa sumbu x dan y Anda menunjukkan dua fitur yang berbeda. Label "panjang dataset" dan "Jumlah rata-rata" sedikit membingungkan?
alfa
Akan menarik untuk melihat bagaimana pilihan yang tepat untuk C membantu dalam kedua kasus.
alfa
2
Saya pikir itu tidak jelas untuk melihat bahwa C = 10000000 adalah pilihan yang buruk dan saya pikir dataset tidak tepat untuk menunjukkan itu. Mungkin dataset dengan hanya beberapa outlier di sisi yang salah dari hyperplane pemisah akan lebih baik?
alfa
4

Jawaban di atas sangat bagus. Setelah membaca pertanyaan Anda dengan saksama, saya menemukan ada 2 fakta penting yang mungkin terlewatkan.

  1. Anda menggunakan kernel linear
  2. Data pelatihan Anda terpisah secara linear, karena "Tidak ada kesalahan pada set pelatihan".

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.

luz
sumber
2

Parameter C digunakan untuk mengendalikan outlier - C rendah menunjukkan bahwa kami memperbolehkan outlier lebih banyak, C tinggi menyiratkan kami memperbolehkan outlier lebih sedikit.

H. Irshad
sumber
1

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.

Brad
sumber