रैखिक कर्नेल के साथ SVM में C का क्या प्रभाव है?


134

मैं वर्तमान में अपने डेटा को वर्गीकृत करने के लिए एक रैखिक कर्नेल के साथ एक एसवीएम का उपयोग कर रहा हूं। प्रशिक्षण सेट पर कोई त्रुटि नहीं है। मैंने पैरामीटर ( 10 - 5 , , 10 2 ) के लिए कई मान आज़माए । इससे परीक्षण सेट पर त्रुटि नहीं बदली।सी10-5,...,102

अब मुझे आश्चर्य है: यह एक त्रुटि है माणिक बाइंडिंग के कारण के लिए libsvmमैं (उपयोग कर रहा हूँ rb-libsvm ) या यह है सैद्धांतिक रूप से समझाने के योग्य ?

क्या पैरामीटर हमेशा क्लासिफायरियर के प्रदर्शन को बदलना चाहिए ?सी


सिर्फ एक टिप्पणी, एक जवाब नहीं: कोई भी कार्यक्रम जो दो शब्दों के योग को कम करता है, जैसे कि चाहिए (imho) आपको बता क्या दो शब्दों, अंत में कर रहे हैं, ताकि आप देख सकते हैं कि वे किस तरह संतुलन। (कंप्यूटिंग दो SVM मामले अपने आप पर मदद के लिए, एक अलग प्रश्न पूछ आप एक समस्या जो आपके जैसा पोस्ट कर सके कोशिश आप सबसे बुरी तरह वर्गीकृत अंक के कुछ ही देखा है।?)|w|2+सीΣξमैं,
Denis

जवाबों:


136

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


1
ठीक है, मैं समझता हूं कि सी उद्देश्य समारोह पर गर्भपात के प्रभाव को निर्धारित करता है। उद्देश्य समारोह एक नियमितीकरण अवधि और गर्भपात दर का योग है (देखें en.wikipedia.org/wiki/Support_vector_machine#Soft_margin )। जब मैं C बदलता हूं, तो इससे मेरे उद्देश्य फ़ंक्शन के न्यूनतम पर कोई प्रभाव नहीं पड़ता है। क्या इसका मतलब यह हो सकता है कि नियमितीकरण शब्द हमेशा बहुत छोटा होता है?
अल्फा

3
मेरा सुझाव होगा कि सी मानों की एक विस्तृत श्रृंखला की कोशिश करें, शायद 10 ^ [- 5, ..., 5], या अधिक अगर अनुकूलन आपके डेटासेट पर तेज़ है, तो यह देखने के लिए कि क्या आपको कुछ ऐसा मिलता है जो अधिक उचित दिखता है। प्रशिक्षण त्रुटि और न्यूनतम लागत दोनों में परिवर्तन होना चाहिए क्योंकि C विविध है। इसके अलावा, क्या आपके डेटा का पैमाना चरम है? सामान्य तौर पर, आपके डेटा को मापते समय एक इष्टतम C पैरामीटर बड़ा होना चाहिए, और इसके विपरीत, इसलिए यदि आपके पास सुविधाओं के लिए बहुत छोटे मान हैं, तो संभव C मानों के लिए बहुत बड़े मानों को शामिल करना सुनिश्चित करें। यदि उपरोक्त में से कोई भी मदद नहीं करता है, तो मुझे लगता है कि समस्या रूबी बाइंडिंग में है
मार्क शवर्स

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

2
... सकारात्मक और नकारात्मक वर्गों से संबंधित पैटर्न के लिए C के विभिन्न मूल्यों का उपयोग करके (जो प्रत्येक वर्ग से संबंधित पैटर्न के अनुपात को बदलने के लिए डेटा को फिर से मापने के लिए समान रूप से बराबर है)।
डिक्रान मार्सुपियल

2
मुझे लगता है कि यह संभव है कि एक बार जब आप C = 10 ^ 0 पर पहुंच जाएं तो SVM पहले से ही प्रशिक्षण डेटा के सभी को सही ढंग से वर्गीकृत कर रहा है, और कोई भी सपोर्ट वैक्टर बाध्य नहीं है (अल्फा बराबर C के बराबर है) उस स्थिति में C बड़ा बनता है। समाधान पर कोई प्रभाव नहीं।
डिक्रान मार्सुपियल

152

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

यहां छवि विवरण दर्ज करें

तो इनमें से कौन सा क्लासिफायर सर्वश्रेष्ठ है? यह इस बात पर निर्भर करता है कि आप जिस भविष्य के डेटा की भविष्यवाणी करेंगे, वह कैसा दिखता है, और सबसे अधिक बार आप निश्चित रूप से यह नहीं जानते हैं। यदि भविष्य का डेटा ऐसा दिखता है:

लार्ज सी बेस्ट है तब एक बड़े c मान का उपयोग करके सीखा गया क्लासिफायरियर सबसे अच्छा होता है।

दूसरी ओर, यदि भविष्य का डेटा ऐसा दिखता है:

कम सी सबसे अच्छा है तब निम्न सी मान का उपयोग करके सीखा गया क्लासिफायरर सर्वश्रेष्ठ है।

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

आप किसी मॉडल से किस तरह का डेटा सीखने की कोशिश कर रहे हैं? कितना डाटा? क्या हम इसे देख सकते हैं?


4
मैंने अब 3 साल से अधिक समय तक डेटा नहीं छुआ। यह बहुत ही उच्च आयामी और शोर है और मुझे इसे प्रकाशित करने की अनुमति नहीं है। इस सवाल का जवाब पहले ही दिया जा चुका है लेकिन मुझे लगता है कि आपका विज़ुअलाइज़ेशन बहुत अच्छा और सहज है।
अल्फा

बहुत बढ़िया। क्या आपके पास गामा मूल्य के लिए भी ऐसी व्याख्याएं हैं?
मॉन्स्टरमोरपीजी

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

@KentMuntheCaspersen C का आपका स्पष्टीकरण गलत नहीं है? यह "सांख्यिकीय शिक्षा का परिचय" पुस्तक में जो कहता है, उसके विपरीत है।
डॉयलाग

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

26

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

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

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


ठीक है, मुझे लगता है कि मैं अब सी का अर्थ समझता हूं। :)
अल्फा

