डिसिज़न ट्री बनाना

इस यूनिट में, आपको YDF (Yggdrasil) का इस्तेमाल करना होगा डिसिज़न ट्री) लाइब्रेरी, डिसिज़न ट्री को ट्रेनिंग देती है और उसे समझाती है.

यह यूनिट 🧭 YDF का इस्तेमाल शुरू करना ट्यूटोरियल.

प्रारंभिक दौर

डेटासेट का अध्ययन करने से पहले, ये काम करें:

  1. नया Colab' बनाएं Notebook.
  2. कोड की इस लाइन को डालकर और चलाकर YDF लाइब्रेरी इंस्टॉल करें अपनी नई Colab notebook में:
    !pip install ydf -U
    
  3. ये लाइब्रेरी इंपोर्ट करें:
    import ydf
    import numpy as np
    import pandas as pd
    

पामर पेंगुइन डेटासेट

यह Colab, पामर पेंगुइन डेटासेट, जिसमें तीन के लिए आकार की माप शामिल है पेंग्विन की प्रजातियां:

  • चिनस्ट्रैप
  • जेनटू
  • Adelie

यह एक वर्गीकरण समस्या है—इसका मकसद पेंग्विन, जो पामर पेंग्विन डेटासेट में मौजूद डेटा पर आधारित है. ये रहे पेंग्विन:

तीन अलग-अलग तरह का पेंग्विन
प्रजाति.

इमेज 16. पेंग्विन की तीन अलग-अलग प्रजातियां. इन्होंने इमेज दी @allisonhorst

 

निम्न कोड एक पांडा फ़ंक्शन का इस्तेमाल करें:

path = "https://storage.googleapis.com/download.tensorflow.org/data/palmer_penguins/penguins.csv"
dataset = pd.read_csv(path)
label = "species"

# Display the first 3 examples.
dataset.head(3)

यहां दी गई टेबल में, पामर पेंगुइन्स के पहले तीन उदाहरणों को फ़ॉर्मैट किया गया है डेटासेट:

टेबल 3. पामर पेंगुइन्स के पहले 3 उदाहरण

प्रजाति द्वीप bill_length_mm bill_depth_mm flipper_length_mm body_mass_g लिंग वर्ष
0 Adelie Torgersen 39.1 18.7 181.0 3,750.0 पुरुष 2007
1 Adelie Torgersen 39.5 17.4 186.0 3,800.0 महिला 2007
2 Adelie Torgersen 40.3 18.0 195.0 3,250.0 महिला 2007

पूरे डेटासेट में संख्याओं का मिक्स शामिल है (उदाहरण के लिए, bill_depth_mm), कैटगरी के हिसाब से हो (जैसे, island) और कोई सुविधा मौजूद न हो. न्यूरल से अलग नेटवर्क, डिसीज़न फ़ॉरेस्ट इन सभी सुविधाओं के साथ नेटिव तौर पर काम करते हैं. इसलिए, आपको को वन-हॉट एन्कोडिंग, नॉर्मलाइज़ेशन या अतिरिक्त is_present सुविधा करने की ज़रूरत नहीं होती.

नीचे दिया गया कोड सेल, डेटासेट को ट्रेनिंग सेट और टेस्टिंग में बांटता है सेट:

# Use the ~20% of the examples as the testing set
# and the remaining ~80% of the examples as the training set.
np.random.seed(1)
is_test = np.random.rand(len(dataset)) < 0.2

train_dataset = dataset[~is_test]
test_dataset = dataset[is_test]

print("Training examples: ", len(train_dataset))
# >> Training examples: 272

print("Testing examples: ", len(test_dataset))
# >> Testing examples: 72

डिफ़ॉल्ट हाइपर पैरामीटर के साथ डिसिज़न ट्री को ट्रेनिंग देना

आप अपने पहले डिसिज़न ट्री को CART (क्लासिफ़िकेशन और रिग्रेशन ट्री) लर्निंग एल्गोरिदम (जैसे, लर्नर) हाइपर पैरामीटर का इस्तेमाल करना चाहिए. ऐसा इसलिए होता है, क्योंकि ydf.CartLearner लर्नर अच्छी डिफ़ॉल्ट सेटिंग देता है हाइपर पैरामीटर के मान. आपको इस बारे में ज़्यादा जानकारी मिलेगी कि इस तरह के मॉडल कैसे काम करते हैं बाद में पढ़ें.

model = ydf.CartLearner(label=label).train(train_dataset)

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

नतीजे के तौर पर लिया गया डिसिज़न ट्री देखने के लिए, model.plot_tree() को कॉल करें:

model.plot_tree()

Colab में, माउस का इस्तेमाल करके, ऐसे खास एलिमेंट की जानकारी दिखाई जा सकती है का इस्तेमाल करें.

डिसिज़न ट्री को डिफ़ॉल्ट के साथ ट्रेनिंग दी गई
हाइपर पैरामीटर का इस्तेमाल करना चाहिए.

इमेज 17. डिसिज़न ट्री, जिसे डिफ़ॉल्ट हाइपर पैरामीटर के साथ ट्रेन किया गया है.

Colab के हिसाब से, रूट की गई स्थिति में 243 उदाहरण शामिल हैं. हालांकि, आपको याद रखें कि ट्रेनिंग डेटासेट में 272 उदाहरण थे. बाकी 29 पुष्टि करने और पेड़ों की काट-छांट करने के लिए, उदाहरण अपने-आप रिज़र्व हो गए हैं.

पहली शर्त bill_depth_mm की वैल्यू को टेस्ट करती है. चौथी और पांचवीं टेबल में, अलग-अलग प्रजातियों के नतीजों के आधार पर अलग-अलग प्रजातियों के स्टेज का इस्तेमाल करने की संभावना.

