Last chance! 50% off DataCamp Premium
Sale ends in

मशीन लर्निंग मॉडल पारंपरिक सॉफ्टवेयर समाधानों जैसे नहीं होते। सटीक और भरोसेमंद भविष्यवाणियों के लिए इन मॉडलों को नए डेटा उपलब्ध होते ही लगातार अपडेट की जरूरत पड़ती है। जटिल और संवेदनशील परिदृश्यों में, किसी एकल मॉडल पर निर्भर रहना इष्टतम परिणाम देने के लिए पर्याप्त नहीं हो सकता, और यहीं एंसेंबल मॉडलिंग सहायक होती है।
यह वैचारिक ट्यूटोरियल कवर करता है कि मशीन लर्निंग में एंसेंबल मॉडलिंग क्या है और यह आपके समग्र मॉडल प्रदर्शन को कैसे बेहतर बना सकती है। इसके बाद, हम विभिन्न एंसेंबल विधियों का एक अवलोकन देंगे और फिर Python के साथ चरण-दर-चरण इम्प्लीमेंटेशन का उपयोग करते हुए एक वास्तविक-जीवन परिदृश्य का चित्रण करेंगे।
हमारा SuperLearner के साथ R में एंसेंबल लर्निंग ट्यूटोरियल बताता है कि R में SuperLearner पैकेज का उपयोग करके एंसेंबल लर्निंग दृष्टिकोण के आधार पर अपने मशीन लर्निंग परिणामों को कैसे बेहतर किया जाए।
मान लीजिए एक म्यूजिक मैनेजर अंतरराष्ट्रीय प्रतियोगिता में हिस्सा ले रहा है। उसके पास विभिन्न विशेषज्ञता वाले संगीतकारों की एक विस्तृत श्रृंखला तक पहुंच है:
संगीतिक विशेषज्ञता और पृष्ठभूमि के इस व्यापक स्पेक्ट्रम को देखते हुए, मैनेजर इन सबको मिलाकर एक अनोखा और यादगार प्रदर्शन तैयार कर सकता है।
एंसेंबल मॉडलों को संगीतकारों के एक ऑर्केस्ट्रा की तरह समझें, जहाँ हर व्यक्ति पियानो, ट्रम्पेट, ड्रम आदि जैसे किसी खास वाद्य में विशेषज्ञ होता है। इन कौशलों का संयोजन एक मधुर संगति बनाता है।
एंसेंबल लर्निंग भी इसी तर्क का उपयोग करती है:
यह कई एल्गोरिदमों को मिलाकर एकल मॉडल की तुलना में बेहतर प्रेडिक्टिव प्रदर्शन प्राप्त करती है। विचार करने के लिए मॉडलों की कोई पूर्व-परिभाषित संख्या नहीं होती, और कुछ व्यावसायिक लक्ष्यों के लिए अन्य की तुलना में अधिक मॉडलों की आवश्यकता हो सकती है।
किसी भी मशीन मॉडल से उत्पन्न त्रुटि को गणितीय रूप से तीन घटकों में बांटा जा सकता है:
बायस + वैरिएंस + अपरिवर्तनीय त्रुटि
यह वर्तमान संदर्भ में क्यों महत्वपूर्ण है? किसी एंसेंबल मॉडल के पीछे क्या चलता है, यह समझने के लिए पहले यह जानना जरूरी है कि मॉडल में त्रुटि किन कारणों से आती है।
आइए इन त्रुटियों पर नज़र डालें:
यह औसतन यह मापने में उपयोगी है कि अनुमानित मान वास्तविक मान से कितने भिन्न हैं। उच्च बायस त्रुटि का अर्थ है कि हमारा मॉडल कम प्रदर्शन कर रहा है और जरूरी रुझानों को लगातार चूक रहा है।
दूसरी ओर, वैरिएंस यह मापता है कि एक ही ऑब्ज़र्वेशन पर की गई भविष्यवाणियों में कितनी भिन्नता है। उच्च वैरिएंस वाला मॉडल आपके प्रशिक्षण जनसंख्या पर ओवर-फिट करेगा और प्रशिक्षण से परे किसी भी ऑब्ज़र्वेशन पर कमजोर प्रदर्शन करेगा। निम्नलिखित आरेख आपको अधिक स्पष्टता देगा (मान लीजिए कि लाल बिंदु वास्तविक मान है, और नीले बिंदु भविष्यवाणियाँ हैं):