2
लेकिन अगर सी एक नियमितीकरण पैरामीटर है, तो एक उच्च सी ओवरफिटिंग क्यों बढ़ जाती है, जब सामान्य रूप से बोलने वाले नियमितीकरण को अधिक सामान्य मॉडल बनाकर ओवरफिटिंग को कम करने के लिए किया जाता है?
user1603472

2
सी एक नियमितीकरण पैरामीटर है, लेकिन यह नियमित रूप से नियमितीकरण शब्द (मार्जिन बिट) के बजाय डेटा मिसफिट टर्म (सुस्त चर की राशि) से जुड़ा हुआ है, इसलिए सी का एक बड़ा मूल्य कम नियमितीकरण का मतलब है, बजाय अधिक। वैकल्पिक रूप से आप 1 / C के रूप में rgularisation पैरामीटर के सामान्य प्रतिनिधित्व को देख सकते हैं।
डिक्रान मार्सुपियल

8

C एक नियमितीकरण पैरामीटर है जो एक कम प्रशिक्षण त्रुटि और कम परीक्षण त्रुटि को प्राप्त करने के बीच व्यापार को नियंत्रित करता है जो डेटा को अनदेखा करने के लिए आपके क्लासिफायर को सामान्य करने की क्षमता है।

एक रैखिक एसवीएम के उद्देश्य समारोह पर विचार करें: न्यूनतम | w | ^ 2 + C a यदि आपका C बहुत बड़ा है, तो अनुकूलन एल्गोरिथ्म कम करने की कोशिश करेगा | w | जितना संभव हो उतना हाइपरप्लेन का नेतृत्व करना जो प्रत्येक प्रशिक्षण उदाहरण को सही ढंग से वर्गीकृत करने की कोशिश करता है। ऐसा करने से क्लासिफायर के सामान्यीकरण गुणों में नुकसान होगा। दूसरी ओर यदि आपका C बहुत छोटा है तो आप अपने उद्देश्य को बढ़ाने के लिए एक निश्चित स्वतंत्रता देते हैं | w | बहुत कुछ, जो बड़ी प्रशिक्षण त्रुटि को जन्म देगा।

नीचे दी गई तस्वीरें आपको इसकी कल्पना करने में मदद कर सकती हैं। रैखिक एसवीएम क्लासिफायर सी = 10000000 के साथरैखिक एसवीएम क्लासिफायर सी = 0.001 के साथ


