सबसे तेज़ एसवीएम कार्यान्वयन


16

एक सामान्य प्रश्न से अधिक। मैं भविष्य कहनेवाला मॉडलिंग के लिए एक rbf SVM चला रहा हूं। मुझे लगता है कि मेरे वर्तमान कार्यक्रम को निश्चित रूप से थोड़ी गति की आवश्यकता है। मैं ग्रिड खोज + क्रॉस सत्यापन के लिए मोटे के साथ सीखता हूं।

प्रत्येक एसवीएम रन में लगभग एक मिनट लगता है, लेकिन सभी पुनरावृत्तियों के साथ, मैं अभी भी इसे बहुत धीमा पा रहा हूं। यह मानकर कि मैं अंत में मल्टीपल कोर पार्ट को मल्टी कोर पर थ्रेड कर रहा हूं, मेरे प्रोग्राम को गति देने की कोई सिफारिश? SVM का कोई तेज़ कार्यान्वयन? मैंने कुछ GPU SVM के बारे में सुना है, लेकिन इसमें ज्यादा खुदाई नहीं की है। किसी भी उपयोगकर्ता और यह तेजी से है?


1
शिकिट-एसजीडीएस में SGDClassifier बहुत तेज है, लेकिन रैखिक SVM के लिए। आप स्कोर करने वाले लोगों से पूछ सकते हैं, टैग स्कोर-सीख भी जोड़ सकते हैं।
डेनिस

गैर-रैखिक कर्नेल एसवीएम को धीमा होने के लिए बर्बाद किया जाता है। शायद आपको रैखिक मॉडल (वॉवेल वॉबबिट की जांच) से खेलना शुरू करना चाहिए और फिर गैर-रैखिक पर जाना चाहिए। आप रैखिक मॉडल के साथ अधिक जटिल विशेषताएं बनाकर कुछ गैर-रैखिकता प्राप्त कर सकते हैं। अक्सर गैर-रेखीय मॉडल के परिणामस्वरूप बड़े कम्प्यूटेशनल व्यय में कुछ वृद्धिशील प्रदर्शन में वृद्धि होती है। गैर-रैखिक कर्नेल एसवीएम के खिलाफ कुछ भी नहीं, बस व्यावहारिक दृष्टिकोण से, ध्यान में रखना है।
व्लादिस्लाव डोभालगस

1
आप हाइपरपैरेट खोज के लिए विशेष ट्यूनिंग पुस्तकालयों का उपयोग करके गति कर सकते हैं, जो ग्रिड खोज की तुलना में अधिक कुशल हैं (यानी हाइपरपरमेटर्स के बहुत कम सेट की आवश्यकता होती है)। ट्यूनिंग पुस्तकालयों के उदाहरणों में ऑप्ट्यूनिटी और हाइपरॉप्ट शामिल हैं।
मार्क क्लेसेन

जवाबों:


16

Google के सोफिया एल्गोरिथ्म में एक रैखिक SVM का अत्यधिक तेज़ कार्यान्वयन है। यह सबसे तेज़ SVMs में से एक है, लेकिन मुझे लगता है कि यह केवल वर्गीकरण का समर्थन करता है, और केवल रैखिक SVM का समर्थन करता है।

यहां तक ​​कि एक आर पैकेज भी है !


आपका लिंक अब कहता है "पैकेज 'RSofia' को CRAN रिपॉजिटरी से हटा दिया गया था।" कोई विचार क्यों?
जेम्स हिर्शोर्न

@JamesHirschorn डेवलपर ने शायद इसे बनाए रखना बंद कर दिया। आप इसे CRAN आर्काइव से इंस्टॉल कर सकते हैं।
Zach

10

आप जो सबसे आसान स्पीडअप प्राप्त करने जा रहे हैं, वह समानांतर में क्रॉस-वेलिडेशन चला रहा है। व्यक्तिगत रूप से, मुझे आर में कैरट पैकेज पसंद है , जो बैकएंड के रूप में फोरच का उपयोग करता है । यह क्रॉस-वेलिडेशन और ग्रिड सर्च को कई कोर या मल्टीपल मशीनों पर खेती करना बहुत आसान बनाता है।

आरबीएफ एसवीएम सहित कैरट कई अलग-अलग मॉडलों को संभाल सकता है:

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

ध्यान दें कि doMC () लाइब्रेरी केवल mac और linux पर उपलब्ध है, इसे कमांड लाइन से चलाया जाना चाहिए, GUI से नहीं, और यह RWeka से किसी भी मॉडल को तोड़ता है। MPI या SNOW क्लस्टर को समानांतर बैकेंड के रूप में उपयोग करना भी आसान है , जिनके पास ये मुद्दे नहीं हैं।


धन्यवाद Zach मेरा मानना ​​है कि scikits में समानांतर रूप से क्रॉस वेलिडेशन चलाने का एक तरीका है जो कि मैं करने की योजना बना रहा हूं। इसके अलावा, स्पीडअप पर कोई अन्य सुझाव? धन्यवाद।
टॉम्स

@ डेंजहेरी: समानांतर क्रॉस-मान्यता वास्तव में यहां कम लटका हुआ फल है, और मैं दृढ़ता से सुझाव देता हूं कि पहले यह पता लगाएं। इसके अलावा, मैं विशेष रूप से एसवीएम को तेज करने के बारे में बहुत कुछ नहीं जानता। यदि आप एक समानांतर एसवीएम एल्गोरिथ्म पा सकते हैं, तो यह एक अच्छा विचार भी हो सकता है। वह कितनी पंक्तियाँ / स्तंभ हैं जिनका डेटा आप ट्रेन में उपयोग कर रहे हैं?
जच

धन्यवाद Zach मैं समानांतर cv में देखूंगा। मैं लगभग ६५० विशेषताओं और ५००० उदाहरणों पर काम कर रहा हूं।
टॉमस

4

मुझे लगता है कि यह एक बहुत पुराना सवाल है, लेकिन यह भी संभव है (कर्नेल फीचर मैप के कम-आयामी सन्निकटन का उपयोग करने के लिए आपके डेटासेट के आकार के आधार पर यह अधिक या कम प्रभावी हो सकता है) और फिर एक रैखिक-एसवीएम में इसका उपयोग करें। Http://scikit-learn.org/stable/modules/kernel_approximation.html देखें


2

पायथन के मल्टीप्रोसेसिंग मॉड्यूल पर एक नज़र डालें । यह चीजों को समानांतर बनाना आसान बनाता है और क्रॉस सत्यापन के लिए एकदम सही है।


2

आर में एक महान जीपीयू-त्वरित एसवीएम पैकेज rpusvm है , यह 20K नमूने * 100 आयामों पर प्रशिक्षित करने के लिए ~ 20 सेकंड लेता है, और मैंने पाया कि सीपीयू कभी भी इसे अतिभारित नहीं करता है, इसलिए यह GPU का कुशलता से उपयोग करता है। हालाँकि, इसके लिए एक NVIDIA GPU की आवश्यकता होती है।


1

अलर्ट: यह एक बेशर्म प्लग है।

DynaML के एक स्काला आधारित एमएल लाइब्रेरी पर विचार कर रहा हूं, जिस पर मैं काम कर रहा हूं। मैंने कर्नेल आधारित एलएस-एसवीएम (कम से कम वर्ग समर्थन वेक्टर मशीनें) को स्वचालित कर्नेल ट्यूनिंग के साथ ग्रिड खोज या युग्मित नकली एनीलिंग का उपयोग करके लागू किया है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.