मेरे पास 140000 उदाहरणों और 30 विशेषताओं का एक डेटासेट है, जिसके लिए मैं एक द्विआधारी वर्गीकरण (एसवीएम, लॉजिस्टिक रिग्रेशन, रैंडम फॉरेस्ट आदि) के लिए कई क्लासिफायरशिप प्रशिक्षण दे रहा हूं।
कई मामलों में ग्रिड या रैंडम खोज का उपयोग करके पूरे डेटासेट पर हाइपरपैरेट ट्यूनिंग बहुत महंगा है।
मैंने निम्नलिखित तकनीक का उपयोग करना शुरू कर दिया
- उप नमूना मेरे डेटासेट
- हाइपरपरमेटर्स को ट्यून करने के लिए प्राप्त अंश का उपयोग करें
- संपूर्ण डेटासेट का उपयोग करके किसी मॉडल को प्रशिक्षित करने के लिए प्राप्त मापदंडों का उपयोग करें
दूसरे चरण के लिए मैं उपयोग पर मानकों के प्रत्येक सेट का मूल्यांकन करने के sklearn
's GridSearchCV
सीवी = 10 के साथ। अंतिम मॉडल है कि मैं तीसरे चरण मैं उपयोग में बनाने का मूल्यांकन करने के sklearn
'एस cross_val_predict
। इस लिहाज से मैं अपने मॉडलों का मूल्यांकन 10% प्रतिशत डेटा छोड़ने पर करता हूं, बाकी पर प्रशिक्षण देता हूं और 10% पर भविष्यवाणियां मापता हूं, 10 बार पुनरावृत्ति करता हूं, फिर प्राप्तांकों का औसत लेता हूं।
मुझे जो चिंता हुई वह यह है कि मुझे अपने संपूर्ण डेटासेट पर प्रशिक्षण से प्राप्त होने वाली भविष्यवाणी सटीकता, वास्तव में मूल्यांकन के करीब है जब मैं मापदंडों के सर्वोत्तम सेट के लिए मापदंडों को ट्यून करता हूं (प्रत्येक परीक्षण किए गए मापदंडों का सेट औसत 10 से प्राप्त स्कोर को आउटपुट करता है- तह-पार सत्यापन परिणाम)।
अधिकांश समय सटीकता जो cross_val_predict
सभी प्रशिक्षण उदाहरणों (संपूर्ण डेटासेट) का उपयोग करके मापा जाता है, सबसे अच्छा पैरामीटर के मूल्यांकन से थोड़ा सा ऊपर है।
इसका वर्णन करने के लिए यहाँ मापदंडों के एक सेट का मूल्यांकन है (जो मैंने ऊपर वर्णित किया था उससे छोटे डेटासेट पर लेकिन प्रभाव समान है)
Best parameters set found on development set:
{'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
Scores for all sets of parameters
0.851 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.5}
0.852 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.1}
0.829 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.001}
0.853 (+/-0.006) for {'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
...
और यहाँ औसत स्कोर हैं (से cross_val_predict
) मुझे सर्वोत्तम मापदंडों का उपयोग करके अपने संपूर्ण डेटासेट पर प्रशिक्षण मिला है
precision recall f1-score support
0 0.86 0.85 0.86 15417
1 0.86 0.87 0.87 16561
avg / total 0.86 0.86 0.86 31978
acc score: 0.863750078179
roc au score: 0.863370490059
[[13147 2270]
[ 2087 14474]]
जैसा कि आप देख सकते हैं कि संपूर्ण डेटासेट पर प्रशिक्षण परिणामों को बेहतर बनाता है। मैंने यह भी मान्य किया है कि बुरी तरह से ट्यून्ड किए गए मॉडल (जैसे कि डिफ़ॉल्ट मान या यादृच्छिक मानों का उपयोग करके ) C
और gamma
बहुत खराब भविष्यवाणी सटीकता की ओर जाता है।
कुल मिलाकर, मुझे लगता है कि एक सबसेट पर हाइपरपरमेटर्स को ट्यून करना आदर्श नहीं है, लेकिन संभावित रूप से बहुत लंबे समय तक इंतजार किए बिना अपेक्षाकृत अच्छे परिणाम दे सकता है। मैं उदाहरण के लिए उपयोग करने से पहले optunity
पूरे डेटासेट पर हाइपरपरमीटर ट्यूनिंग के लिए उपयोग किए गए पैकेज का उपयोग करता हूं । इस प्रक्रिया को पूरा होने में 3-5 दिन लगेंगे और ऐसे परिणाम आएंगे जिनमें या तो वास्तव में अच्छी परिशुद्धता थी या वास्तव में अच्छी याद थी, लेकिन दोनों नहीं, इसलिए यद्यपि प्रत्येक वर्ग के लिए या तो सटीक या याद रखना वास्तव में उच्च था (मेरे किसी अन्य की तुलना में अधिक) सहपाठियों ने प्राप्त किया था) एफ 1 खसरा वास्तव में कम था। बाद के दृष्टिकोण का उपयोग करने के विपरीत कुछ घंटों के प्रशिक्षण और एक बेहतर एफ 1 खानों की ओर जाता है।
मेरी चिंताएं हैं:
क्या मैं अपनी वर्गीकरण सटीकता को सीमित कर सकता हूं? क्या मैं उन सभी भविष्यवाणी शक्ति का उपयोग करने से बचता हूं जो मेरे डेटासेट केवल एक सबसेट पर ट्यूनिंग करके पेश कर सकते हैं? यदि प्रदर्शन का ऐसा नुकसान हो रहा है, तो क्या यह किसी तरह से सीमित है?