मैं वास्तव में आपके भूखंडों को नहीं समझता। क्या आप इसे समझा सकते हैं?
अल्फा

1
@ अल्फ़ा: प्लॉट दिखाने का मेरा इरादा था: 1) यदि C बहुत बड़ा है (प्लॉट 1), तो आपका क्लासिफायर फिट हो जाएगा, अर्थात यह प्रत्येक प्रशिक्षण डेटा बिंदु को सटीक रूप से वर्गीकृत करने का प्रयास करेगा। प्लॉट 1 लगभग सभी प्रशिक्षण बिंदुओं को सही ढंग से वर्गीकृत किया गया है। 2) दूसरी तरफ यदि C बहुत कम है (प्लॉट 2), तो आपका क्लासिफायर फिट होगा। प्लॉट 2 अंडर फिट क्लासिफायर को दर्शाता है। यह अंक को उनके संबंधित वर्गों में अलग नहीं करता है। उम्मीद है की यह मदद करेगा।
देवर्षि

इसका मतलब है कि आपके x- और y- एक्सिस दो अलग-अलग विशेषताएं दिखाते हैं। लेबल "डेटासेट की लंबाई" और "योग का मतलब" थोड़ा भ्रमित कर रहे हैं?
अल्फ़ा

यह देखना दिलचस्प होगा कि सी के लिए सही विकल्प दोनों मामलों में कैसे मदद करता है।
अल्फा

2
मुझे लगता है कि यह देखना स्पष्ट नहीं है कि C = 10000000 एक बुरा विकल्प है और मुझे लगता है कि डाटासेट प्रदर्शित करने के लिए सही नहीं है। हो सकता है कि अलग करने वाले हाइपरप्लेन के गलत पक्ष पर केवल कुछ बाहरी लोगों के साथ एक डेटासेट बेहतर होगा?
अल्फ़ा

4

ऊपर दिए गए उत्तर उत्कृष्ट हैं। आपके प्रश्नों को ध्यान से पढ़ने के बाद, मैंने पाया कि 2 महत्वपूर्ण तथ्य हैं जिनकी हम अनदेखी कर सकते हैं।

  1. आप रैखिक कर्नेल का उपयोग कर रहे हैं
  2. "प्रशिक्षण सेट पर कोई त्रुटि नहीं है", क्योंकि आपका प्रशिक्षण डेटा रैखिक रूप से अलग है।

2 तथ्यों को देखते हुए, यदि C मान एक उचित सीमा के भीतर बदलता है, तो इष्टतम हाइपरप्लेन केवल मार्जिन (सपोर्ट वैक्टर द्वारा गठित गैप) के भीतर एक छोटी राशि द्वारा बेतरतीब ढंग से शिफ्टिंग करेगा।

सहज रूप से, मान लें कि प्रशिक्षण डेटा पर मार्जिन छोटा है, और / या मार्जिन के भीतर भी कोई परीक्षण डेटा बिंदु नहीं है, तो मार्जिन के भीतर इष्टतम हाइपरप्लेन के स्थानांतरण परीक्षण सेट की वर्गीकरण त्रुटि को प्रभावित नहीं करेगा।

फिर भी, यदि आप C = 0 सेट करते हैं, तो SVM त्रुटियों को नजरअंदाज कर देगा, और बस वजन (w) के वर्गों के योग को कम करने की कोशिश करेगा, शायद आपको परीक्षण सेट पर अलग-अलग परिणाम मिल सकते हैं।


2

C पैरामीटर का उपयोग आउटलेर्स को नियंत्रित करने के लिए किया जाता है - कम C का अर्थ है कि हम अधिक आउटलेयर की अनुमति दे रहे हैं, उच्च C का अर्थ है कि हम कम आउटलेर्स की अनुमति दे रहे हैं।


1

हाई सी (लागत) का मतलब है कि गर्भपात की लागत बढ़ जाती है। इसका मतलब यह है कि एक लचीली कर्नेल प्रशिक्षण सेट में गर्भनिरोधक टिप्पणियों से बचने के लिए अधिक कठोर हो जाएगी।

यदि कर्नेल को स्क्वीग्ली करना है तो नए डेटा पर भविष्यवाणी करते समय मॉडल अच्छी तरह से सामान्य नहीं होगा।

यदि कर्नेल को सीधा करना है तो नए डेटा पर भविष्यवाणी करते समय मॉडल अच्छी तरह से सामान्य नहीं होगा।

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