c# पीसीए के बिना मल्टीस्कलेस एसवीएम में सही विशेषताओं का पता लगाएं




machine-learning svm (2)

मैं एमएल या एसएमएम में एक विशेषज्ञ नहीं हूँ मैं एक आत्म शिक्षार्थी हूं हालांकि मेरे प्रोटोटाइप ने कुछ समान व्यावसायिक या शैक्षणिक सॉफ्टवेयर सटीकता में ओवर-निष्पादित किए, जबकि प्रशिक्षण समय कुछ प्रतियोगियों के दिनों और हफ्तों (!) के विपरीत लगभग 2 घंटे है

मेरी पहचान प्रणाली (जैव-कोशिकाओं में पैटर्न) सर्वोत्तम विशेषताएं चुनने के लिए निम्नलिखित दृष्टिकोण का उपयोग करती है:

1) सुविधाओं को निकालें और सभी वर्गों के लिए मतलब और विचलन की गणना करें 2) उन विशेषताओं का चयन करें, जहां वर्गों के साधन सबसे ज्यादा दूरी पर हैं और वेरिएंट न्यूनतम हैं 3) अनावश्यक विशेषताओं को निकालें - जो कक्षाओं के हिसाब से हिस्टोग्राम हैं, समान हैं

मेरे प्रोटोटाइप में मैं पैरामीट्रिक फीचर्स का उपयोग कर रहा हूं जैसे पैरामीटर व्यास, थ्रेसहोल्ड, आदि के साथ सुविधा "सर्कल"। प्रशिक्षण को स्क्रिप्ट्स द्वारा नियंत्रित किया जाता है, जिसमें ये विशेषताएं होती हैं जिसमें तर्क-रेंज का इस्तेमाल होता है। इसलिए सॉफ्टवेयर सभी संभव संयोजनों का परीक्षण करता है।

कुछ प्रशिक्षण समय अनुकूलन के लिए: सॉफ्टवेयर सुविधाओं को निकालने के लिए प्रति वर्ग 5 उदाहरणों के साथ शुरू होता है और दूसरी स्थिति को पूरा करते समय संख्या बढ़ जाती है।

शायद कुछ चरणों के लिए कुछ अकादमिक नाम हैं दुर्भाग्य से मैं उनसे अवगत नहीं हूँ, मैंने स्वयं "पहिया का आविष्कार" किया है

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

और अगर यह मायने रखता है, तो मैं सी # में एकॉर्ड में लिख रहा हूं। धन्यवाद !


एक बहु-वर्ग एसवीएम में जो एक-एक-एक रणनीति का उपयोग करता है, समस्या को छोटे बाइनरी समस्याओं का एक समूह में विभाजित किया गया है। उदाहरण के लिए, यदि आपके पास तीन संभावित कक्षाएं हैं, तो एक-एक-एक रणनीति का उपयोग करने की आवश्यकता है (n (n-1)) / n बाइनरी क्लासफ़ीयर। आपके उदाहरण में, यह होगा

(n(n-1))/n = (3(3-1))/2 = (3*2)/2 = 3

उनमें से प्रत्येक निम्नलिखित समस्याओं में विशेष होगा:

  • कक्षा 1 और कक्षा 2 के बीच भेद (चलो यह svm एक फोन)
  • कक्षा 1 और कक्षा 3 के बीच भेद करना (चलो इसे एसवीएम बी कहते हैं )
  • कक्षा 2 और कक्षा 3 के बीच भेद करना (चलो इसे एसवीएम सी कहते हैं )

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

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

चूंकि जीत-सबसे-अधिक-बार संस्करण समझने के लिए सरल है, इसलिए मैं डीडीएजी के डिफ़ॉल्ट दृष्टिकोण के बारे में कुछ और समझाऊंगा।

एसाइकिक ग्राफ़ का निर्देशन करने का निर्णय

इस एल्गोरिदम में, हम प्रत्येक एसवीएम का परीक्षण करते हैं और प्रत्येक दौर में खो जाने वाले वर्ग को समाप्त करते हैं। इसलिए उदाहरण के लिए, एल्गोरिदम सभी संभव वर्गों के साथ शुरू होता है:

Candidate classes: [1, 2, 3]

अब यह एसवीएम एक को वर्गीकृत करने के लिए एक्स को पूछता है, यह 2 वर्ग के लिए फैसला करता है। इसलिए, कक्षा 1 खो गया और इसे अब और परीक्षणों में नहीं माना जाता है:

Candidate classes: [2, 3]

अब यह वर्ग को वर्गीकृत करने के लिए svm b पूछता है, यह 2 वर्ग के लिए फैसला करता है। इसलिए, वर्ग 3 खो गया और अब और परीक्षणों में नहीं माना जाता है:

Candidate classes: [2]

अंतिम उत्तर इस प्रकार है 2

यह पता लगाया जा रहा है कि कौन से विशेषताएं सबसे उपयोगी हैं

अब, चूंकि एक-एक-एक एसवीएम (एन (एन -1) / 2) द्विआधारी समस्याओं में विघटित हो रहा है, वहीं सबसे महत्वपूर्ण बातों का विश्लेषण करने के लिए सबसे सरल तरीका है कि प्रत्येक द्विआधारी समस्या को अलग से विचार कर। दुर्भाग्यवश, विश्व स्तर पर यह निर्धारित करना मुश्किल हो सकता है कि पूरी समस्या के लिए सबसे महत्वपूर्ण कौन सा महत्वपूर्ण है, लेकिन यह पता लगाना संभव होगा कि कक्षा 1 और 2, या कक्षा 1 और 3 या कक्षा 2 और 3 के बीच किस प्रकार भेदभाव करना सबसे महत्वपूर्ण है ।

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

वैसे, शायद आप एक विशेषतावादी चयन करने के लिए उच्च सी के साथ एल 1- नियमितकरण का उपयोग कर उपस्कर प्रतिगमन समर्थन वेक्टर मशीनों में से एक की कोशिश करने में रुचि रख सकते हैं:

// Create a new linear machine
var svm = new SupportVectorMachine(inputs: 2);

// Creates a new instance of the sparse logistic learning algorithm
var smo = new ProbabilisticCoordinateDescent(svm, inputs, outputs)
{
    // Set learning parameters
    Complexity = 100,
};