ओवरफ़िटिंग और काट-छांट

ऊपर बताए गए एल्गोरिदम का इस्तेमाल करके, हम डिसिज़न ट्री को ट्रेनिंग दे सकते हैं. यह ट्रेनिंग के उदाहरणों को पूरी तरह से कैटगरी में बांटता है. यह मानते हुए कि इन उदाहरणों को अलग-अलग किया जा सकता है. हालांकि, अगर डेटासेट में ग़ैर-ज़रूरी डेटा है, तो यह ट्री, डेटा के ज़रूरत से ज़्यादा डेटा फ़िट हो जाएगा और टेस्ट के लिए सटीक नहीं होगा.

यहां दी गई इमेज में, ग़ैर-ज़रूरी आवाज़ों वाले डेटासेट को दिखाया गया है, जिसमें सुविधा x और लेबल y के बीच लीनियर संबंध है. इस इमेज में एक ऐसा डिसिज़न ट्री भी दिखाया गया है जिसे इस डेटासेट के आधार पर, किसी भी तरह के रेगुलराइज़ेशन के बिना ट्रेनिंग दी गई है. यह मॉडल, ट्रेनिंग के सभी उदाहरणों का सही अनुमान लगाता है. मॉडल का अनुमान, ट्रेनिंग के उदाहरणों से मेल खाता है. हालांकि, एक जैसे लीनियर पैटर्न और अलग-अलग नॉइज़ इंस्टेंस वाले नए डेटासेट में, मॉडल खराब परफ़ॉर्म करेगा.

सामान्य स्लोप +1 है, लेकिन डेटासेट बहुत शोरगुल है, इसलिए कभी-कभी अलग-अलग डेटा पॉइंट सबसे सही लाइन से काफ़ी दूर होते हैं.

12वीं इमेज. तेज़ आवाज़ वाला डेटासेट.

 

डिसिज़न ट्री को ज़्यादा फ़िट करने के लिए, रेगुलराइज़ेशन की इनमें से कोई एक या दोनों शर्तें लागू करें:

  • ज़्यादा से ज़्यादा गहराई सेट करें: डिसिज़न ट्री को ज़्यादा से ज़्यादा गहराई से बढ़ने से रोकें, जैसे कि 10.
  • लीफ़ में उदाहरणों की कम से कम संख्या सेट करें: जिस लीफ़ के उदाहरणों की तय संख्या से कम होगी उसे बांटा नहीं जाएगा.

यहां दिया गया चित्र, एक लीफ़ के लिए कम से कम संख्या में उदाहरणों की अलग-अलग संख्या के असर को दिखाता है. यह मॉडल, कम शोर को कैप्चर करता है.

तीन प्लॉट, हर एक लीफ़ उदाहरणों की कम से कम संख्या के लिए, अलग-अलग वैल्यू के असर को दिखाता है. इसके लिए अलग-अलग वैल्यू हैं, 2, 5, और
10.

13वीं इमेज. हर लीफ़ के लिए, उदाहरणों की कम से कम संख्या में अंतर.

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

नीचे दिए गए ड्रॉइंग में यह आइडिया दिखाया गया है. यहां हम यह जांच करते हैं कि अगर बिना पत्ती वाले हरे नोड को पत्ती में बदल दिया जाता है, तो डिसिज़न ट्री की पुष्टि करने की क्षमता बेहतर होगी या नहीं. इसका मतलब है कि ऑरेंज नोड की काट-छांट की जाएगी.

दो डिसिज़न ट्री. एक डिसिज़न ट्री में नौ नोड हैं और दूसरे को सिर्फ़ छह नोड तक छोटा करके, किसी एक कंडिशन को पत्ती में बदलकर उसे फिर से छोटा किया गया है.

चौथी इमेज. किसी बीमारी और उसके बच्चों को एक पत्ती में काटना.

 

नीचे दिया गया चित्र बताता है कि डिसिज़न ट्री को कम करने के लिए डेटा की पुष्टि के तौर पर 20% डेटासेट का इस्तेमाल कैसे किया जाता है:

स्ट्रेट लाइन वाले आदर्श मॉडल के सामने, ज़्यादा फ़िट किए गए मॉडल को
दिखाने वाला प्लॉट

15वीं इमेज. डिसिज़न ट्री को कम करने के लिए, डेटासेट का 20% इस्तेमाल करना.

 

ध्यान दें कि पुष्टि करने वाले डेटासेट का इस्तेमाल करने से डिसिज़न ट्री की शुरुआती ट्रेनिंग के लिए उपलब्ध उदाहरणों की संख्या कम हो जाती है.