आमतौर पर, जैसे-जैसे आप अपने मॉडल की जटिलता बढ़ाते हैं, मॉडल में बायस कम होने से त्रुटि में कमी दिखाई देती है। हालाँकि, यह केवल एक खास बिंदु तक होता है। जैसे-जैसे आप अपने मॉडल को और जटिल बनाते हैं, आप मॉडल को ओवर-फिट कर बैठते हैं और आपका मॉडल उच्च वैरिएंस से ग्रस्त होने लगता है।
अब जब आप एंसेंबल लर्निंग की मूल बातें जान चुके हैं, तो आइए विभिन्न एंसेंबल लर्निंग तकनीकों पर नज़र डालते हैं:
एंसेंबल विधियों के अलग-अलग प्रकार हैं, और प्रत्येक अपने साथ कुछ फायदे और कुछ सीमाएँ लाता है। यह खंड उन पहलुओं को कवर करता है ताकि आप अपने उपयोग मामलों के लिए सही विकल्प चुन सकें।
प्रत्येक विधि में जाने से पहले, बेहतर समझ के लिए यह समझते हैं कि मेटा और बेस लर्नर क्या होते हैं।
बैगिंग को बूटस्ट्रैप एग्रीगेशन भी कहा जाता है। यह तकनीक रैंडम फॉरेस्ट के समान है, लेकिन यह सभी प्रेडिक्टर्स का उपयोग करती है, जबकि रैंडम फॉरेस्ट प्रत्येक ट्री में केवल प्रेडिक्टर्स के एक सबसेट का उपयोग करता है।
बैगिंग में, प्रशिक्षण सेट से डेटा का एक रैंडम सैंपल रिप्लेसमेंट के साथ चुना जाता है, जो किसी सेट में सैंपल इंस्टैंसेज़ के डुप्लिकेशन को सक्षम करता है। नीचे बैगिंग में शामिल मुख्य चरण दिए गए हैं:

क्लासिफिकेशन या रिग्रेशन कार्यों में बैगिंग के कई प्रमुख फायदे और सीमाएँ हैं।
बूस्टिंग एक अनुक्रमिक दृष्टिकोण अपनाता है, जहाँ वर्तमान मॉडल की भविष्यवाणी अगले मॉडल को सौंपी जाती है। प्रत्येक मॉडल क्रमागत रूप से उन ऑब्ज़र्वेशनों पर ध्यान केंद्रित करता है जिन्हें उसके पूर्ववर्तियों ने गलत वर्गीकृत किया था। हमने नीचे सामान्य प्रक्रिया रेखांकित की है:

स्टैकिंग बूस्टिंग के काफी समान है। बेस लर्नरों की भविष्यवाणियों को एक साथ स्टैक किया जाता है और उन्हें मेटा लर्नर को प्रशिक्षित करने के इनपुट के रूप में उपयोग किया जाता है ताकि अधिक मजबूत भविष्यवाणियाँ प्राप्त हों। फिर मेटा लर्नर का उपयोग अंतिम भविष्यवाणियाँ करने के लिए किया जाता है। बैगिंग और बूस्टिंग आमतौर पर समरूप (होमोजीनियस) बेस लर्नर का उपयोग करते हैं, जबकि स्टैकिंग विषम (हेटरोजीनियस) लर्नरों को शामिल करने की प्रवृत्ति रखता है।

