ओवरफ़िटिंग और सीखने की वक्र: डेटा रिसाव के बिना अंतर समझें
प्रशिक्षण और सत्यापन को साथ पढ़ें, पूर्व-प्रसंस्करण pipeline में सीखें और अंतिम परीक्षण को पैरामीटर चयन से अलग रखें।
इस पृष्ठ पर
संक्षिप्त उत्तर
मॉडल प्रशिक्षण डेटा पर नए सत्यापन उदाहरणों से बहुत बेहतर काम करे तो ओवरफ़िटिंग हो सकती है। यह अंतर एक संकेत है, पूरी व्याख्या नहीं। गलत विभाजन, वितरण में बदलाव, डेटा रिसाव और छोटा नमूना भी महत्त्वपूर्ण हैं। पहले भविष्य के प्रयोग जैसा विभाजन चुनें, डेटा से सीखे जाने वाले पूर्व-प्रसंस्करण को pipeline में रखें और सरल आधार मॉडल से तुलना करें। सीखने की वक्र दिखाती है कि प्रशिक्षण डेटा बढ़ने पर दोनों अंक कैसे बदलते हैं। विकास डेटा पर जटिलता चुनें और अंतिम स्वतंत्र परीक्षण को बार-बार देखकर सेटिंग चुनने के बजाय आखिरी मूल्यांकन के लिए रखें।
ओवरफ़िटिंग को दूसरी समस्याओं से अलग करें
जिस माप में बड़ा मान बेहतर है, जैसे accuracy, उसमें प्रशिक्षण का अच्छा और सत्यापन का काफी कमजोर अंक सामान्यीकरण की समस्या बता सकता है। दोनों कमजोर हों तो मॉडल या विशेषताएँ अपर्याप्त हो सकती हैं। केवल एक अंक या एक अच्छे विभाजन से ओवरफ़िटिंग तय न करें। नमूने का आकार, लेबल और सत्यापन उदाहरणों का भविष्य के प्रयोग से मेल देखें। बदली हुई आबादी का अंतर और समान डेटा में कुछ विवरण याद कर लेने की समस्या अलग जाँच माँगती हैं।
भविष्य के प्रयोग जैसा विभाजन लें
तय करें कि भविष्य की भविष्यवाणी का अर्थ क्या है: नए स्वतंत्र उदाहरण, नए ग्राहक या बाद के समय का अवलोकन। सामान्य यादृच्छिक विभाजन हर जगह सही नहीं है। एक व्यक्ति की दोहराई गई मापों के लिए समूह अलग रखने पड़ सकते हैं और भविष्य का अनुमान समय आधारित विभाजन माँग सकता है। वर्ग अनुपात रखने वाली stratification निर्भरता या समय के रिसाव को नहीं हटाती। उदाहरण में कृत्रिम वर्गीकरण डेटा पर स्तरीकृत हिस्से हैं; असली डेटा में पहले इस चुनाव की मान्यताएँ देखें।
पूर्व-प्रसंस्करण pipeline के भीतर सीखें
डेटा से कुछ सीखने वाला परिवर्तन फिट करने से पहले विभाजन करें। पूरे डेटा पर सीखा हुआ स्केलिंग, खाली मान भरना या विशेषता चयन सत्यापन की जानकारी प्रशिक्षण तक पहुँचा सकता है। Pipeline के साथ cross-validation हर प्रशिक्षण हिस्से पर scaler सीखती है और उसे संबंधित सत्यापन हिस्से पर लागू करती है। लेकिन वह ऐसी विशेषता ठीक नहीं करती जो लक्ष्य बता देती हो या भविष्यवाणी के समय उपलब्ध न हो। इसलिए विशेषता का अर्थ और उपलब्ध होने का समय मॉडल सेटिंग जितनी सावधानी से जाँचें।
दोनों सीखने की वक्र साथ पढ़ें
सीखने की वक्र कई प्रशिक्षण आकारों पर प्रशिक्षण और सत्यापन अंक निकालती है। केवल सबसे अच्छे बिंदु के बजाय दोनों रेखाएँ पढ़ें। लगातार बड़ा अंतर अधिक परिवर्तनशीलता का संकेत हो सकता है; पास-पास कमजोर रेखाएँ अपर्याप्त मॉडल क्षमता या विशेषताएँ बता सकती हैं। ज्यादा उदाहरण मदद कर सकते हैं, लेकिन निश्चित सुधार का वादा नहीं है। कोड में अंक सरणी की हर पंक्ति एक प्रशिक्षण आकार है और हर कॉलम एक सत्यापन हिस्सा है। औसत उन्हीं हिस्सों का सारांश दिखाता है।
import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import StratifiedKFold, learning_curve
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
# Illustrative synthetic classification data.
X, y = make_classification(
n_samples=500, n_features=20,
n_informative=5, n_redundant=5, random_state=42
)
model = make_pipeline(
StandardScaler(), LogisticRegression(max_iter=1000)
)
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
sizes, training_scores, validation_scores = learning_curve(
model, X, y, cv=cv,
train_sizes=np.linspace(0.2, 1.0, 5), scoring="accuracy"
)
print(sizes)
print(training_scores.mean(axis=1))
print(validation_scores.mean(axis=1))आधार मॉडल और उपयुक्त माप चुनें
अच्छा दिखने वाला अंक समझने से पहले कार्य के अनुकूल सरल आधार से तुलना करें। असंतुलित वर्गों में अधिक accuracy केवल बार-बार आने वाला वर्ग अनुमान करने से मिल सकती है, जबकि दुर्लभ वर्ग की पहचान कमजोर रहती है। माप को उस निर्णय के अनुसार चुनें जिसे मॉडल समर्थन देता है और सुधार की दिशा स्पष्ट रखें। उदाहरण accuracy से कृत्रिम डेटा पर API समझाता है। उसका परिणाम यह सिद्ध नहीं करता कि सभी वास्तविक वर्गीकरण समस्याओं में accuracy सही माप है या हर प्रकार की गलती को पर्याप्त महत्व देती है।
जटिलता और नियमितीकरण सोचकर बदलें
जटिलता या नियमितीकरण के कुछ पहले से तय बदलाव एक ही विकास प्रक्रिया में जाँचें। LogisticRegression में छोटा C अधिक मजबूत नियमितीकरण है। max_iter अनुकूलन की अधिकतम पुनरावृत्तियाँ तय करता है, नियमितीकरण की ताकत नहीं। स्केलिंग और अभिसरण भी देखें। एक बार में एक सार्थक कारक बदलें और केवल प्रशिक्षण अंक बढ़ाने के बजाय सत्यापन की तुलना करें। सरल मॉडल बेहतर सामान्यीकरण कर सकता है, लेकिन यह निष्कर्ष प्रतिनिधि सत्यापन डेटा पर होना चाहिए, केवल मनचाही वक्र के आकार पर नहीं।
सत्यापन हिस्सों का अंतर देखें
औसत के साथ हर सत्यापन हिस्से का अंक देखें। बड़ा फैलाव चुने हुए उदाहरणों के प्रति संवेदनशीलता या अलग हिस्सों की कठिनाई बता सकता है। इन अंकों का मानक विचलन उनके बीच अंतर बताता है; वह अपने आप विश्वास अंतराल नहीं बन जाता। Cross-validation के प्रशिक्षण हिस्से एक दूसरे से मिलते हैं, इसलिए अंक स्वतंत्र प्रयोगों की पुनरावृत्तियाँ नहीं हैं। फैलाव से प्रक्रिया, नमूने और समूह की जाँच करें, भविष्य की पूरी आबादी की त्रुटि की सटीक सीमा का बिना अतिरिक्त आधार दावा न करें।
अंतिम मूल्यांकन को चयन से अलग रखें
अंतिम अलग रखे डेटा पर मूल्यांकन से पहले विशेषताएँ और पैरामीटर स्थिर करें। सेटिंग चुनते समय बार-बार परीक्षण देखकर वह चयन का हिस्सा बन जाता है और स्वतंत्रता घटती है। डेटा संस्करण, विशेषता परिभाषा, विभाजन नियम, random state, माप और सॉफ़्टवेयर संस्करण लिखें। कोड कृत्रिम डेटा बनाकर गणना के सारांश छापता है; यहाँ कोई खास अंक या बेंचमार्क परिणाम का दावा नहीं है। दोहराई जा सकने वाली प्रक्रिया मॉडल के वास्तविक सुधार और बदली हुई मूल्यांकन विधि को अलग समझने में मदद करती है।
क्या जाँचें
- सत्यापन विभाजन को भविष्य के उदाहरणों, समूहों या समय से मिलाएँ।
- पूर्व-प्रसंस्करण केवल प्रशिक्षण हिस्सों पर सीखें, संभव हो तो pipeline में।
- दोनों वक्र को आधार मॉडल और सत्यापन फैलाव के साथ पढ़ें।
- विकास डेटा पर पैरामीटर चुनें और अंतिम परीक्षण अलग रखें।
उपयोग की सीमाएँ
वक्र डेटा की गुणवत्ता, विभाजन, मॉडल और माप पर निर्भर हैं। वे संभावित कारण दिखाती हैं, लेकिन अधिक डेटा या नियमितीकरण से समस्या हल होने का प्रमाण नहीं हैं। कृत्रिम उदाहरण शिक्षण के लिए है और बेंचमार्क के रूप में नहीं चलाया गया है।