कई मॉडल क्रिएटर्स एक से ज़्यादा शर्तें लागू करते हैं. उदाहरण के लिए, ये सभी काम किए जा सकते हैं:

  • एक लीफ़ के लिए, उदाहरणों की कम से कम संख्या लागू करें.
  • डिसिज़न ट्री की ग्रोथ को सीमित करने के लिए, ज़्यादा से ज़्यादा गहराई का इस्तेमाल करें.
  • डिसिज़न ट्री को हटाएं.
YDF कोड
YDF में, लर्निंग एल्गोरिदम, छांटने वाले सभी हाइपर पैरामीटर के लिए डिफ़ॉल्ट वैल्यू के साथ पहले से कॉन्फ़िगर होते हैं. उदाहरण के लिए, यहां दिए गए दो हाइपरपैरामीटर के डिफ़ॉल्ट मान दिए गए हैं:
  • उदाहरणों की कम से कम संख्या पांच (min_examples = 5) है
  • ट्रेनिंग डेटासेट का 10% हिस्सा पुष्टि के लिए सेव रखा जाता है (validation_ratio = 0.1).
validation_ratio=0.0 सेट करके, पुष्टि किए गए डेटासेट की मदद से काट-छांट करने की सुविधा बंद की जा सकती है.

इन शर्तों में ऐसे नए हाइपर पैरामीटर शामिल होते हैं जिन्हें ट्यून करने की ज़रूरत होती है (जैसे, ज़्यादा से ज़्यादा पेड़ों की गहराई). अक्सर ये हाइपर पैरामीटर ट्यूनिंग अपने-आप होते हैं. आम तौर पर, डिसिज़न ट्री इतनी तेज़ होती है कि क्रॉस-वैलिडेशन के साथ हाइपर पैरामीटर ट्यूनिंग को ट्रेनिंग दी जा सकती है. उदाहरण के लिए, "n" उदाहरणों वाले डेटासेट पर:

  • ट्रेनिंग के उदाहरणों को, ओवरलैप न करने वाले p ग्रुप में बांटें. उदाहरण के लिए: p=10.
  • सभी संभावित हाइपर पैरामीटर वैल्यू के लिए; उदाहरण के लिए, {3,5,6,7,8,9} में ज़्यादा से ज़्यादा डेप्थ, {5,8,10,20} में कम से कम उदाहरण.
    • हर समूह पर, दूसरे p-1 समूहों पर ट्रेनिंग दिए गए डिसिज़न ट्री की क्वालिटी का आकलन करें.
    • सभी ग्रुप के आकलन का औसत निकालें.
  • सबसे अच्छे औसत इवैलुएशन के साथ हाइपर पैरामीटर वैल्यू चुनें.
  • चुने गए हाइपर पैरामीटर के साथ सभी "n" उदाहरणों का इस्तेमाल करके फ़ाइनल डिसिज़न ट्री को ट्रेनिंग दें.

इस सेक्शन में, हमने उन तरीकों पर चर्चा की है जिनसे यह तय होता है कि डिसीज़न ट्री, ओवरफ़िटिंग को कैसे सीमित करते हैं. इन तरीकों के बावजूद, कम फ़िट करना और ज़रूरत से ज़्यादा फ़िट होना, डिसिज़न ट्री की बड़ी कमियां हैं. डिसिज़न फ़ॉरेस्ट, ओवरफ़िटिंग को सीमित करने के नए तरीके पेश करता है, जिनके बारे में हम बाद में बात करेंगे.

डायरेक्ट डिसिज़न ट्री की व्याख्या

डिसिज़न ट्री को आसानी से समझा जा सकता है. हालांकि, कुछ उदाहरणों में बदलाव करने से भी डिसिज़न ट्री का स्ट्रक्चर पूरी तरह बदल सकता है.

इस वजह से डिसिज़न ट्री बनाया जा सकता है और ट्रेनिंग के उदाहरणों को बांटा जा सकता है. इसलिए, डेटासेट को समझने के लिए डिसिज़न ट्री का इस्तेमाल किया जा सकता है, न कि मॉडल के लिए. हर लीफ़, डेटासेट के किसी खास कोने को दिखाती है.

YDF कोड
YDF में, model.describe() फ़ंक्शन की मदद से पेड़ों को देखा जा सकता है. model.get_tree() की मदद से, अलग-अलग ट्री को ऐक्सेस और प्लॉट किया जा सकता है. ज़्यादा जानकारी के लिए, YDF के मॉडल की जांच करने वाला ट्यूटोरियल देखें.

हालांकि, सीधे तौर पर न होने वाली व्याख्या से भी जानकारी मिलती है.