फ़ैसले लेने के लिए पेड़ों की संख्या

सभी निगरानी में रखे गए मशीन लर्निंग मॉडल की तरह, डिसीज़न ट्री को सबसे अच्छी तरह ट्रेनिंग के उदाहरणों के बारे में बताओ. डिसिज़न ट्री के लिए सबसे अच्छी ट्रेनिंग एक NP-हार्ड समस्या है. इसलिए, आम तौर पर ट्रेनिंग, अनुभव के अनुभवों से ली जाती है— यह आसानी से बनाया जा सकने वाला लर्निंग एल्गोरिदम है, जो एक सही, लेकिन सबसे सही, डिसिज़न ट्री.

डिसिज़न ट्री को ट्रेनिंग देने के लिए इस्तेमाल किए जाने वाले ज़्यादातर एल्गोरिदम, लालची अंतर के साथ काम करते हैं और रणनीति को जीतना है. एल्गोरिदम एक नोड (रूट) बनाकर शुरू होता है और और लालच के आधार पर, डिसिज़न ट्री को बढ़ाने में मदद मिलती है.

हर नोड में, सभी संभावित शर्तों का आकलन किया जाता है और उन्हें स्कोर किया जाता है. कॉन्टेंट बनाने एल्गोरिदम "सबसे अच्छा" विकल्प चुनता है स्थिति, यानी वह शर्त, जिसमें सबसे ज़्यादा स्कोर. फ़िलहाल, स्कोर एक मेट्रिक है जो उस मेट्रिक को बढ़ाने के लिए टास्क और शर्तें चुनी जाती हैं.

उदाहरण के लिए, पामर पेंग्विन डेटासेट (इस कोर्स में बाद में कोड के उदाहरणों के लिए इस्तेमाल किया गया), ज़्यादातर अडेली और चिनस्ट्रैप पेंग्विन के बिल की लंबाई 16 मिलीमीटर होती है. वहीं, Gentoo के ज़्यादातर हिस्से पेंग्विन के बिल छोटे होते हैं. इसलिए, शर्त bill_length_mm ≥ 16 जेनटू पेंग्विन, लेकिन अंतर नहीं कर सकते के बीच स्विच कर सकता है. एल्गोरिदम इस स्थिति को चुन सकता है.

एक स्थिति, जिसकी वजह से दो पत्तियां पैदा हो जाती हैं. इसकी स्थिति 'bill_length_mm >= 16' है.
अगर हां, तो पत्ती 'एडेली या चिनस्ट्रैप' है.  अगर नहीं, तो लीफ़
'Gentoo' है.

सातवीं इमेज. पेड़ उगाने का पहला कदम.

 

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

एल्गोरिदम यहां दिया गया है:

def train_decision_tree(training_examples):
  root = create_root() # Create a decision tree with a single empty root.
  grow_tree(root, training_examples) # Grow the root node.
  return root

def grow_tree(node, examples):
  condition = find_best_condition(examples) # Find the best condition.

  if condition is None:
    # No satisfying conditions were found, therefore the grow of the branch stops.
    set_leaf_prediction(node, examples)
    return

  # Create two childrens for the node.
  positive_child, negative_child = split_node(node, condition)

  # List the training examples used by each children.
  negative_examples = [example for example in examples if not condition(example)]
  positive_examples = [example for example in examples if condition(example)]

  # Continue the growth of the children.
  grow_tree(negative_child, negative_examples)
  grow_tree(positive_child, positive_examples)

आइए, एक खास डिसिज़न ट्री की ट्रेनिंग के चरणों के बारे में जानते हैं. देखें.

पहला चरण: रूट बनाएं:

प्रश्नवाचक चिह्न वाला नोड.

दूसरा चरण: नोड #1 को बढ़ाएं. स्थिति "x1 ≥ 1" मिल गया था. दो चाइल्ड नोड बनाए जाते हैं:

रूट नोड
   जिससे दो अनिश्चित नोड पर पहुंचा जा सकता है.

तीसरा चरण: नोड #2 को बढ़ाएं. कोई संतोषजनक स्थिति नहीं मिली. इसलिए, नोड बनाना पत्ती में:

रूट
   वह नोड जो दो अनिश्चित नोड पर ले जाता है.

चौथा चरण: नोड #3 को बढ़ाएं. स्थिति "x2 ≥ 0.5" मिल गया था. दो बच्चे नोड बनाए जाते हैं.

रूट नोड, a
और तीन पत्तियां.

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

YDF कोड
YDF में, डिसीज़न ट्री को "लालची डिवाइड और विन" के साथ उगाया जाता है डिफ़ॉल्ट रूप से ऊपर बताया गया एल्गोरिदम. वैकल्पिक रूप से, आप वैश्विक growing_strategy="BEST_FIRST_GLOBAL" पैरामीटर से हुई बढ़ोतरी. देखें दस्तावेज़ में ज़्यादा जानकारी देखें.

इनपुट सुविधाओं की संख्या और प्रकार के आधार पर, दिए गए नोड के लिए संभावित कंडिशन बड़ी, आम तौर पर अनंत हो सकती है. उदाहरण के लिए, थ्रेशोल्ड की शर्त $\mathrm{feature}_i \geq t$ दी गई, सभी चीज़ों का कॉम्बिनेशन संभव है इसके लिए थ्रेशोल्ड वैल्यू $t \in \mathbb{R}$ असीमित है.

सबसे अच्छी स्थिति का पता लगाने के लिए, रूटीन को कहते हैं स्प्लिटर होना चाहिए. इसे कई संभावित स्थितियों की जांच करने की ज़रूरत होती है, इसलिए स्प्लिटर को डिसिज़न ट्री को ट्रेनिंग देते समय एक मुश्किल काम होता है.

स्प्लिटर से बढ़ाया गया स्कोर, टास्क के हिसाब से अलग-अलग होता है. इसके लिए उदाहरण:

  • जानकारी पाना और Gini (दोनों जिनका इस्तेमाल बाद में किया जाता है) का इस्तेमाल आम तौर पर, डेटा की कैटगरी तय करने के लिए किया जाता है.
  • मीन स्क्वेयर एरर का इस्तेमाल आम तौर पर रिग्रेशन के लिए किया जाता है.

कई स्प्लिटर एल्गोरिदम मौजूद हैं. हर एल्गोरिदम के लिए अलग-अलग तरीके से काम किया जा सकता है:

  • सुविधाएं किस तरह की हैं; उदाहरण के लिए, संख्यात्मक, कैटगरीकल, टेक्स्ट
  • टास्क; उदाहरण के लिए, बाइनरी क्लासिफ़िकेशन, कई क्लास क्लासिफ़िकेशन, रिग्रेशन
  • स्थिति किस तरह की है; उदाहरण के लिए, थ्रेशोल्ड शर्त, इन-सेट शर्त, तिरछी स्थिति
  • रेगुलराइज़ेशन के लिए ज़रूरी शर्तें; उदाहरण के लिए, सटीक या अनुमानित स्प्लिटर थ्रेशोल्ड की शर्तों के लिए

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

YDF कोड
YDF में, स्प्लिटर को अपने-आप पता चलने वाले फ़िल्टर से चुना जाता है (या ) हर स्प्लिटर की स्पीड (ट्रेनिंग के दौरान, YDF एक छोटा मॉडल चलाकर यह अनुमान लगाता है कि हर कैंडिडेट स्प्लिटर की स्पीड).