html
के-नियरेस्ट नेबर (KNN) के साथ मल्टीक्लास वर्गीकरण में महारत हासिल करना: एक व्यापक मार्गदर्शिका
सामग्री सूची
- वर्गीकरण का परिचय
- बाइनरी बनाम मल्टीक्लास वर्गीकरण
- के-नियरेस्ट नेबर (KNN) को समझना
- मल्टीक्लास वर्गीकरण के लिए KNN को लागू करना
-
केस स्टडी: बांग्ला संगीत शैलियों का वर्गीकरण
- KNN मॉडल का निर्माण और मूल्यांकन
- निष्कर्ष
- सामान्य प्रश्न
वर्गीकरण का परिचय
वर्गीकरण एक पर्यवेक्षित शिक्षण तकनीक है जहाँ लक्ष्य दिया गया इनपुट डेटा के लिए श्रेणात्मक लेबल की भविष्यवाणी करना होता है। इसे विभिन्न अनुप्रयोगों में व्यापक रूप से उपयोग किया जाता है, जैसे ईमेल में स्पैम पहचान, छवि पहचान, चिकित्सा निदान, और अधिक। वर्गीकरण कार्यों को मोटे तौर पर दो प्रकारों में वर्गीकृत किया जा सकता है: बाइनरी वर्गीकरण और मल्टीक्लास वर्गीकरण.
बाइनरी बनाम मल्टीक्लास वर्गीकरण
- बाइनरी वर्गीकरण: इसमें डेटा को दो विशिष्ट वर्गों में श्रेणीबद्ध करना शामिल है। उदाहरण के लिए, यह निर्धारित करना कि एक ईमेल स्पैम है या स्पैम नहीं है।
- मल्टीक्लास वर्गीकरण: यह बाइनरी वर्गीकरण को उन परिदृश्यों में विस्तारित करता है जहाँ दो से अधिक वर्ग होते हैं। उदाहरण के लिए, विभिन्न संगीत शैलियों या वाहनों के प्रकारों का वर्गीकरण।
अंतर को समझना महत्वपूर्ण है क्योंकि यह एल्गोरिदम और मूल्यांकन मीट्रिक के चयन को प्रभावित करता है।
के-नियरेस्ट नेबर (KNN) को समझना
के-नियरेस्ट नेबर (KNN) एक सरल, फिर भी शक्तिशाली मशीन लर्निंग एल्गोरिदम है जो वर्गीकरण और प्रतिगमन दोनों कार्यों के लिए उपयोग किया जाता है। यहाँ KNN कैसे काम करता है का विवरण दिया गया है:
- इंस्टेंस-आधारित शिक्षण: KNN एक स्पष्ट मॉडल नहीं बनाता है। इसके बजाय, यह प्रशिक्षण डेटासेट को याद रखता है।
- दूरी मापन: भविष्यवाणी करने के लिए, KNN नए डेटा बिंदु और प्रशिक्षण सेट के सभी बिंदुओं के बीच दूरी की गणना करता है।
- वोटिंग मेकनिज्म: वर्गीकरण के लिए, KNN 'k' सबसे निकटतम पड़ोसियों का चयन करता है और उनमें से सबसे सामान्य वर्ग को नए डेटा बिंदु को सौंपता है।
- 'k' का चयन: पड़ोसियों की संख्या, 'k', एक महत्वपूर्ण हाइपरपैरामीटर है। छोटा 'k' मॉडल को शोर के प्रति संवेदनशील बना सकता है, जबकि बड़ा 'k' निर्णय सीमाओं को समतल कर सकता है।
KNN विशेष रूप से मल्टीक्लास वर्गीकरण के लिए प्रभावी है क्योंकि यह वोटिंग के माध्यम से कई वर्गों को संभालने की स्वाभाविक क्षमता रखता है।
मल्टीक्लास वर्गीकरण के लिए KNN को लागू करना
मल्टीक्लास वर्गीकरण के लिए KNN को लागू करने में कई चरण शामिल हैं, जिनमें डेटा पूर्व-संसाधन, फीचर चयन, स्केलिंग, और मॉडल मूल्यांकन शामिल हैं। आइए इन चरणों को एक व्यावहारिक केस स्टडी के माध्यम से देखें।
केस स्टडी: बांग्ला संगीत शैलियों का वर्गीकरण
इस अनुभाग में, हम KNN का उपयोग करके बांग्ला संगीत डेटासेट पर मल्टीक्लास वर्गीकरण के एक व्यावहारिक कार्यान्वयन के माध्यम से चलेंगे। उद्देश्य विभिन्न ऑडियो फीचर्स के आधार पर गीतों को विभिन्न शैलियों में वर्गीकृत करना है।
डेटासेट अवलोकन
बांग्ला संगीत डेटासेट में 1,742 गीतों का डेटा शामिल है जिन्हें छह विशिष्ट शैलियों में वर्गीकृत किया गया है। प्रत्येक गीत का वर्णन 31 फीचर्स का उपयोग करके किया गया है, जिसमें शून्य क्रॉसिंग दर, स्पेक्ट्रल सेंट्रोइड, क्रोमा फ्रिक्वेंसी, और MFCCs (मेल फ्रीक्वेंसी सैप्स्ट्रल कोएफ़िशिएंट्स) जैसे ऑडियो गुण शामिल हैं।
मुख्य फीचर्स:
- संख्यात्मक फीचर्स: जैसे शून्य क्रॉसिंग, स्पेक्ट्रल सेंट्रोइड, स्पेक्ट्रल रोलऑफ, आदि।
- श्रेणीबद्ध फीचर्स: फ़ाइल नाम और लेबल जो शैली को सूचित करते हैं।
लक्ष्य चर: संगीत श्रेणी को इंगित करने वाला शैली लेबल (label
)।
डेटा पूर्व-संसाधन चरण
डेटा पूर्व-संसाधन मशीन लर्निंग वर्कफ़्लोज़ में एक महत्वपूर्ण चरण है। उचित पूर्व-संसाधन यह सुनिश्चित करता है कि डेटा साफ, सुसंगत, और मॉडल प्रशिक्षण के लिए उपयुक्त है।
गुम डेटा को संभालना
क्यों यह महत्वपूर्ण है: गुम डेटा परिणामों को विकृत कर सकता है और मॉडल की प्रभावशीलता को कम कर सकता है। डेटा अखंडता बनाए रखने के लिए गुम मानों को संबोधित करना आवश्यक है।
चरण:
- संख्यात्मक डेटा:
- मीन इम्प्यूटेशन रणनीति का उपयोग करके गुम मानों को भरें।
SimpleImputer
का उपयोग करके strategy='mean'
के साथ कार्यान्वित किया गया।
- श्रेणीबद्ध डेटा:
- मॉस्ट फ्रीक्वेंट इम्प्यूटेशन रणनीति का उपयोग करके गुम मानों को भरें।
SimpleImputer
का उपयोग करके strategy='most_frequent'
के साथ कार्यान्वित किया गया।
पाइथन कार्यान्वयन:
1234567891011121314
import numpy as npfrom sklearn.impute import SimpleImputer # Handling numeric dataimp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')numerical_cols = list(np.where((X.dtypes == np.int64) | (X.dtypes == np.float64))[0])imp_mean.fit(X.iloc[:, numerical_cols])X.iloc[:, numerical_cols] = imp_mean.transform(X.iloc[:, numerical_cols]) # Handling categorical dataimp_freq = SimpleImputer(missing_values=np.nan, strategy='most_frequent')string_cols = list(np.where((X.dtypes == object))[0])imp_freq.fit(X.iloc[:, string_cols])X.iloc[:, string_cols] = imp_freq.transform(X.iloc[:, string_cols])
श्रेणीबद्ध चर को एन्कोड करना
क्यों यह महत्वपूर्ण है: मशीन लर्निंग मॉडल को संख्यात्मक इनपुट की आवश्यकता होती है। श्रेणीबद्ध चर को संख्यात्मक प्रारूप में परिवर्तित करना आवश्यक है।
दो मुख्य एन्कोडिंग विधियाँ:
- लेबल एन्कोडिंग:
- प्रत्येक श्रेणी को एक अद्वितीय पूर्णांक सौंपता है।
- बाइनरी या ऑर्डिनल श्रेणीबद्ध चर के लिए उपयुक्त है।
- वन-हॉट एन्कोडिंग:
- प्रत्येक श्रेणी के लिए बाइनरी कॉलम बनाता है।
- दो से अधिक श्रेणियों वाले नाममात्र श्रेणीबद्ध चर के लिए उपयुक्त है।
एन्कोडिंग रणनीति:
- दो श्रेणियों वाले या एक सीमा से अधिक श्रेणियों वाले वर्ग: लेबल एन्कोडिंग लागू करें।
- अन्य श्रेणियाँ: वन-हॉट एन्कोडिंग लागू करें।
पाइथन कार्यान्वयन:
123456789101112131415161718192021222324252627282930
from sklearn.compose import ColumnTransformerfrom sklearn.preprocessing import OneHotEncoder, LabelEncoder # Label Encoding Functiondef LabelEncoderMethod(series): le = LabelEncoder() return le.fit_transform(series) # One-Hot Encoding Functiondef OneHotEncoderMethod(indices, data): columnTransformer = ColumnTransformer([('encoder', OneHotEncoder(), indices)], remainder='passthrough') return columnTransformer.fit_transform(data) # Encoding Selection Functiondef EncodingSelection(X, threshold=10): string_cols = list(np.where((X.dtypes == object))[0]) one_hot_encoding_indices = [] for col in string_cols: unique_values = len(pd.unique(X[X.columns[col]])) if unique_values == 2 or unique_values > threshold: X[X.columns[col]] = LabelEncoderMethod(X[X.columns[col]]) else: one_hot_encoding_indices.append(col) X = OneHotEncoderMethod(one_hot_encoding_indices, X) return X # Apply Encoding SelectionX = EncodingSelection(X)
फीचर चयन
क्यों यह महत्वपूर्ण है: सही फीचर्स का चयन मॉडल के प्रदर्शन को बेहतर बनाता है, अप्रासंगिक या अतिश redundancy डेटा को समाप्त करता है, ओवरफिटिंग को कम करता है, और कम्प्यूटेशनल दक्षता को बढ़ाता है।
फीचर चयन विधि का उपयोग किया गया:
- SelectKBest with Chi-Squared Test:
- प्रत्येक फीचर और लक्ष्य चर के बीच संबंध का मूल्यांकन करता है।
- सबसे उच्च स्कोर वाले शीर्ष 'k' फीचर्स का चयन करता है।
पाइथन कार्यान्वयन:
123456789101112131415
from sklearn.feature_selection import SelectKBest, chi2from sklearn.preprocessing import MinMaxScaler # Initialize SelectKBestkbest = SelectKBest(score_func=chi2, k=12)scaler = MinMaxScaler() # Fit and transform the dataX_scaled = scaler.fit_transform(X)kbest.fit(X_scaled, y) # Get top featuresbest_features = np.argsort(kbest.scores_)[-12:]features_to_delete = np.argsort(kbest.scores_)[:-12]X = np.delete(X, features_to_delete, axis=1)
फीचर स्केलिंग
क्यों यह महत्वपूर्ण है: स्केलिंग यह सुनिश्चित करती है कि सभी फीचर्स KNN में दूरी की गणनाओं में समान रूप से योगदान दें, जिससे बड़ी स्केल वाले फीचर्स की दूरियों पर अत्यधिक प्रभाव नहीं पड़े।
स्केलिंग विधि का उपयोग किया गया:
- स्टैंडर्डाइज़ेशन:
- डेटा को शून्य के औसत और एक मानक विचलन के साथ ट्रांसफॉर्म करता है।
StandardScaler
का उपयोग करके कार्यान्वित किया गया।
पाइथन कार्यान्वयन:
12345678910111213
from sklearn.preprocessing import StandardScalerfrom sklearn.model_selection import train_test_split # Split the datasetX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=1) # Initialize and fit the scalerscaler = StandardScaler(with_mean=False)scaler.fit(X_train) # Transform the dataX_train = scaler.transform(X_train)X_test = scaler.transform(X_test)
KNN मॉडल का निर्माण और मूल्यांकन
डेटा को पूर्व-संसाधित और तैयार करने के बाद, अगला कदम KNN मॉडल का निर्माण करना और इसके प्रदर्शन का मूल्यांकन करना है।
मॉडल प्रशिक्षण
चरण:
- KNN क्लासिफायर को इनिशियलाइज़ करें:
- पड़ोसियों की संख्या सेट करें (इस मामले में k=8)।
- मॉडल को प्रशिक्षित करें:
- प्रशिक्षण डेटा पर KNN क्लासिफायर को फिट करें।
- भविष्यवाणी करें:
- ट्रेन किए गए मॉडल का उपयोग करके टेस्ट सेट पर भविष्यवाणियाँ करें।
- मूल्यांकन करें:
- मॉडल के प्रदर्शन का आकलन करने के लिए सटीकता स्कोर की गणना करें।
पाइथन कार्यान्वयन:
123456789101112131415
from sklearn.neighbors import KNeighborsClassifierfrom sklearn.metrics import accuracy_score # Initialize KNN with k=8knnClassifier = KNeighborsClassifier(n_neighbors=8) # Train the modelknnClassifier.fit(X_train, y_train) # Make predictionsy_pred = knnClassifier.predict(X_test) # Evaluate accuracyaccuracy = accuracy_score(y_pred, y_test)print(f"Model Accuracy: {accuracy:.2f}")
आउटपुट:
1
Model Accuracy: 0.68
व्याख्या: KNN मॉडल ने लगभग 68% की सटीकता प्राप्त की, जिसका अर्थ है कि इसने टेस्ट सेट में 68% गीतों को सही ढंग से वर्गीकृत किया।
हाइपरपैरामीटर ट्यूनिंग
'k' की संख्या को समायोजित करना मॉडल के प्रदर्शन को काफी प्रभावित कर सकता है। बायस और वैरिएंस के बीच संतुलन खोजने के लिए विभिन्न 'k' मूल्यों के साथ प्रयोग करना सलाहजनक है।
1234567
# Experiment with different k valuesfor k in range(3, 21, 2): knn = KNeighborsClassifier(n_neighbors=k) knn.fit(X_train, y_train) y_pred = knn.predict(X_test) accuracy = accuracy_score(y_pred, y_test) print(f"k={k}, Accuracy={accuracy:.2f}")
नमूना आउटपुट:
123456
k=3, Accuracy=0.65k=5, Accuracy=0.66k=7, Accuracy=0.67k=9, Accuracy=0.68...k=19, Accuracy=0.65
सर्वोत्तम प्रदर्शन: इस परिदृश्य में, k-मूल्य 9 ने सबसे अधिक सटीकता प्राप्त की।
निष्कर्ष
मल्टीक्लास वर्गीकरण मशीन लर्निंग में एक मौलिक कार्य है, जो डेटा बिंदुओं को कई वर्गों में श्रेणीबद्ध करने को सक्षम बनाता है। के-नियरेस्ट नेबर (KNN) एल्गोरिदम, जिसकी सरलता और प्रभावशीलता के लिए जाना जाता है, ऐसे कार्यों के लिए एक मजबूत प्रतिद्वंद्वी सिद्ध होता है। इस व्यापक मार्गदर्शिका के माध्यम से, हमने मल्टीक्लास वर्गीकरण के लिए KNN को लागू करने की पेचीदगियों का पता लगाया है, जिसमें डेटा पूर्व-संसाधन, फीचर चयन, और मॉडल मूल्यांकन के महत्व पर जोर दिया है।
गुम डेटा को संभालने और श्रेणीबद्ध चर को एन्कोड करने से लेकर प्रासंगिक फीचर्स का चयन और स्केलिंग तक की व्यवस्थित दृष्टिकोण का पालन करके, आप अपने मल्टीक्लास वर्गीकरण समस्याओं के लिए KNN की पूरी क्षमता का लाभ उठा सकते हैं। याद रखें, सफल मॉडल की कुंजी सिर्फ एल्गोरिदम में नहीं बल्कि डेटा की गुणवत्ता और तैयारी में भी निहित है।
सामान्य प्रश्न
1. बाइनरी और मल्टीक्लास वर्गीकरण के बीच मुख्य अंतर क्या है?
बाइनरी वर्गीकरण में डेटा को दो विशिष्ट वर्गों में श्रेणीबद्ध करना शामिल है, जबकि मल्टीक्लास वर्गीकरण इसे दो से अधिक वर्गों वाले परिदृश्यों में विस्तारित करता है।
2. KNN के लिए फीचर स्केलिंग क्यों महत्वपूर्ण है?
KNN निकटतम पड़ोसियों को निर्धारित करने के लिए दूरी की गणनाओं पर निर्भर करता है। बिना स्केलिंग के, बड़ी स्केल वाले फीचर्स दूरी मीट्रिक पर अनुपातहीन प्रभाव डाल सकते हैं, जिससे पूर्वाग्रही भविष्यवाणियाँ हो सकती हैं।
3. KNN में पड़ोसियों की आदर्श संख्या (k) कैसे चुनें?
आदर्श 'k' बायस और वैरिएंस के बीच संतुलन बनाता है। यह आमतौर पर प्रयोग के माध्यम से निर्धारित किया जाता है, जैसे क्रॉस-वैलिडेशन, ताकि उस 'k' मान की पहचान की जा सके जो सबसे अधिक सटीकता प्रदान करता है।
4. क्या KNN संख्यात्मक और श्रेणीबद्ध दोनों डेटा को संभाल सकता है?
KNN मुख्य रूप से संख्यात्मक डेटा के साथ काम करता है। श्रेणीबद्ध चर को KNN लागू करने से पहले संख्यात्मक प्रारूप में एन्कोड करना आवश्यक है।
5. मल्टीक्लास वर्गीकरण के लिए KNN के कुछ विकल्प क्या हैं?
विकल्पों में Support Vector Machines (SVM), Decision Trees, Random Forests, और Neural Networks जैसे एल्गोरिदम शामिल हैं, जिनमें से प्रत्येक के अपने फायदे और उपयुक्त उपयोग मामलों होते हैं।