Decision trees और forests
एक decision tree हाँ/ना वाले सवालों की एक चेन पूछता है। एक random forest कई थोड़े अलग-अलग trees से पूछता है और वोट लेता है।
60 सेकंड में
Decision trees और forests
एक decision tree हाँ/ना वाले सवालों की एक चेन पूछता है। एक random forest कई थोड़े अलग-अलग trees से पूछता है और वोट लेता है।
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 बन सकता है
- इसकी सीमाएं (boundaries) सीढ़ियों जैसी होती हैं, स्मूथ कर्व्स नहीं
- छोटा होने पर इसे समझाना आसान होता है
- फ़ीचर्स को स्केल करने की ज़रूरत नहीं होती
- मिले-जुले फ़ीचर्स और घुमावदार पैटर्न संभाल लेता है
Random forests: कई सारे trees वोट करते हैं
- 1
सैंपल लें
हर tree को ट्रेनिंग पंक्तियों का अपना रैंडम सैंपल मिलता है (दोहराव के साथ)। - 2
बड़ा करें
हर tree बड़ा होता है, और हर विभाजन को फ़ीचर्स के एक रैंडम सबसेट से चुनता है। - 3
वोट करें
नई पंक्ति के लिए, हर tree प्रेडिक्शन देता है; forest बहुमत वाला फैसला लेता है।
फ़ीचर इम्पोर्टेंस, सावधानी के साथ
feature_importances_ की जानकारी देते हैं: मोटे तौर पर यह कि हर फ़ीचर ने विभाजनों में कितनी मदद की। मॉडल किस चीज़ पर भरोसा करता है, यह समझने के लिए यह एक उपयोगी संकेत है।| सेटिंग | यह क्या नियंत्रित करती है |
|---|---|
| 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 का टॉप फ़ीचर।
समस्या
- स्टार्टर चलाएं। यह wine डेटा को एक तालिका के रूप में लोड करता है और इसे विभाजित करता है।
- ट्रेनिंग पंक्तियों पर
treeनाम से एकDecisionTreeClassifier(random_state=0)औरforestनाम से एकRandomForestClassifier(n_estimators=100, random_state=0)फ़िट करें। tree_accऔरforest_accको उनकी टेस्ट एक्यूरेसी पर सेट करें।top_featureको सबसे अधिकforest.feature_importances_वाले फ़ीचर के नाम पर सेट करें।- तीनों को प्रिंट करें। फिर 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%)।