ग्रिडसर्च के आउटपुट का उपयोग कैसे करें?


23

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

मेरी कार्यप्रणाली यह है:

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

यह इस स्तर पर है कि मैं अजीब व्यवहार देखता हूं और आगे बढ़ने के लिए अनिश्चित हूं। क्या मैं ग्रिड खोज से .best_estimator_ लेता हूं और ग्रिड खोज से 'इष्टतम' आउटपुट के रूप में इसका उपयोग करता हूं , और इस अनुमानक का उपयोग करके भविष्यवाणी करता हूं ? अगर मैं ऐसा करता हूं तो मुझे पता चलता है कि स्टेज 3 मेट्रिक्स आमतौर पर बहुत कम होते हैं, अगर मैं बस टेस्ट सेट पर सभी प्रशिक्षण डेटा और परीक्षण पर प्रशिक्षण देता हूं। या, क्या मैं नए अनुमानक के रूप में केवल आउटपुट GridSearchCV ऑब्जेक्ट लेता हूं ? यदि मैं ऐसा करता हूं तो मुझे अपने चरण 3 मेट्रिक्स के लिए बेहतर अंक मिलते हैं, लेकिन यह इच्छित क्लासिफायरियर (जैसे एक यादृच्छिक वन) के बजाय एक GridSearchCV ऑब्जेक्ट का उपयोग करना अजीब लगता है ...

संपादित करें: तो मेरा सवाल यह है कि लौटी हुई ग्रिडसर्चकॉवी वस्तु और .best_estimator_ विशेषता के बीच क्या अंतर है? मुझे इनमें से कौन सा एक और मैट्रिक्स की गणना के लिए उपयोग करना चाहिए? क्या मैं इस आउटपुट को एक नियमित क्लासिफायर की तरह उपयोग कर सकता हूं (जैसे कि भविष्यवाणी का उपयोग करना), वरना मुझे इसका उपयोग कैसे करना चाहिए?

जवाबों:


27

दूर जाने और मेरे सवालों को संतुष्ट करने वाले उत्तरों को खोजने का फैसला किया, और किसी और को आश्चर्यचकित करने के लिए उन्हें यहां लिखें।

.Best_estimator_ विशेषता निर्दिष्ट मॉडल प्रकार का एक उदाहरण है, जिसमें param_grid से दिए गए मापदंडों का 'सर्वोत्तम' संयोजन है। यह उदाहरण उपयोगी है या नहीं, यह निर्भर करता है कि क्या रिफिट पैरामीटर सही पर सेट है (यह डिफ़ॉल्ट रूप से है)। उदाहरण के लिए:

clf = GridSearchCV(estimator=RandomForestClassifier(), 
                    param_grid=parameter_candidates,
                    cv=5,
                    refit=True,
                    error_score=0,
                    n_jobs=-1)

clf.fit(training_set, training_classifications)
optimised_random_forest = clf.best_estimator_
return optimised_random_forest

एक randomForestClassifier वापस आ जाएगी। प्रलेखन से यह सब बहुत स्पष्ट है । दस्तावेज़ से स्पष्ट नहीं है कि अधिकांश उदाहरण विशेष रूप से .best_estimator_ का उपयोग क्यों नहीं करते हैं और इसके बजाय यह करते हैं:

clf = GridSearchCV(estimator=RandomForestClassifier(), 
                    param_grid=parameter_candidates,
                    cv=5,
                    refit=True,
                    error_score=0,
                    n_jobs=-1)

clf.fit(training_set, training_classifications)
return clf

यह दूसरा दृष्टिकोण एक GridSearchCV उदाहरण देता है, GridSearchVV की सभी घंटियाँ और सीटी जैसे कि .best_estimator_, .best_params, इत्यादि, जो स्वयं एक प्रशिक्षित एम्पलीफायर की तरह उपयोग किया जा सकता है:

Optimised Random Forest Accuracy:  0.916970802919708
[[139  47]
 [ 44 866]]
GridSearchCV Accuracy:  0.916970802919708
[[139  47]
 [ 44 866]]

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


आपके पोस्ट @Dan के लिए धन्यवाद, यह बहुत मददगार है। मैं आपसे एक स्पष्टीकरण मांगना चाहता था। बाद के मामले में, अगर मैंने किया है refit=Falseतो clf.fitसबसे अच्छा क्लासिफायर के साथ नहीं किया जाएगा?
पूएट मौदित

