मशीन लर्निंग के बुनियादी सिद्धांतमध्यमपाठ 1115 मिनट का पाठ

Decision trees और forests

एक decision tree हाँ/ना वाले सवालों की एक चेन पूछता है। एक random forest कई थोड़े अलग-अलग trees से पूछता है और वोट लेता है।

पाठ वीडियो में

60 सेकंड में

Decision trees और forests

एक decision tree हाँ/ना वाले सवालों की एक चेन पूछता है। एक random forest कई थोड़े अलग-अलग trees से पूछता है और वोट लेता है।

1/5
आसान शब्दों में
"बीस सवाल" वाला खेल याद है? "क्या यह एक जानवर है? हाँ। क्या यह पानी में रहता है? नहीं। क्या इसके शरीर पर धारियां हैं? हाँ। यह एक बाघ है!" एक decision tree डेटा के साथ यही खेल खेलता है। हर सवाल उदाहरणों को छोटे समूहों में बांटता है, जब तक कि हर समूह में ज्यादातर एक ही तरह की चीज़ें न रह जाएं।
एक decision tree एक फ़्लोचार्ट होता है जिसे कंप्यूटर उदाहरणों से बनाता है। हर कदम पर यह उस फ़ीचर और कट-ऑफ को चुनता है जो लेबल्स को सबसे अच्छी तरह अलग करते हैं, उदाहरण के लिए "क्या petal length 2.45 cm से कम है?"। फिर यह हर शाखा (branch) के अंदर यही दोहराता है। इनके छोरों को leaves (पत्तियां) कहा जाता है, और हर leaf एक प्रेडिक्शन देती है।
Python: print a small tree as rulespython
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, export_text

iris = load_iris()
tree = DecisionTreeClassifier(max_depth=2, random_state=0)
tree.fit(iris.data, iris.target)

print(export_text(tree, feature_names=list(iris.feature_names)))
print("Classes:", list(iris.target_names))
इसके प्रिंट किए गए नियमों को पढ़ना आसान होता है: आप पेड़ में नीचे की ओर किसी भी फूल के रास्ते को देख सकते हैं और समझ सकते हैं कि उसे वह लेबल क्यों मिला। छोटे tree की यही सबसे बड़ी खूबी है।

एक अकेले tree की खूबियां और कमियां

कमियां
  • एक गहरा tree ट्रेनिंग डेटा को पूरी तरह रट सकता है, शोर (नॉइज़) समेत
  • डेटा में छोटे बदलावों से बिल्कुल अलग tree बन सकता है
  • इसकी सीमाएं (boundaries) सीढ़ियों जैसी होती हैं, स्मूथ कर्व्स नहीं
खूबियां
  • छोटा होने पर इसे समझाना आसान होता है
  • फ़ीचर्स को स्केल करने की ज़रूरत नहीं होती
  • मिले-जुले फ़ीचर्स और घुमावदार पैटर्न संभाल लेता है

Random forests: कई सारे trees वोट करते हैं

एक random forest कई सारे trees बनाता है। हर tree पंक्तियों (rows) के एक रैंडम सैंपल पर ट्रेन होता है, और हर विभाजन (split) पर वह फ़ीचर्स के केवल एक रैंडम सबसेट को ही देखता है। इसलिए अलग-अलग trees अलग-अलग गलतियां करते हैं। प्रेडिक्शन के लिए, सभी trees वोट करते हैं और बहुमत जीतता है। रैंडम गलतियां आमतौर पर एक-दूसरे को काट देती हैं।
  1. 1

    सैंपल लें

    हर tree को ट्रेनिंग पंक्तियों का अपना रैंडम सैंपल मिलता है (दोहराव के साथ)।
  2. 2

    बड़ा करें

    हर tree बड़ा होता है, और हर विभाजन को फ़ीचर्स के एक रैंडम सबसेट से चुनता है।
  3. 3

    वोट करें

    नई पंक्ति के लिए, हर tree प्रेडिक्शन देता है; forest बहुमत वाला फैसला लेता है।
नंबरों वाली तालिकाओं (tables) के लिए forests अक्सर पहली पसंद होते हैं। बस नुकसान यह है कि आप सौ trees को उस तरह नहीं पढ़ सकते जैसे एक अकेले tree को पढ़ सकते हैं।

फ़ीचर इम्पोर्टेंस, सावधानी के साथ