ब्लेंडिंग स्टैकिंग के समान है। ब्लेंडिंग में, डेटा की संरचना प्रशिक्षण, होल्ड-आउट और टेस्ट डेटा से बनी होती है। मेटा लर्नरों को प्रशिक्षण डेटा पर प्रशिक्षित किया जाता है। फिर उनकी भविष्यवाणियों को होल्ड-आउट डेटा के साथ मिलाकर अंतिम मेटा मॉडल बनाया जाता है, जो टेस्ट डेटा का उपयोग कर अंतिम भविष्यवाणियाँ करता है।
वोटिंग में, कई मॉडलों को स्वतंत्र रूप से प्रशिक्षित किया जाता है, और उनकी भविष्यवाणियों को हार्ड वोटिंग, सॉफ्ट वोटिंग, या वेटेड वोटिंग में से किसी एक का उपयोग करके अंतिम भविष्यवाणी बनाने के लिए मिलाया जाता है:
कैस्केडिंग स्टैकिंग दृष्टिकोण का उपयोग करता है लेकिन प्रत्येक लेयर में केवल एक मॉडल के साथ। पहला मॉडल पूरे प्रशिक्षण डेटा पर प्रशिक्षित किया जाता है, और अगला मॉडल अपने से पहले वाले मॉडल के आउटपुट पर प्रशिक्षित होता है। इस रणनीति का लक्ष्य डेटा से जटिल पैटर्न सीखना है, जिससे मॉडल बेहतर भविष्यवाणियाँ कर सके।
पिछले खंडों में एंसेंबल मॉडलों के विभिन्न प्रकारों को कवर किया गया। अब, कुछ लोकप्रिय मॉडलों का संक्षिप्त अवलोकन करते हैं।
रैंडम फॉरेस्ट एक आमतौर पर उपयोग होने वाला मॉडल है जो क्लासिफिकेशन और रिग्रेशन दोनों समस्याएँ हल कर सकता है। रैंडम फॉरेस्ट कई डिसीजन ट्री से बना होता है जिन्हें बैगिंग का उपयोग करके प्रशिक्षित किया जाता है। इसका परिणाम व्यक्तिगत ट्री की भविष्यवाणियों का औसत लेकर तय किया जाता है।
नोड साइज, ट्री की संख्या, और सैंपल की गई फीचर्स की संख्या—ये तीन मुख्य हाइपरपैरामीटर हैं जिन्हें रैंडम फॉरेस्ट को प्रशिक्षित करने से पहले सेट करना होता है।
रैंडम फॉरेस्ट में रैंडमनेस क्या है?
फीचर बैगिंग, जिसे फीचर रैंडमनेस भी कहा जाता है, डिसीजन ट्रीज़ के बीच कम सहसंबंध सुनिश्चित करने के लिए फीचर्स का एक रैंडम सैंपल बनाती है। यह दृष्टिकोण रैंडम फॉरेस्ट को डिसीजन ट्री से अलग करता है, जहाँ डिसीजन ट्री सभी संभावित फीचर स्प्लिट पर विचार करते हैं, जबकि रैंडम फॉरेस्ट केवल फीचर्स के एक सबसेट पर विचार करता है। हमारे रैंडम फॉरेस्ट क्लासिफिकेशन ट्यूटोरियल में पढ़ें।
एक्सट्रीम ग्रेडिएंट बूस्टिंग, या संक्षेप में XGBoost, क्लासिफिकेशन और रिग्रेशन दोनों के लिए उपयोग होता है। XGBoost को स्केलेबल और अत्यधिक कुशल होने के लिए डिज़ाइन किया गया है, और यह ग्रेडिएंट बूस्टिंग डिसीजन ट्रीज़ फ्रेमवर्क को लागू करता है।
यह बड़े पैमाने के डेटा सेट को प्रोसेस करने के लिए उपयुक्त है, और Hadoop, MPI (Message Passing Inference), और SGI (Sun Grid Engine) जैसे प्रमुख डिस्ट्रीब्यूटेड एनवायरनमेंट्स के साथ संगत है। आप हमारे XGBoost ट्यूटोरियल में और जान सकते हैं।
एडाप्टिव बूस्टिंग, या AdaBoost, बाइनरी क्लासिफिकेशन के लिए सफल बूस्टिंग एल्गोरिदम में से एक शुरुआती एंसेंबल बूस्टिंग क्लासिफायर है। यह एडाप्टिव है क्योंकि वेट्स हर इंस्टेंस को फिर से असाइन किए जाते हैं, और गलत वर्गीकृत इंस्टेंस को अधिक वेट दिया जाता है। हमारे अलग ट्यूटोरियल में Python में AdaBoost क्लासिफिकेशन के बारे में अधिक पढ़ें।
अब जब आप एंसेंबल मॉडलिंग की मुख्य अवधारणा और कुछ मॉडलों का कार्य-प्रणाली समझ चुके हैं, तो यह खंड Python का उपयोग करते हुए तकनीकी इम्प्लीमेंटेशन पर केंद्रित होगा।
शुरू करने के लिए, आपके कंप्यूटर पर Python इंस्टॉल होना चाहिए, साथ ही निम्नलिखित लाइब्रेरीज़ भी:
आप इन लाइब्रेरीज़ को Python पैकेज मैनेजर pip का उपयोग करके इस प्रकार इंस्टॉल कर सकते हैं:
pip install scikit-learn
pip install pandas
pip install matplotlib seaborn
उपयोग-मामले को बेहतर ढंग से दर्शाने के लिए, हम DataLab पर उपलब्ध Loan Data का उपयोग करेंगे। इस ट्यूटोरियल का कोड भी DataLab में इस वर्कबुक में उपलब्ध है; आप अपनी खुद की वर्कबुक कॉपी बना सकते हैं और अपने ब्राउज़र में ही कोड को एडिट और रन कर सकते हैं, अपने कंप्यूटर पर कुछ भी इंस्टॉल करने की आवश्यकता नहीं है।
इस डेटा सेट में 9,500 लोन हैं, जिनमें लोन की संरचना, उधारकर्ता की जानकारी, और लोन पूर्ण रूप से चुकाया गया या नहीं, इसका विवरण not.fully.paid कॉलम से मिलता है। पहले पाँच ऑब्ज़र्वेशन नीचे दिखाए गए हैं:
import pandas as pd
loan_data = pd.read_csv("loan_data.csv")
loan_data.head()