टेबल 4. अलग-अलग प्रजातियों की संभावना, अगर bill_depth_mm ≥ 42.3

प्रजाति संभावना
अडेली (लाल) 8%
जेनटू (नीला) 58 प्रतिशत
चिनस्ट्रैप (हरा) 36 प्रतिशत

 

टेबल 5. अलग-अलग प्रजातियों की संभावना, अगर bill_depth_mm < 42.3 अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

प्रजाति संभावना
अडेली (लाल) 97 प्रतिशत
जेनटू (नीला) 2%
चिनस्ट्रैप (हरा) 0%

bill_depth_mm एक संख्यात्मक सुविधा है. इसलिए, वैल्यू 42.3 मिली संख्यात्मक विश्लेषण के साथ बाइनरी क्लासिफ़िकेशन के लिए सटीक विभाजन इस्तेमाल करना सुविधाएं एल्गोरिदम का इस्तेमाल करें.

अगर bill_depth_mm ≥ 42.3 सही है, तो इस बात की जांच करें कि flipper_length_mm ≥ 207.5 इमेज को Gentoos और Gentoos+Adeley से.

यहां दिए गए कोड से, मॉडल की ट्रेनिंग और जांच के बारे में जानकारी मिलती है:

train_evaluation = model.evaluate(train_dataset)
print("train accuracy:", train_evaluation.accuracy)
# >> train accuracy:  0.9338

test_evaluation = model.evaluate(test_dataset)
print("test accuracy:", test_evaluation.accuracy)
# >> test accuracy:  0.9167

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

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

मॉडल हाइपर पैरामीटर में सुधार करना

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

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

  2. अपनी जानकारी और निर्देशों का इस्तेमाल करके, हाइपर पैरामीटर को ऑप्टिमाइज़ करें. कॉन्टेंट बनाने मॉडल को बेहतर बनाने के लिए गाइड मदद मिल सकती है.

  3. हाइपर पैरामीटर ट्यूनिंग का इस्तेमाल करना कई संभावित हाइपर पैरामीटर की अपने-आप जांच करने के लिए किया जा सकता है.

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

ऊपर दिखाया गया डिसिज़न ट्री छोटा है और 61 वाले उदाहरण वाली लीफ़ में इसमें ऐडेली और चिनस्ट्रैप लेबल के वीडियो मिले. एल्गोरिदम ने इस पत्ती को विभाजित क्यों नहीं किया आगे? इसके दो संभावित कारण हैं:

  • हर लीफ़ के लिए सैंपल की कम से कम संख्या (डिफ़ॉल्ट रूप से min_examples=5) ये हो सकती है पहुंच गए हैं.
  • ऐसा हो सकता है कि पेड़ को कई हिस्सों में बांट दिया गया हो और ज़रूरत से ज़्यादा फ़िट न होने के लिए की काट-छांट की गई हो.

उदाहरणों की कम से कम संख्या को घटाकर 1 करें और नतीजे देखें:

model = ydf.CartLearner(label=label, min_examples=1).train(train_dataset)
model.plot_tree()

डिसिज़न ट्री को
min_examples=1 के रूप में दिखेगा.

इमेज 18. min_examples=1 के साथ ट्रेन किया गया डिसिज़न ट्री.

 

61 उदाहरणों वाले लीफ़ नोड को कई पेजों में बांट दिया गया है बार.

यह देखने के लिए कि क्या नोड को और बांटना फ़ायदेमंद है, हम इतने समय में टेस्ट डेटासेट पर इस नए मॉडल को:

print(model.evaluate(test_dataset).accuracy)
# >> 0.97222

इस मॉडल की क्वालिटी, टेस्ट सटीक होने के साथ बेहतर हो गई है. अब यह 0.9167 से बढ़कर 0.97222. हाइपर पैरामीटर का यह बदलाव एक अच्छा आइडिया था.

किसी फ़ैसले के पिछले पेज पर जाएं

हाइपर पैरामीटर में सुधार करते रहने से, हम संभवतः एक बेहतरीन कितना सटीक है. हालांकि, इस मैन्युअल प्रक्रिया के बजाय, हम ज़्यादा बेहतर ट्रेनिंग मॉडल का इस्तेमाल कर सकते हैं और देख सकते हैं कि क्या यह बेहतर काम करता है.

model = ydf.RandomForestLearner(label=label).train(pandas_train_dataset)
print("Test accuracy: ", model.evaluate(pandas_test_dataset).accuracy)
# >> Test accuracy: 0.986111

किसी भी क्रम में लगे जंगल की सटीक जानकारी हमारे साधारण पेड़ से बेहतर है. आपको में जानकारी पाएं.

इस्तेमाल और सीमा

जैसा कि पहले बताया गया है, एक डिसिज़न ट्री की क्वालिटी अक्सर आधुनिक से कम होती है मशीन लर्निंग के तरीके, जैसे कि रैंडम फ़ॉरेस्ट, ग्रेडिएंट बूस्टेड ट्री, और न्यूरल नेटवर्क. हालांकि, डिसिज़न ट्री इन मामलों में भी काम के होते हैं:

  • ज़्यादा मुश्किल तरीकों का आकलन करने के लिए, आसान और कम खर्च में उपलब्ध बेसलाइन के तौर पर.
  • जब मॉडल की क्वालिटी और समझ के बीच कोई फ़र्क़ होता है.
  • डिसिज़न फ़ॉरेस्ट मॉडल की व्याख्या के लिए प्रॉक्सी के तौर पर, जिसमें कोर्स बाद में एक्सप्लोर किया जाएगा.