Forests feature_importances_ की जानकारी देते हैं: मोटे तौर पर यह कि हर फ़ीचर ने विभाजनों में कितनी मदद की। मॉडल किस चीज़ पर भरोसा करता है, यह समझने के लिए यह एक उपयोगी संकेत है।
सावधान रहें
फ़ीचर इम्पोर्टेंस का मतलब कारण और प्रभाव (cause and effect) नहीं होता। जब दो फ़ीचर्स में एक जैसी जानकारी हो तो यह भ्रामक भी हो सकता है (वे श्रेय आपस में बांट लेते हैं), और यह कई अलग-अलग मानों (values) वाले फ़ीचर्स का पक्ष लेने लगता है। इसे आगे की जांच के लिए एक सुराग मानें, अंतिम उत्तर नहीं।
सेटिंगयह क्या नियंत्रित करती है
max_depthएक tree कितने सवालों की गहराई तक जा सकता है। छोटा मतलब सरल।
min_samples_leafएक leaf में कम से कम कितनी पंक्तियों की अनुमति है। बड़ा मतलब अधिक स्मूथ।
n_estimatorsएक forest में कितने trees होंगे। ज़्यादा मतलब अधिक स्थिर लेकिन धीमा।
random_stateरैंडमनेस को फिक्स करता है ताकि परिणाम दोहराए जा सकें।
इसे आज़माएं। कोड में max_depth=2 को बदलकर max_depth=4 करें। क्या अतिरिक्त नियमों को समझना अभी भी आसान है?

और देखें और पढ़ें

लैब

Wine डेटा पर एक decision tree और एक random forest, जिनकी तुलना समान टेस्ट पंक्तियों पर की गई है, साथ ही forest का टॉप फ़ीचर।

~20 min

समस्या

  1. स्टार्टर चलाएं। यह wine डेटा को एक तालिका के रूप में लोड करता है और इसे विभाजित करता है।
  2. ट्रेनिंग पंक्तियों पर tree नाम से एक DecisionTreeClassifier(random_state=0) और forest नाम से एक RandomForestClassifier(n_estimators=100, random_state=0) फ़िट करें।
  3. tree_acc और forest_acc को उनकी टेस्ट एक्यूरेसी पर सेट करें।
  4. top_feature को सबसे अधिक forest.feature_importances_ वाले फ़ीचर के नाम पर सेट करें।
  5. तीनों को प्रिंट करें। फिर forest के random_state को बदलकर 1 और 2 करें। क्या टॉप फ़ीचर वही रहता है?

प्रैक्टिस लैब

कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।

आउटपुट

कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।

आपका काम तब पूरा होगा जब

कठिन सवाल

उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।

Q1इस विभाजन पर forest का स्कोर tree से बेहतर है। यह दावा करने से पहले कि forest आम तौर पर बेहतर है, आपको क्या चाहिए होगा?दिखाएं

एक से अधिक विभाजन। यहाँ टेस्ट सेट में केवल 45 वाइन हैं, इसलिए एक या दो गलतियाँ एक्यूरेसी को बहुत बदल देती हैं। कई विभाजनों के साथ दोहराएं या cross-validation का उपयोग करें, और देखें कि क्या forest अधिकतर समय जीतता है।

Q2यदि random_state बदलने पर टॉप फ़ीचर बदल जाता है, तो यह आपको क्या बताता है?दिखाएं

कि टॉप फ़ीचर्स के इम्पोर्टेंस स्कोर बहुत करीब हैं, और रैंकिंग स्थिर नहीं है। कई फ़ीचर्स में समान जानकारी हो सकती है। केवल एक टॉप फ़ीचर के आधार पर कोई धारणा न बनाएं; महत्वपूर्ण फ़ीचर्स के पूरे समूह को देखें और अन्य तरीकों से उनकी जांच करें।

जारी रखने के लिए कृपया साइन इन करें।

अक्सर पूछे जाने वाले सवाल

क्या tree को स्केल्ड फ़ीचर्स की ज़रूरत होती है?

नहीं। एक tree केवल यही पूछता है कि "क्या यह फ़ीचर इस मान से ऊपर है?", इसलिए यूनिट से कोई फर्क नहीं पड़ता।

एक forest में कितने trees होने चाहिए?

सौ एक आम शुरुआती संख्या है और scikit-learn का डिफ़ॉल्ट है। ज़्यादा trees से सटीकता शायद ही कभी कम होती है, लेकिन उनमें समय और मेमोरी खर्च होती है। जब टेस्ट परिणाम सुधरना बंद हो जाएं, तो और trees जोड़ना बंद कर दें।

क्या trees रिग्रेशन कर सकते हैं?

हाँ। DecisionTreeRegressor और RandomForestRegressor नंबरों का अनुमान लगाते हैं। प्रत्येक leaf अपनी ट्रेनिंग पंक्तियों के औसत लेबल का अनुमान लगाती है।

Gradient boosting के बारे में क्या?

Boosting भी कई trees को जोड़ती है, लेकिन उन्हें एक के बाद एक बनाती है, जहां हर नया tree पिछले वाले की गलतियों को सुधारता है। तालिकाओं (tables) पर यह अक्सर बहुत सटीक होता है। scikit-learn में HistGradientBoostingClassifier मौजूद है। जब आप forests को अच्छे से समझ लें, तब इसे आज़माएं।

पाठ का टेस्ट

5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।

टेस्ट देने और अपनी प्रोग्रेस सेव करने के लिए साइन इन करें