info() फ़ंक्शन का उपयोग करने से डेटा के बारे में निम्नलिखित प्रासंगिक जानकारी मिलती है:
purpose के, जो object है और लोन के उद्देश्य का टेक्स्टुअल विवरण देता है।non-null टैग का मतलब है कि किसी भी कॉलम में कोई मिसिंग जानकारी नहीं है।loan_data.info()

हम एक असंतुलित डेटा परिदृश्य देखते हैं, जहाँ श्रेणी 0 (8045 ऑब्ज़र्वेशन) की तुलना में श्रेणी 1 (सिर्फ 1533 ऑब्ज़र्वेशन) बहुत कम है।
print(loan_data['not.fully.paid'].value_counts())
loan_data['not.fully.paid'].value_counts().plot(kind='barh')

ऐसे असंतुलित डेटा का उपयोग कर मॉडल प्रशिक्षण करना समग्र प्रदर्शन को प्रभावित करता है।
इस समस्या का एक समाधान अंडरसैंपलिंग दृष्टिकोण अपनाना है, यानी हम बहुसंख्यक (श्रेणी 0) के ऑब्ज़र्वेशनों की संख्या कम करते हैं। इस परिदृश्य में, श्रेणी 0 के ऑब्ज़र्वेशन उतने ही होंगे जितने श्रेणी 1 के हैं, और प्रक्रिया इस प्रकार है:
पहले श्रेणी 1 की संख्या प्राप्त करें।
श्रेणी 0 से N रैंडम ऑब्ज़र्वेशन चुनें, जहाँ N श्रेणी 1 के डेटा फ्रेम का आकार है।
पिछले दो डेटा फ्रेम को जोड़ दें।
loan_data_class_1 = loan_data[loan_data['not.fully.paid'] == 1]
number_class_1 = len(loan_data_class_1)
loan_data_class_0 = loan_data[loan_data['not.fully.paid'] == 0].sample(number_class_1)
final_loan_data = pd.concat([loan_data_class_1,
loan_data_class_0])
print(final_loan_data.shape)
Diving Deep with Imbalanced Data ट्यूटोरियल असंतुलित डेटा सेट से निपटने की तकनीकों को सीखने के लिए और संसाधन प्रदान करता है।
अंडरसैंपलिंग के बाद हमें मिलता है:
और अंतिम संतुलित वितरण नीचे दिखाया गया है।

