आर

2012-06-13 5 views
5

में प्रोफाइलिंग एसवीएम (ई 1071) मैं आर और एसवीएम के लिए नया हूं और मैं पैकेज से svm फ़ंक्शन को प्रोफाइल करने का प्रयास कर रहा हूं। हालांकि, मुझे कोई बड़ा डेटासेट नहीं मिल रहा है जो मुझे इनपुट डेटा के आकार को अलग-अलग परिणामों की अच्छी प्रोफाइलिंग रेंज प्राप्त करने की अनुमति देता है। क्या किसी को पता है कि svm कैसे काम करना है? मुझे किस डेटासेट का उपयोग करना चाहिए? svm पर कोई विशेष पैरामीटर जो इसे कड़ी मेहनत करता है?आर

मैं कुछ कमांड कॉपी करता हूं जिनका उपयोग मैं प्रदर्शन का परीक्षण करने के लिए कर रहा हूं। शायद यह मैं यहाँ क्या कोशिश कर रहा हूँ प्राप्त करने के लिए सबसे उपयोगी और आसान है:

#loading libraries 
library(class) 
library(e1071) 
#I've been using golubEsets (more examples availables) 
library(golubEsets) 

#get the data: matrix 7129x38 
data(Golub_Train) 
n <- exprs(Golub_Train) 

#duplicate rows(to make the dataset larger) 
n<-rbind(n,n) 

#take training samples as a vector 
samplelabels <- as.vector([email protected]@data$ALL.AML) 

#calculate svm and profile it 
Rprof('svm.out') 
svmmodel1 <- svm(x=t(n), y=samplelabels, type='C', kernel="radial", cross=10) 
Rprof(NULL) 

मैं डाटासेट पंक्तियों और स्तंभों को डुप्लिकेट बढ़ती रखना लेकिन मैं स्मृति की सीमा के बजाय पहुंच गया svm कठिन काम करता है बनाने के ...

+1

प्रशिक्षण बिंदुओं को डुप्लिकेट करने से समस्या किसी भी कठिन नहीं होती है। चूंकि अधिकांश एसवीएम को पूरे डेटासेट को मुख्य मेमोरी में फ़िट करने की आवश्यकता होती है, इसलिए यह समझ में आता है कि अंत में आप स्मृति त्रुटियों को दबाते हैं। – karenu

+0

तो, मैं एक उचित बड़े डेटासेट के साथ कैसे प्रयास कर सकता हूं? क्या आप किसी भी उदाहरण का उपयोग कर सकते हैं जिसका मैं उपयोग कर सकता हूं? – Manolete

+0

हां, यदि आप मेरा जवाब देखते हैं, तो मैंने कई उपलब्ध डेटासेट सूचीबद्ध किए हैं। साथ ही, आपको सर्वोत्तम पैरामीटर खोजने के लिए पैरामीटर ट्यूनिंग करना चाहिए, आप पाएंगे कि जब आप उन पैरामीटरों की खोज करते हैं जो आपको सबसे सटीकता देते हैं तो कुछ लोगों की तुलना में ट्रेन करने में अधिक समय लगेगा। लेखक के libsvm से प्रैक्टिकल गाइड देखें: http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CFYQFjAA&url=http%3A%2F%2Fwww.csie.ntu .edu.tw% 2F ~ cjlin% 2Ppapers% 2Fguide% 2Fguide.pdf और ei = WtLhT46NO-jw0gG30pHVAw और usg = AFQjCNFol0McRktHC6gsBxKXqQMvmQUFeg – karenu

उत्तर

8

"काम कर रहे एसवीएम आउट" के संदर्भ में - एसवीएम काम "कड़ी मेहनत" एक जटिल मॉडल है जो आसानी से अलग नहीं किया जा सकता है, उच्च आयामता और एक बड़ा, घनत्व डेटासेट नहीं है।

  • डेटासेट आकार बढ़ता है (डेटा बिंदुओं की संख्या)
  • विरलता कम हो जाती है (कम शून्य)
  • परिमाणिकता बढ़ जाती है (विशेषताओं की संख्या)
  • गैर:

    SVM प्रदर्शन के साथ खराब हो रैखिक कर्नेल का उपयोग किया जाता है (और कर्नेल पैरामीटर कर्नेल मूल्यांकन अधिक जटिल बना सकते हैं)

परिवर्तनीय पैरामीटर

वहाँ पैरामीटर आप SVM में लंबा समय लग बनाने के लिए बदल सकते हैं कर रहे हैं। निस्संदेह पैरामीटर आपके द्वारा प्राप्त किए जाने वाले समाधान की गुणवत्ता को प्रभावित करते हैं और उपयोग करने के लिए कोई समझ नहीं ले सकते हैं।

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

अक्सर आप पैरामीटर खोज करते समय पाते हैं कि ऐसे पैरामीटर हैं जो सटीकता में कोई सराहनीय वृद्धि के साथ गणना समय बढ़ाएंगे।

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

डेटासेट का उपयोग करने के लिए:

UCI Machine Learning Repository डेटासेट का एक बड़ा स्रोत है।

MNIST handwriting recognition dataset उपयोग करने के लिए एक अच्छा है - आप तेजी से बड़े आकार के डेटासेट बनाने के लिए डेटा के सबसेट यादृच्छिक रूप से चुन सकते हैं। ध्यान रखें कि लिंक के डेटा में सभी अंक हैं, एसवीएम निश्चित रूप से बाइनरी है, इसलिए आपको डेटा को केवल दो अंकों तक कम करना होगा या किसी प्रकार का बहु-वर्ग एसवीएम करना होगा।

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

+0

आपके महान स्पष्टीकरण के लिए बहुत बहुत धन्यवाद। मैं इसकी सराहना करता हूं। मैंने यह देखने के लिए अपना प्रश्न अपडेट किया है कि यह – Manolete

+0

करेनू इनपुट इनपुट मैट्रिक्स के बारे में क्या मदद करता है? मैं वास्तव में यह समझने के लिए संघर्ष कर रहा हूं कि मुझे कब और क्यों इसे लागू करने की आवश्यकता है। मैंने वहां कई उदाहरण देखे हैं, और हर कोई एक अलग काम कर रहा है। मुझे कैसे पता चलेगा कि मुझे टी() इनपुट मैट्रिक्स को लागू करने की आवश्यकता है? – Manolete