SVM के सर्वोत्तम रूपक खोजने के लिए तेज़ विधि (जो ग्रिड खोज की तुलना में तेज़ है)


17

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

Libsvm प्रलेखन (और कई अन्य किताबें जो मैंने पढ़ी हैं) इन मापदंडों को खोजने के लिए ग्रिड खोज का उपयोग करने का सुझाव देती है - इसलिए मैं मूल रूप से एक निश्चित सेट से इन मापदंडों के प्रत्येक संयोजन के लिए मॉडल को प्रशिक्षित करता हूं और सबसे अच्छा मॉडल चुनता हूं।

क्या इष्टतम (या पास इष्टतम) रूपक खोजने के लिए कोई बेहतर तरीका है? मेरे लिए यह मुख्य रूप से अभिकलन समय की बात है - इस समस्या की एक ग्रिड खोज में लगभग दो घंटे लगते हैं (बाद में मैंने कुछ अनुकूलन किए)।

ग्रिड खोज के पेशेवरों:

  • इसे आसानी से समानांतर किया जा सकता है - यदि आपके पास 20 सीपीयू हैं तो यह 20 गुना तेजी से चलेगा, अन्य तरीकों को समानांतर करना कठिन है
  • आप मेटापरमीटर स्थान के बड़े हिस्सों की जांच करते हैं, इसलिए यदि कोई अच्छा समाधान है तो आप इसे पाएंगे।

जवाबों:


10

ग्रिड खोज का नकारात्मक पक्ष यह है कि रनटाइम प्रत्येक पैरामीटर के लिए विकल्पों की संख्या के उत्पाद के रूप में तेजी से बढ़ता है।

यहाँ आपके प्रश्न से संबंधित एलेक्स स्मोला के ब्लॉग में एक प्रविष्टि है

यहाँ एक उद्धरण है:

