ओवरफ़िटिंग और प्रूनिंग
ऊपर बताए गए एल्गोरिदम का इस्तेमाल करके, हम एक डिसिज़न ट्री को ट्रेन कर सकते हैं. यह डिसिज़न ट्री, ट्रेनिंग के उदाहरणों को पूरी तरह से अलग-अलग कैटगरी में बांट देगा. हालांकि, इसके लिए यह ज़रूरी है कि उदाहरणों को अलग-अलग कैटगरी में बांटा जा सके. हालांकि, अगर डेटासेट में ग़ैर-ज़रूरी जानकारी है, तो यह ट्री डेटा के हिसाब से ज़्यादा फ़िट होगा और टेस्ट के नतीजे सटीक नहीं होंगे.
नीचे दी गई इमेज में, ग़ैर-ज़रूरी डेटा वाला एक डेटासेट दिखाया गया है. इसमें, किसी विशेषता x और लेबल y के बीच लीनियर संबंध है. इस इमेज में, बिना किसी रेगुलराइज़ेशन के इस डेटासेट पर ट्रेन किया गया डिसिज़न ट्री भी दिखाया गया है. यह मॉडल, ट्रेनिंग के सभी उदाहरणों का सही अनुमान लगाता है. मॉडल का अनुमान, ट्रेनिंग के उदाहरणों से मेल खाता है. हालांकि, एक ही लीनियर पैटर्न और अलग-अलग शोर वाले नए डेटासेट पर, मॉडल की परफ़ॉर्मेंस खराब होगी.
12वीं इमेज. ग़ैर-ज़रूरी आवाज़ों वाला डेटासेट.
किसी डेसिज़न ट्री को ओवरफ़िट होने से रोकने के लिए, डेसिज़न ट्री को ट्रेन करते समय, इनमें से एक या दोनों रेगुलराइज़ेशन मापदंड लागू करें:
- ज़्यादा से ज़्यादा डेप्थ सेट करना: इससे, डेसिज़न ट्री की डेप्थ 10 जैसी तय सीमा से ज़्यादा नहीं हो पाती.
- लीफ में उदाहरणों की कम से कम संख्या सेट करें: किसी लीफ में तय संख्या से कम उदाहरण होने पर, उसे अलग नहीं किया जाएगा.
नीचे दिए गए चित्र में, हर लीफ़ के लिए कम से कम उदाहरणों की संख्या में अंतर के असर को दिखाया गया है. मॉडल, कम शोर कैप्चर करता है.
13वां चित्र. हर लीफ़ के लिए, उदाहरणों की कम से कम संख्या अलग-अलग हो.
ट्रेनिंग के बाद भी, कुछ शाखाओं को चुनिंदा तौर पर हटाकर (छंटाई करके) नियमित किया जा सकता है. इसका मतलब है कि कुछ ऐसे नोड को लीफ़ में बदलना जो लीफ़ नहीं हैं. पुष्टि करने वाले डेटासेट का इस्तेमाल करके, हटाने के लिए शाखाएं चुनी जा सकती हैं. इसका मतलब है कि अगर किसी शाखा को हटाने से पुष्टि करने वाले डेटासेट पर मॉडल की क्वालिटी बेहतर होती है, तो उस शाखा को हटा दिया जाता है.
इस आरेख में इस आइडिया को दिखाया गया है. यहां हम यह जांच करते हैं कि अगर हरे रंग के ऐसे नोड को लीफ़ में बदल दिया जाए जो लीफ़ नहीं है, तो क्या डेसिज़न ट्री की पुष्टि करने की सटीक जानकारी मिलेगी. इसका मतलब है कि ऑरेंज रंग के नोड को छंटाना.
14वीं इमेज. किसी शर्त और उसके चाइल्ड नोड को लीफ़ में बदलना.
इस इमेज में, डेटासेट के 20% हिस्से का इस्तेमाल करके पुष्टि करने के बाद, डिसीज़न ट्री को छोटा करने के असर को दिखाया गया है:
15वीं इमेज. डेटासेट के 20% का इस्तेमाल करके, डिसीज़न ट्री को छोटा करना.
ध्यान दें कि पुष्टि करने वाले डेटासेट का इस्तेमाल करने से, डिसीज़न ट्री की शुरुआती ट्रेनिंग के लिए उपलब्ध उदाहरणों की संख्या कम हो जाती है.
कई मॉडल क्रिएटर्स, कई शर्तें लागू करते हैं. उदाहरण के लिए, ये सभी काम किए जा सकते हैं:
- हर लीफ़ के लिए कम से कम उदाहरण लागू करें.
- फ़ैसला लेने वाले ट्री को सीमित करने के लिए, ज़्यादा से ज़्यादा डेप्थ लागू करें.
- डिसीज़न ट्री को छोटा करें.
- कम से कम पांच (
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" उदाहरणों और हायपरपैरामीटर का इस्तेमाल करके, फ़ाइनल डिसिज़न ट्री को ट्रेन करें.
इस सेक्शन में, हमने उन तरीकों के बारे में बात की है जिनसे डिसीज़न ट्री, ओवरफ़िटिंग को कम करता है. इन तरीकों के बावजूद, अंडरफ़िटिंग और ओवरफ़िटिंग, डिसीज़न ट्री की मुख्य कमियां हैं. डिसिज़न फ़ॉरेस्ट, ओवरफ़िटिंग को कम करने के लिए नए तरीके पेश करते हैं. इनके बारे में हम बाद में जानेंगे.
डिसीज़न ट्री का सीधा विश्लेषण
डिसीज़न ट्री को आसानी से समझा जा सकता है. हालांकि, कुछ उदाहरणों में बदलाव करने से, डिसीज़न ट्री का स्ट्रक्चर पूरी तरह से बदल सकता है. साथ ही, इसका मतलब भी बदल सकता है.
डिसिज़न ट्री बनाने के तरीके की वजह से, ट्रेनिंग के उदाहरणों को बांटा जाता है. इसलिए, मॉडल के बजाय, डेटासेट का विश्लेषण करने के लिए डिसिज़न ट्री का इस्तेमाल किया जा सकता है. हर लीफ़, डेटासेट के किसी खास हिस्से को दिखाता है.
model.describe()
फ़ंक्शन की मदद से पेड़ों को देखा जा सकता है.
model.get_tree()
का इस्तेमाल करके, अलग-अलग ट्री को ऐक्सेस और प्लॉट भी किया जा सकता है.
ज़्यादा जानकारी के लिए,
YDF का मॉडल की जांच करने का ट्यूटोरियल देखें.
हालांकि, इनडायरेक्ट इंटरप्रिटेशन से भी जानकारी मिलती है.