Mengapa svm tidak sebagus pohon keputusan pada data yang sama?


9

Saya baru mengenal pembelajaran mesin dan mencoba menggunakan scikit-learning (sklearn) untuk menangani masalah klasifikasi. Baik DecisionTree dan SVM dapat melatih classifier untuk masalah ini.

Saya menggunakan sklearn.ensemble.RandomForestClassifierdan sklearn.svm.SVCmenyesuaikan data pelatihan yang sama (sekitar 500.000 entri dengan 50 fitur per entri). The RandomForestClassifier keluar dengan classifier di sekitar satu menit. The SVC menggunakan lebih dari 24 jam dan masih terus berjalan.

Mengapa SVC berkinerja sangat tidak efisien? Apakah set data terlalu besar untuk SVC ? Apakah SVC tidak tepat untuk masalah seperti itu?

Jawaban:


13

Kemungkinan meliputi penggunaan kernel yang tidak tepat (misalnya kernel linier untuk masalah non-linear), pilihan kernel yang buruk dan hiper-parameter regularisasi. Pemilihan model yang baik (pemilihan penyetelan kernel dan hyper-parameter adalah kunci untuk mendapatkan kinerja yang baik dari SVM, mereka hanya dapat diharapkan memberikan hasil yang baik bila digunakan dengan benar).

SVM sering membutuhkan waktu lama untuk dilatih, ini terutama benar ketika pilihan kernel dan terutama parameter regularisasi berarti bahwa hampir semua data berakhir sebagai vektor pendukung (sparsity SVM adalah produk sampingan yang praktis, tidak lebih).

Terakhir, teorema tidak makan siang gratis mengatakan bahwa tidak ada superioritas a-priori untuk sistem pengklasifikasi lebih dari yang lain, sehingga pengklasifikasi terbaik untuk tugas tertentu sendiri tergantung pada tugas. Namun ada teori yang lebih menarik untuk SVM yang menunjukkan bahwa itu kemungkinan akan menjadi pilihan yang lebih baik daripada banyak pendekatan lain untuk banyak masalah.


2
1. Bagaimana saya tahu apakah suatu masalah linear atau tidak? Menurut data pelatihan? 2. Bisakah Anda merekomendasikan beberapa materi tentang "bagaimana membuat pilihan kernel yang baik dan menyetel parameter-hiper"?
Java Xu

Secara umum tidak mungkin untuk mengetahui dengan pasti bahwa suatu masalah adalah linier, tetapi pengklasifikasi non-linear secara konsisten mengungguli yang non-linear adalah indikasi yang jelas bahwa itu adalah tugas yang tidak linier.
Dikran Marsupial

Untuk menyetel parameter kernel dan regularisasi, validasi silang adalah pendekatan yang masuk akal, baik menggunakan pencarian kotak atau beberapa metode optimasi numerik (saya menggunakan Nelder Mead simplex). Untuk SVM, "rentang terikat" memberikan perkiraan yang berguna untuk kesalahan validasi silang keluar-keluar. Catatan Anda perlu menggunakan sesuatu seperti validasi silang bersarang adalah Anda juga menginginkan perkiraan kinerja yang tidak bias (lihat jawaban atas pertanyaan lain yang saya berikan).
Dikran Marsupial

1
500k titik data adalah masalah yang cukup besar sehingga kernel SVM cenderung perlu waktu untuk berlatih. Layak untuk dicoba LinearSVM, yang hanya mendukung classifier linier tetapi berjalan jauh lebih cepat, atau classifier SGD , yang mungkin masih lebih cepat. Jika itu tidak bekerja dengan baik, Anda bisa mencoba menggunakan pendekatan kernel , yang memungkinkan Anda menggunakan classifier linier untuk memperkirakan yang nonlinear. Yang mengatakan, hutan acak juga merupakan algoritma yang baik dan mungkin yang terbaik untuk data Anda.
Dougal

18

Pohon Keputusan dan Hutan Acak sebenarnya adalah pengklasifikasi yang sangat baik. Sementara SVM's (Support Vector Machines) dipandang lebih kompleks, itu tidak berarti mereka akan berkinerja lebih baik.

Makalah "Perbandingan Empiris Algoritma Pembelajaran yang Dibimbing" oleh Rich Caruana membandingkan 10 pengklasifikasi biner yang berbeda, SVM, Neural-Networks, KNN, Regresi Logistik, Naive Bayes, Hutan Acak, Pohon Pengambilan Keputusan, Pohon Pengambilan Keputusan Bagged, Pohon Keputusan yang Didorong dan Pohon Keputusan yang Didongkrak Pohon di sebelas set data yang berbeda dan membandingkan hasilnya pada 8 metrik kinerja yang berbeda.

Mereka menemukan bahwa pohon keputusan Boosted datang pertama dengan Random Forests kedua dan kemudian Decision Trees Bagged dan kemudian SVM

Hasilnya juga akan tergantung pada berapa banyak kelas yang Anda klasifikasikan.


5

"Apakah masalah itu linear atau tidak" Dalam masalah klasifikasi biner, jika dataset dapat dipisahkan oleh hyper-plane, itu adalah masalah linier.

Jika dataset tidak dapat dipisahkan secara linier, saat Anda mencoba classifier linier untuk menemukan hyper-plane yang tidak ada sama sekali, algoritme mungkin tampak berjalan selamanya.

Satu saran: Anda dapat mencicipi sebagian kecil dari data Anda, dan coba algoritma ini untuk melihat apakah itu berfungsi dalam dataset kecil. Kemudian tingkatkan dataset untuk memeriksa kapan masalah ini terjadi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.