डेटा सेट को देखते हुए, हम नोटिस करते हैं कि सभी फीचर्स एक ही स्केल पर नहीं हैं, और KNN जैसे कुछ मशीन लर्निंग मॉडल ऐसे स्केलिंग के प्रति संवेदनशील होते हैं। इस समस्या का समाधान MinMaxScaler मॉड्यूल का उपयोग करके फीचर्स की रेंज को एक ही स्केल पर सामान्यीकृत करके किया जा सकता है। इस मामले में, 0 और 1 के बीच।
सादगी के लिए हम purpose कॉलम को भी हटा देंगे क्योंकि इसके लिए अतिरिक्त प्रीप्रोसेसिंग की आवश्यकता है।
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
# Remove unwanted 'purpose' column and get the data
final_loan_data.drop('purpose', axis=1, inplace=True)
X = final_loan_data.drop('not.fully.paid', axis=1)
normalized_X = scaler.fit_transform(X)
किसी भी प्रेडिक्टिव कार्य की तरह, हमें डेटा को प्रशिक्षण और परीक्षण सेट में विभाजित करने की जरूरत होती है। इस मामले में, हम 77% प्रशिक्षण और शेष 33% परीक्षण के लिए उपयोग करेंगे।
Stratify का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि y टार्गेट वैल्यू प्रशिक्षण और परीक्षण दोनों डेटा में समान रूप से वितरित हो।
from sklearn.model_selection import train_test_split
y = final_loan_data['not.fully.paid']
r_state = 2023
t_size = 0.33
X_train, X_test, y_train, y_test = train_test_split(normalized_X, y,
test_size=t_size,
random_state=r_state,
stratify=y)
सभी मॉडल प्रशिक्षण डेटा पर ट्रेन, परीक्षण डेटा पर प्रेडिक्ट, और मॉडलों के प्रदर्शन का मूल्यांकन—इस क्रम का पालन करेंगे।
इस खंड में बैगिंग मॉडल के रूप में रैंडम फॉरेस्ट का उपयोग किया गया है। सादगी के लिए हम डिफ़ॉल्ट पैरामीटर उपयोग करेंगे।
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
# Define the model
random_forest_model = RandomForestClassifier()
# Fit the random search object to the data
random_forest_model.fit(X_train, y_train)
मॉडल को प्रशिक्षित करने के बाद, प्रदर्शन को accuracy_score फ़ंक्शन का उपयोग करके इस प्रकार निकाला जाता है:
# Make predictions
y_pred = random_forest_model.predict(X_test)
# Get the performance
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
उपरोक्त print स्टेटमेंट 0.6156 जनरेट करता है, जो 61.56% है।
अब आइए इस स्कोर की तुलना ब्लेंडिंग एग्रीगेशन दृष्टिकोण के प्रदर्शन से करें।
ब्लेंडिंग के लिए, हम दो बेस मॉडल का उपयोग करेंगे: एक डिसीजन ट्री और एक K-Nearest Neighbors क्लासिफायर। अंतिम भविष्यवाणियाँ करने के लिए एक अंतिम रिग्रेशन मॉडल उपयोग किया जाएगा।
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
मूल प्रशिक्षण डेटा को एक नए प्रशिक्षण डेटा सेट और एक वैलिडेशन डेटा सेट में विभाजित किया जाता है। बेस मॉडल प्रशिक्षण डेटा पर प्रशिक्षित किए जाते हैं।
X_train, X_val, y_train, y_val = train_test_split(
X_train, y_train,
test_size=t_size,
random_state=r_state)
इसके बाद दो डेटा फ्रेम बेस मॉडलों की भविष्यवाणियों से बनाए जाते हैं:
# Decision Tree Model
dt_model = DecisionTreeClassifier()
dt_model.fit(X_train, y_train)
dt_model_pred_val = dt_model.predict(X_val)
dt_model_pred_test= dt_model.predict(X_test)
dt_model_pred_val = pd.DataFrame(dt_model_pred_val)
dt_model_pred_test = pd.DataFrame(dt_model_pred_test)
# KNN Model
knn_model = KNeighborsClassifier()
knn_model.fit(X_train,y_train)
knn_model_pred_val = knn_model.predict(X_val)
knn_model_pred_test = knn_model.predict(X_test)
knn_model_pred_val = pd.DataFrame(knn_model_pred_val)
knn_model_pred_test = pd.DataFrame(knn_model_pred_test)
अंतिम लॉजिस्टिक रिग्रेशन मॉडल को कंसैटिनेटेड वैलिडेशन डेटा का उपयोग करके बनाया जाता है, और कंसैटिनेटेड टेस्ट डेटा का उपयोग करके इसका मूल्यांकन किया जाता है।
x_val = pd.DataFrame(X_val)
x_test = pd.DataFrame(X_test)
df_val_lr = pd.concat([x_val, knn_model_pred_val,
dt_model_pred_val], axis=1)
df_test_lr = pd.concat([x_test, dt_model_pred_test,
knn_model_pred_test],axis=1)
# Logistic Regression Model
lr_model = LogisticRegression()
lr_model.fit(df_val_lr,y_val)
lr_model.score(df_test_lr,y_test)
.score() फ़ंक्शन का उपयोग डिफ़ॉल्ट रूप से एक्युरेसी स्कोर की गणना करता है और इसे वास्तविक भविष्यवाणियों की आवश्यकता नहीं होती।
प्रदर्शन परिणाम 0.6383 है, जो 63.83% है और प्रारंभिक रैंडम फॉरेस्ट से लगभग 2% अधिक है; इसलिए ब्लेंडिंग मॉडल सर्वश्रेष्ठ प्रदर्शन प्रदान करता है।
हमारे Ensemble Methods in Python और Machine Learning with Tree-Based Models in R कोर्स क्रमशः Python और R में एंसेंबल क्लासिफायर विधियों की दुनिया में गहराई से जाने के लिए आपके मशीन लर्निंग सफर का एक बढ़िया अगला कदम हो सकते हैं।
इस लेख में एंसेंबल मॉडलिंग के विभिन्न प्रकारों के साथ उनकी विशेषताएँ, फायदे और सीमाएँ कवर की गईं। साथ ही, रैंडम फॉरेस्ट, AdaBoost, XGBoost, ग्रेडिएंट बूस्टिंग ट्रीज़ और ग्रेडिएंट बूस्टिंग मशीन जैसे एंसेंबल मॉडल-आधारित एल्गोरिदम के कुछ उदाहरणों का संक्षिप्त अवलोकन भी प्रदान किया गया।
एंसेंबल मॉडल बनाते समय, बेहतर व्यावसायिक अंतर्दृष्टि के लिए उनके गुण-दोषों से अवगत होना महत्वपूर्ण है।
होमोजीनियस लर्नर वे होते हैं जिनके एल्गोरिदम और हाइपरपैरामीटर का प्रकार समान होता है। रैंडम फॉरेस्ट को होमोजीनियस लर्नरों के एंसेंबल के रूप में माना जा सकता है।
इसके विपरीत, हेटरोजीनियस लर्नरों के एल्गोरिदम और हाइपरपैरामीटर अलग-अलग होते हैं। रैंडम फॉरेस्ट, न्यूरल नेटवर्क और KNN किसी एंसेंबल मॉडल के हेटरोजीनियस लर्नर हो सकते हैं।
एंसेंबल मॉडल का उपयोग एकल मॉडल की तुलना में बेहतर भविष्यवाणियाँ करा सकता है।
एंसेंबल मॉडल व्याख्यात्मकता की कमी से ग्रस्त हो सकते हैं, यानी एंसेंबल मॉडल द्वारा सीखी गई जानकारी अंतिम उपयोगकर्ताओं के लिए समझ में नहीं आती।
निम्न परिस्थितियों में लेकिन इन्हीं तक सीमित नहीं: उच्च व्याख्यात्मकता की आवश्यकता, सीमित डेटा, रियल-टाइम बाधा, और उच्च कम्प्यूटेशन लागत—एंसेंबल मॉडलों का उपयोग करने से बचना चाहिए।
बैगिंग, बूस्टिंग, स्टैकिंग, वोटिंग, ब्लेंडिंग और कैस्केडिंग मशीन लर्निंग में एंसेंबल विधियों के मुख्य प्रकार हैं।
Python और मशीन लर्निंग के बारे में और जानें
कोर्स
कोर्स
कोर्स