(मुझे यकीन है कि मैंने इसे पहले से ही कुछ उत्तर में लिखा था - लेकिन अभी यह नहीं मिल सकता है। यदि कोई भी उस उत्तर में ठोकर खाता है, तो कृपया लिंक करें)। मुझे यहां 2 अलग-अलग दृष्टिकोण दिखाई देते हैं, जो मुझे लगता है कि दोनों समझदार हैं।
लेकिन पहले कुछ शब्दावली:
- मेरे लिए एक लागू क्षेत्र से आ रहा है, (फिट / प्रशिक्षित) मॉडल तैयार है। यानी मॉडल में नए डेटा के लिए भविष्यवाणियों को उत्पन्न करने के लिए आवश्यक सभी जानकारी शामिल है । इस प्रकार, मॉडल में हाइपरपरमेटर्स भी शामिल हैं । जैसा कि आप देखेंगे, इस दृष्टिकोण को करीब से नीचे 2 दृष्टिकोण से संबंधित है।
- OTOH, मेरे अनुभव में प्रशिक्षण एल्गोरिथ्म निम्नलिखित अर्थों में अच्छी तरह से परिभाषित नहीं है: (फिट) मॉडल प्राप्त करने के लिए, न केवल - चलो इसे "प्राथमिक फिटिंग" कहते हैं - "सामान्य" मॉडल मापदंडों को करने की आवश्यकता है, लेकिन यह भी हाइपरपरमेटर्स को ठीक करने की आवश्यकता है। मेरे आवेदन के दृष्टिकोण से, मापदंडों और हाइपरपरमर्स के बीच वास्तव में बहुत अंतर नहीं है: दोनों मॉडल का हिस्सा हैं , और प्रशिक्षण के दौरान अनुमान / निर्णय लेने की आवश्यकता है।
मुझे लगता है कि उनके बीच का अंतर नए प्रशिक्षण एल्गोरिदम को विकसित करने वाले किसी व्यक्ति के बीच के अंतर से संबंधित है, जो आमतौर पर कुछ स्टीयरिंग मापदंडों ( हाइपरपरमेटर्स) के साथ प्रशिक्षण एल्गोरिदम के एक वर्ग का वर्णन करता है) जो आवेदन / डोमेन ज्ञान के बिना तय करने के लिए (या कम से कम उन्हें कैसे तय / अनुमानित किया जाना चाहिए) तय करने के लिए मुश्किल / असंभव हैं।
दृष्टिकोण 1: स्थिर अनुकूलन परिणामों की आवश्यकता होती है
इस दृष्टिकोण के साथ, "मॉडल प्रशिक्षण" "सामान्य" मॉडल मापदंडों की फिटिंग है, और हाइपरपरमेटर्स दिए गए हैं। एक आंतरिक उदा क्रॉस क्रॉस सत्यापन हाइपरपरमीटर अनुकूलन का ख्याल रखता है।
जिसका हाइपरपरमेटर सेट चुना जाना चाहिए, उसकी दुविधा को हल करने के लिए महत्वपूर्ण कदम / धारणा यहां है, अनुकूलन को स्थिर करने की आवश्यकता है । सत्यापन के प्रयोजनों के लिए क्रॉस मान्यता यह मानती है कि सभी सरोगेट मॉडल अंतिम मॉडल (पूरे डेटा सेट पर लागू एक ही प्रशिक्षण एल्गोरिथ्म द्वारा प्राप्त) के समान हैं (उन्हें स्वयं के साथ-साथ अंतिम मॉडल के बराबर) के रूप में व्यवहार करने की अनुमति देने के लिए। यदि यह धारणा टूट जाती है और
सरोगेट मॉडल अभी भी आपस में बराबर (या समतुल्य) हैं लेकिन अंतिम मॉडल के लिए नहीं, हम क्रॉस वेलिडेशन के प्रसिद्ध निराशावादी पूर्वाग्रह के बारे में बात कर रहे हैं।
अगर सरोगेट मॉडल भी एक दूसरे के बराबर / बराबर नहीं है, तो हमें अस्थिरता की समस्या है ।
इनर लूप के अनुकूलन परिणामों के लिए इसका मतलब है कि यदि अनुकूलन स्थिर है, तो हाइपरपरमेटर्स चुनने में कोई संघर्ष नहीं है । और अगर आंतरिक क्रॉस सत्यापन परिणामों में काफी भिन्नता देखी जाती है, तो अनुकूलन स्थिर नहीं है । अस्थिर प्रशिक्षण स्थितियों में निर्णय लेने की तुलना में कहीं अधिक बदतर समस्याएं हैं जो हाइपरपैरेट का चयन करने के लिए सेट करता है, और मैं वास्तव में उस मामले में वापस जाने और मॉडलिंग की प्रक्रिया शुरू करने की सलाह दूंगा।
हालांकि, इसका एक अपवाद है, हालांकि: व्यावहारिक उद्देश्यों के लिए समान प्रदर्शन करने वाले अनुकूलन में कई स्थानीय मिनीमा हो सकते हैं। उन्हें स्थिर रखने के लिए चुनाव की आवश्यकता भी एक अनावश्यक मजबूत आवश्यकता हो सकती है - लेकिन मुझे नहीं पता कि इस दुविधा से बाहर कैसे निकलें।
ध्यान दें कि यदि सभी मॉडल एक ही विजेता पैरामीटर सेट नहीं देते हैं, तो आपको बाहरी लूप अनुमानों का उपयोग यहां सामान्यीकरण त्रुटि के रूप में नहीं करना चाहिए:
- पी
- लेकिन जब तक कोई निर्णय शामिल नहीं होता है क्योंकि सभी विभाजन समान मापदंडों को प्राप्त करते हैं, तो यह बाहरी लूप में स्वतंत्रता को तोड़ देगा: प्रत्येक विभाजन का परीक्षण डेटा पहले ही निर्णय में प्रवेश कर जाता है कि कौन सा पैरामीटर सेट जीतता है क्योंकि यह अन्य सभी विभाजन में प्रशिक्षण डेटा था और इस प्रकार उपयोग किया गया मापदंडों का अनुकूलन करने के लिए।
दृष्टिकोण 2: मॉडल प्रशिक्षण के एक भाग के रूप में हाइपरपैरेट ट्यूनिंग का इलाज करें
यह दृष्टिकोण "प्रशिक्षण एल्गोरिथ्म डेवलपर" के दृष्टिकोण को पूरा करता है और प्रशिक्षण एल्गोरिथ्म के उपयोगकर्ता को लागू करता है।
प्रशिक्षण एल्गोरिथ्म डेवलपर एक "नग्न" प्रशिक्षण एल्गोरिथ्म प्रदान करता है model = train_naked (trainingdata, hyperparameters)
। के रूप में लागू उपयोगकर्ता की जरूरत है tunedmodel = train_tuned (trainingdata)
जो भी hyperparameters को ठीक करने का ख्याल रखता है।
train_tuned
नग्न प्रशिक्षण एल्गोरिथ्म के चारों ओर एक क्रॉस सत्यापन-आधारित ऑप्टिमाइज़र लपेटकर उदाहरण के लिए लागू किया जा सकता है train_naked
।
train_tuned
फिर किसी भी अन्य प्रशिक्षण एल्गोरिथ्म की तरह इस्तेमाल किया जा सकता है जिसे हाइपरपरमीटर इनपुट की आवश्यकता नहीं होती है, उदाहरण के लिए इसके आउटपुट tunedmodel
को सत्यापन पार किया जा सकता है। अब हाइपरपरमेटर्स को उनकी स्थिरता के लिए जांचा जाता है, जैसे "सामान्य" मापदंडों को क्रॉस सत्यापन के मूल्यांकन के भाग के रूप में स्थिरता के लिए जांचा जाना चाहिए।
यह वास्तव में आप क्या करते हैं और नेस्टेड क्रॉस सत्यापन में मूल्यांकन करते हैं यदि आप अपने व्यक्तिगत पैरामीटर सेटों की परवाह किए बिना सभी विजेता मॉडल का औसत प्रदर्शन करते हैं।
क्या फर्क पड़ता है?
हम संभवतः उन 2 दृष्टिकोणों को लेते हुए विभिन्न अंतिम मॉडलों के साथ समाप्त होते हैं:
- दृष्टिकोण 1 में अंतिम मॉडल होगा
train_naked (all data, hyperparameters from optimization)
- जबकि एप्रोच 2 का उपयोग होगा
train_tuned (all data)
और - जैसा कि बड़े डेटा सेट पर फिर से हाइपरपैरेट ऑप्टिमाइज़ेशन चलाता है - यह हाइपरपरमीटर के एक अलग सेट के साथ समाप्त हो सकता है।
लेकिन फिर से वही तर्क लागू होता है: अगर हम पाते हैं कि अंतिम मॉडल में क्रॉस सत्यापन सरोगेट मॉडल से काफी अलग पैरामीटर हैं, तो यह धारणा 1 का उल्लंघन है। इसलिए आईएमएचओ, फिर से हमारे पास एक संघर्ष नहीं है, बल्कि एक जांच है कि क्या हमारी (निहित) धारणाएं उचित हैं। और अगर वे नहीं हैं, तो हमें वैसे भी उस अंतिम मॉडल के प्रदर्शन का एक अच्छा अनुमान होने पर बहुत अधिक दांव नहीं लगाना चाहिए।
मुझे आभास है (सीवी पर यहाँ भी इसी तरह के प्रश्नों / भ्रमों की संख्या को देखने से) कि बहुत से लोग नेस्टेड क्रॉस वेलिडेशन एप्रोच दृष्टिकोण के बारे में सोचते हैं। लेकिन सामान्यीकरण की त्रुटि का अनुमान आमतौर पर एप्रोच 2 के अनुसार लगाया जाता है, इसीलिए यह तरीका है अंतिम मॉडल के रूप में अच्छी तरह से।
आइरिस उदाहरण
सारांश: अनुकूलन मूल रूप से व्यर्थ है। उपलब्ध नमूना आकार यहां किसी भी पैरामीटर सेट के प्रदर्शन के बीच अंतर की अनुमति नहीं देता है।
आवेदन के दृष्टिकोण से, हालांकि, निष्कर्ष यह है कि यह कोई फर्क नहीं पड़ता कि आपके द्वारा चुने गए 4 पैरामीटर में से कौन सा है - जो कि सभी बुरी खबरें नहीं हैं: आपको मापदंडों का तुलनात्मक रूप से स्थिर पठार मिला। ट्यून किए गए मॉडल के उचित नेस्टेड सत्यापन का लाभ यहां मिलता है: जब आप यह दावा करने में सक्षम नहीं होते हैं कि यह इष्टतम मॉडल है, तो आप अभी भी दावा करने में सक्षम हैं कि दृष्टिकोण 2 का उपयोग करके पूरे डेटा पर बनाया गया मॉडल होगा लगभग 97% सटीकता (150 परीक्षण मामलों में से 145 सही के लिए 95% विश्वास अंतराल: 92 - 99%)
ध्यान दें कि दृष्टिकोण 1 भी उतना दूर नहीं है जितना कि ऐसा लगता है - नीचे देखें: संबंधों के कारण आपका अनुकूलन गलती से एक स्पष्ट रूप से स्पष्ट "विजेता" से चूक गया (यह वास्तव में नमूना आकार की समस्या का एक और बहुत बड़ा लक्षण है)।
हालांकि मैं SVM में इतना गहरा नहीं हूं कि "सी" 1 को "अच्छा" चुना जा सके, मैं यहां अधिक प्रतिबंधात्मक रैखिक कर्नेल के साथ जाऊंगा। साथ ही, जैसा कि आपने ऑप्टिमाइज़ेशन किया था , विजेता पैरामीटर सेट को चुनने में कुछ भी गलत नहीं है, भले ही आप जानते हों कि सभी पैरामीटर सेट व्यावहारिक रूप से समान प्रदर्शन की ओर ले जाते हैं।
हालांकि, भविष्य में, इस बात पर विचार करें कि क्या आपका अनुभव किसी ऐसे प्रदर्शन की तुलना करता है जिससे आप उम्मीद कर सकते हैं और मोटे तौर पर कौन सा मॉडल एक अच्छा विकल्प होगा। फिर उस मॉडल का निर्माण करें (मैन्युअल रूप से तय किए गए हाइपरपरमेटर्स के साथ) और उसके प्रदर्शन के लिए एक आत्मविश्वास अंतराल की गणना करें। यह तय करने के लिए उपयोग करें कि क्या अनुकूलन करने की कोशिश करना समझदारी है। (मैं जोड़ सकता हूं कि मैं ज्यादातर डेटा के साथ काम कर रहा हूं जहां 10 और स्वतंत्र मामले मिलना आसान नहीं है - यदि आप बड़े स्वतंत्र नमूना आकार वाले क्षेत्र में हैं, तो चीजें आपके लिए बहुत बेहतर हैं)
दीर्घ संस्करण:
उदाहरण के लिए iris
डेटा सेट पर परिणाम । iris
150 मामले हैं, 2 x 2 मापदंडों (2 गुठली, जुर्माना के लिए परिमाण के 2 आदेश C
) के ग्रिड के साथ एसवीएम पर विचार किया जाता है।
इनर लूप में 129 (2x) और 132 (6x) केस होते हैं। "सबसे अच्छा" पैरामीटर सेट सी = 1. दोनों के साथ रैखिक या आरबीएफ कर्नेल के बीच अनिर्धारित है। हालांकि, आंतरिक परीक्षण सटीकता सभी हैं (हमेशा खोने सी = 10 सहित) 94 - 98.5% सटीकता के साथ। एक विभाजन में हमारे पास सबसे बड़ा अंतर 3 बनाम 8 त्रुटियों के लिए आरबीएफ के साथ सी = 1 बनाम 10 है।
वहाँ कोई रास्ता नहीं यह एक महत्वपूर्ण अंतर है। मुझे नहीं पता कि सीवी में अलग-अलग मामलों के लिए भविष्यवाणियां कैसे निकाली जाती हैं, लेकिन यह मानते हुए भी कि 3 त्रुटियां साझा की गईं, और C = 10 मॉडल ने अतिरिक्त 5 त्रुटियां बनाईं:
> table (rbf1, rbf10)
rbf10
rbf1 correct wrong
correct 124 5
wrong 0 3
> mcnemar.exact(rbf1, rbf10)
Exact McNemar test (with central confidence intervals)
data: rbf1 and rbf10
b = 5, c = 0, p-value = 0.0625
alternative hypothesis: true odds ratio is not equal to 1
याद रखें कि 2 x 2 ग्रिड में 6 युग्मक तुलनाएं हैं, इसलिए हमें कई तुलनाओं के लिए भी सही करने की आवश्यकता होगी।
दृष्टिकोण १
4 में से 3 बाहरी विभाजन में जहां रैखिक कर्नेल के ऊपर rbf "जीता" है, उनके पास वास्तव में एक ही अनुमानित सटीकता थी (मुझे लगता है कि संबंधों के मामले में मिनट पहले उपयुक्त सूचकांक देता है)।
ग्रिड को params = {'kernel':['linear', 'rbf'],'C':[1,10]}
पैदावार में बदलना
({'kernel': 'linear', 'C': 1}, 0.95238095238095233, 0.97674418604651159)
({'kernel': 'rbf', 'C': 1}, 0.95238095238095233, 0.98449612403100772)
({'kernel': 'linear', 'C': 1}, 1.0, 0.97727272727272729)
({'kernel': 'linear', 'C': 1}, 0.94444444444444442, 0.98484848484848486)
({'kernel': 'linear', 'C': 1}, 0.94444444444444442, 0.98484848484848486)
({'kernel': 'linear', 'C': 1}, 1.0, 0.98484848484848486)
({'kernel': 'linear', 'C': 1}, 1.0, 0.96212121212121215)
दृष्टिकोण 2:
यहाँ, clf
आपका अंतिम मॉडल है। साथ random_state = 2
, सी के साथ RBF = 1 जीत:
In [310]: clf.grid_scores_
[...snip warning...]
Out[310]:
[mean: 0.97333, std: 0.00897, params: {'kernel': 'linear', 'C': 1},
mean: 0.98000, std: 0.02773, params: {'kernel': 'rbf', 'C': 1},
mean: 0.96000, std: 0.03202, params: {'kernel': 'linear', 'C': 10},
mean: 0.95333, std: 0.01791, params: {'kernel': 'rbf', 'C': 10}]
(5 बार, 6 बार में 1 में 1 के बारे में होता है linear
और rbf
साथ C = 1
रैंक 1 पर बंधे होते हैं)