Implementasi SVM tercepat


16

Lebih banyak pertanyaan umum. Saya menjalankan SVF rbf untuk pemodelan prediktif. Saya pikir program saya saat ini jelas perlu sedikit mempercepat. Saya menggunakan scikit belajar dengan pencarian kasar ke grid + validasi silang.

Setiap menjalankan SVM membutuhkan waktu sekitar satu menit, tetapi dengan semua iterasi, saya masih menemukannya terlalu lambat. Dengan asumsi saya akhirnya melakukan multi thread bagian validasi silang pada beberapa core, ada rekomendasi untuk mempercepat program saya? Adakah implementasi SVM yang lebih cepat? Saya pernah mendengar tentang beberapa SVM GPU, tetapi belum banyak menggali. Adakah pengguna dan apakah lebih cepat?


1
SGDClassifier di scikit-learn sangat cepat, tetapi untuk SVM linear. Anda mungkin bertanya pada scikit-learn guys, juga menambahkan tag scikit-learn.
denis

Kernel SVM non-linear pasti akan lambat. Mungkin Anda harus mulai bermain dengan model linier (lihat Vowpal Wabbit) dan kemudian beralih ke non-linear. Anda bahkan bisa mendapatkan non-linearitas dengan membuat fitur yang lebih rumit dengan model linier. Cukup sering model non-linear menghasilkan beberapa peningkatan kinerja tambahan dengan biaya komputasi yang besar. Tidak ada yang menentang SVM kernel non-linear tetapi hanya untuk diingat, dari sudut pandang praktis.
Vladislavs Dovgalecs

1
Anda dapat mempercepat dengan menggunakan pustaka tuning khusus untuk pencarian hyperparameter, yang jauh lebih efisien daripada pencarian grid (mis. Membutuhkan pengujian jauh lebih sedikit set hyperparameter). Contoh perpustakaan tuning termasuk Optunity dan Hyperopt.
Marc Claesen

Jawaban:


16

Algoritma Google Sofia mengandung implementasi SVM linear yang sangat cepat. Itu salah satu SVM tercepat di luar sana, tapi saya pikir itu hanya mendukung klasifikasi, dan hanya mendukung SVM linear.

Bahkan ada paket R !


Tautan Anda sekarang mengatakan "paket 'RSofia' telah dihapus dari repositori CRAN." Ada yang tahu kenapa?
James Hirschorn

@JamesHirschorn Pengembang mungkin berhenti mempertahankannya. Anda dapat menginstalnya dari arsip CRAN.
Zach

10

Speedup termudah yang akan Anda dapatkan adalah menjalankan validasi silang secara paralel. Secara pribadi, saya suka paket caret di R , yang menggunakan foreach sebagai backend. Itu membuatnya sangat mudah untuk mengolah validasi silang dan pencarian grid ke beberapa core atau beberapa mesin.

Caret dapat menangani banyak model berbeda, termasuk rbf SVMs:

library(caret)
library(doMC)
registerDoMC()
model <-  train(Species ~ ., data = iris, method="svmRadial", 
    trControl=trainControl(method='cv', number=10))
> confusionMatrix(model)
Cross-Validated (10 fold) Confusion Matrix 

(entries are percentages of table totals)

            Reference
Prediction   setosa versicolor virginica
  setosa       32.4        0.0       0.0
  versicolor    0.0       30.9       2.0
  virginica     0.9        2.4      31.3

Perhatikan bahwa pustaka doMC () hanya tersedia di mac dan linux, itu harus dijalankan dari baris perintah, bukan dari GUI, dan itu memecah model apa pun dari RWeka. Juga mudah untuk menggunakan cluster MPI atau SNOW sebagai backend paralel, yang tidak memiliki masalah ini.


Terima kasih, Zach. Saya percaya scikits juga memiliki cara menjalankan validasi silang secara paralel yang merupakan apa yang saya rencanakan untuk dilakukan. Kecuali itu, ada saran lain tentang speedup? Terima kasih.
tomas

@ Danjeharry: validasi silang paralel benar-benar buah yang menggantung rendah di sini, dan saya sangat menyarankan Anda menjelajahi yang pertama. Selain itu, saya tidak tahu banyak tentang mempercepat SVM secara khusus. Jika Anda dapat menemukan algoritma SVM paralel, itu mungkin ide yang bagus juga. Berapa banyak baris / kolom data yang Anda gunakan untuk berlatih?
Zach

Terima kasih Zach saya akan melihat paralel cv. Saya melakukan sekitar 650 atribut dan 5000 contoh.
tomas


2

Lihatlah modul multiprosesor Python . Itu membuat paralelisasi hal-hal sangat mudah dan sempurna untuk validasi silang.


2

R memiliki paket svm akselerasi GPU yang hebat , rpusvm , dibutuhkan ~ 20 detik untuk melatih sampel 20K * 100 dimensi, dan saya menemukan bahwa CPU tidak pernah kelebihan beban olehnya, jadi ia menggunakan GPU secara efisien. Namun, itu membutuhkan GPU NVIDIA.


1

Peringatan: Ini adalah plug yang tidak tahu malu.

Pertimbangkan DynaML sebagai pustaka ML berbasis Scala yang sedang saya kerjakan. Saya telah mengimplementasikan LS-SVM berbasis Kernel (Least Squares Support Vector Machines) bersama dengan tuning Kernel otomatis, menggunakan pencarian grid atau Coupled Simulated Annealing.

http://mandar2812.github.io/DynaML/

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.