[...] उठाएं, अपने डेटासेट से यादृच्छिक रूप से 1000 जोड़े (x, x ') कहें, ऐसी सभी जोड़ियों की दूरी की गणना करें और माध्यिका, 0.1 और 0.9 का मान लें। अब λ को इन तीनों संख्याओं में से किसी एक पर उलटा लाइए। थोड़ा सा क्रॉसवैलिडेशन के साथ आप यह पता लगा लेंगे कि तीन में से कौन सा सबसे अच्छा है। ज्यादातर मामलों में आपको और खोज करने की आवश्यकता नहीं होगी।

मैंने खुद यह कोशिश नहीं की है, लेकिन यह एक तरह का वादा करता है।


यह प्रश्न कैसे संबंधित है? सवाल एक SVM मॉडल (एक त्वरित तरीके से) में सर्वोत्तम मापदंडों को खोजने के बारे में है।
रोरोनोआ जोरो

2
@ रोरोनो जोरो: और इसलिए इसका जवाब है। यह बता रहा है कि 3 में रेडियल आधार कार्यों के लिए एसवीएम (सी और \ _ लैम्ब्डा पर आधारित) के मापदंडों को कैसे खोजना है। समय विरोध के रूप में। \ Gammas || Cs जैसे यह ग्रिड खोज के मामले में किया जाता है।
carlosdc

बस यह स्पष्ट करने के लिए कि मैं अनुमानी को समझ रहा हूं, मूल रूप से आप सिर्फ यादृच्छिक रूप से SVM ​​को प्रशिक्षित करने के लिए डेटासेट से 1000 डेटा बिंदुओं को खींचते हैं, फिर .1, .9 मात्राओं और माध्यिका के व्युत्क्रम को लेते हैं और वे अच्छे होने की संभावना है। एक उपयुक्त गामा के लिए उम्मीदवार?
टॉम्स

6

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

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

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


5

मैं उपयोग करता हूं खोज मापदंडों के लिए नकली annealing का करता

व्यवहार कुछ मापदंडों द्वारा शासित होता है:

  • k बोल्ट्जमैन का स्थिरांक है।
  • T_max आपका शुरुआती तापमान है
  • T_min आपकी समाप्ति सीमा है।
  • mu_T( μ) आप तापमान कितना कम करते हैं (T->T/μ )
  • i प्रत्येक तापमान पर पुनरावृत्तियों की संख्या है
  • zएक कदम आकार है - आप यह निर्धारित करते हैं कि वास्तव में इसका क्या मतलब है। मैं बेतरतीब ढंग से भीतर चला जाता हूं old*(1±z)
  1. एक प्रारंभिक बिंदु (पैरामीटर मानों का सेट) लें।
  2. इसके लिए एक ऊर्जा प्राप्त करें (यह आपके डेटा में कितनी अच्छी तरह फिट बैठता है? मैं ची-स्क्वेर्ड वैल्यू का उपयोग करता हूं)।
  3. एक यादृच्छिक दिशा में देखें ("एक कदम उठाएं")।
    • यदि ऊर्जा आपके वर्तमान बिंदु से कम है, तो वहां जाएं।
    • यदि यह अधिक है, तो एक संभावना के साथ वहां जाएं p = e^{-(E_{i+1} - E_i)/(kT)}
  4. जब तक आप हिट न करें, तब तक T->T/μहर iपुनरावृत्तियों को कभी-कभी कम करें T_min

मापदंडों के साथ थोड़ा सा खेलें और आपको एक ऐसा सेट खोजने में सक्षम होना चाहिए जो अच्छी तरह से और तेजी से काम करता हो।

और GNU साइंटिफिक लाइब्रेरी में नकली एनालिंग शामिल है।


4

अगर किसी को यहां रुचि है, तो इस विषय पर मेरे कुछ विचार हैं:

  • जैसा कि @tdc ने सुझाव दिया है कि मैं मोटे / ठीक ग्रिड खोज कर रहा हूं। यह दो समस्याओं का परिचय देता है:
    • ज्यादातर मामलों में मुझे अच्छे मेटापैरमीटर के सेट मिलेंगे जिनमें बेतहाशा अलग-अलग पैरामीटर्स होते हैं --- मैं इसे इस तरह से व्याख्या कर रहा हूं कि ये पैरामीटर इष्टतम समाधान हैं, लेकिन यह सुनिश्चित करने के लिए कि मुझे इन सभी अच्छे मापदंडों के पास सभी ठीक ग्रिड की जांच करनी चाहिए ( यह बहुत समय लगेगा), इसलिए अब मैं केवल सट्टेबाजों के आस-पास के सेटों के पड़ोस की जांच करता हूं।
    • ज्यादातर मामलों में ठीक खोज एसवीएम प्रदर्शन को नहीं बढ़ाती है (यह इस तथ्य के कारण हो सकता है कि मैं मोटे ग्रिड से सर्वश्रेष्ठ बिंदु के केवल नाइटबोरहुड की जांच कर रहा हूं।
  • मैंने देखा कि अधिकांश कंप्यूटिंग समय मेटापेयरमीटर सेट पर व्यतीत होता है, जो अच्छे परिणाम नहीं देगा, उदाहरण के लिए: अधिकांश मेटापैरमीटर सेट 15 सेकंड से कम में गणना करेंगे (और उनमें से अधिकांश में त्रुटि दर 15% है), और कुछ में 15 मिनट लगते हैं। और इनमें से अधिकांश में त्रुटि दर बड़ी है कि 100%)। इसलिए ग्रिड खोज करते समय मैं ऐसे बिंदुओं को मारता हूं जो गणना करने के लिए 30 से अधिक सेकंड लेते हैं और मान लेते हैं कि उनके पास अनंत त्रुटि थी।
  • मैं मल्टीप्रोसेसिंग का उपयोग करता हूं (जो काफी सरल है)

1

यदि कर्नेल रेडियल है, तो आप उचित प्राप्त करने के लिए इस अनुमानी का उपयोग कर सकते हैंσ - सी अनुकूलन तो रास्ता आसान है।


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