@PoeteMaudit रिफिट पैरामीटर, ग्रिडसर्च सीवी फ़ंक्शन को सबसे अच्छे मापदंडों को लेने के लिए कहता है, और पूरे डेटासेट पर उन मापदंडों का उपयोग करके मॉडल को पुनः प्राप्त करता है। यदि refit = गलत है, तो प्रलेखन के अनुसार best_estimator उपलब्ध नहीं है: scikit-learn.org/stable/modules/generated/…
Dan Carter

0

GridSearchCV आपको हाइपर-मापदंडों को ट्यून करने के लिए ग्रिड खोज प्रस्तावक के साथ एक अनुमानक को संयोजित करने देता है। विधि ग्रिड खोज से इष्टतम पैरामीटर चुनती है और उपयोगकर्ता द्वारा चयनित अनुमानक के साथ इसका उपयोग करती है। GridSearchCV क्लासिफायरियर से विधियाँ प्राप्त करता है, इसलिए हाँ, आप .Score, .predict, आदि का उपयोग कर सकते हैं। GridSearchCV इंटरफ़ेस के माध्यम से सीधे तरीके। यदि आप ग्रिड खोज द्वारा पहचाने गए सर्वोत्तम हाइपर-मापदंडों को निकालना चाहते हैं, तो आप .best_params_ का उपयोग कर सकते हैं और यह सर्वश्रेष्ठ हाइपर-पैरामीटर लौटाएगा। आप इस हाइपर-पैरामीटर को अपने अनुमानक को अलग से पास कर सकते हैं।

.Predict का उपयोग करने से सीधे .best_param_ के माध्यम से सबसे अच्छा हाइपर-पैरामीटर प्राप्त करने और फिर इसे अपने मॉडल में उपयोग करने के समान परिणाम प्राप्त होंगे। ग्रिड खोज के रेखांकित कार्यों को समझकर हम देख सकते हैं कि ऐसा क्यों है।


ग्रिड खोज

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

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

हम k को कैसे चुनते हैं?

कुछ लोग बस डेटा प्रकार के पिछले अध्ययनों के आधार पर सिफारिशों के साथ जाते हैं। अन्य लोग ग्रिड खोज का उपयोग करते हैं। यह विधि यह निर्धारित करने में सक्षम होगी कि कौन सा k आपके डेटा के लिए उपयोग करने के लिए इष्टतम है।

यह कैसे काम करता है?

[1,2,3,,10]

यह परीक्षण डेटा का उपयोग नहीं करने के सिद्धांतों के खिलाफ जाता है !!

nnn-1n

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


हाय जाह, यह एक अच्छा जवाब है लेकिन मैं अभी भी समझदार नहीं हूं क्योंकि मेरे सवाल का जवाब नहीं है। मैंने प्रश्न शीर्षक और प्रश्न को अद्यतन करने और चीजों को अधिक स्पष्ट करने के लिए स्वयं को अद्यतन किया है।
डैन कार्टर

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

यह एक अच्छा सुझाव होगा यदि मेरे पास अनुकूलन करने के लिए केवल एक हाइपरपैरमीटर है, लेकिन अगर मेरे पास 4 हैं? 5? लूप के लिए 4/5 बार नेस्टेड बदसूरत है और मुझे यहां पहिया को सुदृढ़ करने की कोई आवश्यकता नहीं है, यह समय की बर्बादी होगी, और यह इस तरह मौजूद पैकेज का कारण है।
डैन कार्टर

GridSearchCV आपको GridSearchCV सेटिंग के साथ एक अनुमानक को संयोजित करने देता है। इसलिए यह वही है जो हमने अभी चर्चा की है। यह तब इष्टतम पैरामीटर चुनता है और आपके द्वारा चयनित अनुमानक के साथ इसका उपयोग करता है। GridSearchCV क्लासिफायरियर से विधियां प्राप्त करता है, इसलिए हाँ, आप .Score, .predict, आदि का उपयोग कर सकते हैं। GridSearchCV इंटरफ़ेस के माध्यम से सीधे तरीके। मैं हालांकि ऐसा करने की सलाह नहीं देता, आसान साधनों का मतलब कम नियंत्रण है। एक ग्रिड खोज के रूप में कुछ सरल के लिए बस इसे खुद कोड करें।
JahKnows

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