html
पाइथन में बहु-कक्षा वर्गीकरण के लिए लॉजिस्टिक रिग्रेशन का कार्यान्वयन: एक व्यापक मार्गदर्शिका
मशीन लर्निंग के लगातार विकसित हो रहे क्षेत्र में, बहु-कक्षा वर्गीकरण एक महत्वपूर्ण कार्य के रूप में खड़ा होता है, जो डेटासेट के भीतर कई श्रेणियों के बीच अंतर करने में सक्षम बनाता है। उपलब्ध अनेकों एल्गोरिदमों में, लॉजिस्टिक रिग्रेशन ऐसी समस्याओं को हल करने के लिए एक मजबूत और विवेकी विकल्प के रूप में उभरता है। इस मार्गदर्शिका में, हम पाइथन का उपयोग करके बहु-कक्षा वर्गीकरण के लिए लॉजिस्टिक रिग्रेशन को लागू करने में गहराई से उतरते हैं, जिसमें Scikit-learn जैसे टूल और Kaggle से प्राप्त बंगला संगीत डेटासेट का उपयोग किया गया है।
सामग्री तालिका
- बहु-कक्षा वर्गीकरण का परिचय
- डेटासेट को समझना
- डेटा पूर्व-संसाधन
- फीचर चयन
- मॉडल प्रशिक्षण और मूल्यांकन
- तुलनात्मक विश्लेषण
- निष्कर्ष
- पूर्ण पाइथन कार्यान्वयन
बहु-कक्षा वर्गीकरण का परिचय
बहु-कक्षा वर्गीकरण एक प्रकार का वर्गीकरण कार्य है जहां प्रत्येक उदाहरण को तीन या उससे अधिक श्रेणियों में से एक में वर्गीकृत किया जाता है। द्विआधारी वर्गीकरण के विपरीत, जो दो श्रेणियों के साथ काम करता है, बहु-कक्षा वर्गीकरण विशेष चुनौतियां प्रस्तुत करता है और ऐसे एल्गोरिदमों की आवश्यकता होती है जो कई श्रेणियों के बीच प्रभावी ढंग से अंतर कर सकें।
लॉजिस्टिक रिग्रेशन पारंपरिक रूप से द्विआधारी वर्गीकरण के लिए जाना जाता है लेकिन इसे वन-वर्स-रेस्ट (OvR) या बहुसंख्यक दृष्टिकोण जैसी रणनीतियों का उपयोग करके बहु-कक्षा परिदृश्यों को संभालने के लिए विस्तारित किया जा सकता है। इसकी सरलता, विवेचनशीलता, और दक्षता इसे विभिन्न वर्गीकरण कार्यों के लिए एक लोकप्रिय विकल्प बनाती है।
डेटासेट को समझना
इस मार्गदर्शिका के लिए, हम Bangla Music Dataset का उपयोग करते हैं, जिसमें बंगला गीतों से निकाले गए फीचर्स शामिल हैं। मुख्य उद्देश्य इन फीचर्स के आधार पर गीतों को शैलियों में वर्गीकृत करना है। डेटासेट में स्पेक्ट्रल सेंट्रोइड, स्पेक्ट्रल बैंडविड्थ, क्रोमा आवृत्ति, और मेल-फ्रीक्वेंसी सेप्सट्रल गुणांक (MFCCs) जैसी विभिन्न ऑडियो विशेषताएं शामिल हैं।
डेटासेट स्रोत: Kaggle - Bangla Music Dataset
नमूना डेटा अवलोकन
12345
import pandas as pd # Load the datasetdata = pd.read_csv('bangla.csv')print(data.tail())
123456789101112131415161718192021222324252627282930313233343536
file_name zero_crossing \1737 Tumi Robe Nirobe, Artist - DWIJEN MUKHOPADHYA... 78516 1738 TUMI SANDHYAR MEGHMALA Srikanta Acharya Rabi... 176887 1739 Utal Haowa Laglo Amar Gaaner Taranite Sagar S... 133326 1740 venge mor ghorer chabi by anima roy.. album ro... 179932 1741 vora thak vora thak by anima roy ( 160kbps ).mp3 175244 spectral_centroid spectral_rolloff spectral_bandwidth \1737 800.797115 1436.990088 1090.389766 1738 1734.844686 3464.133429 1954.831684 1739 1380.139172 2745.410904 1775.717428 1740 1961.435018 4141.554401 2324.507425 1741 1878.657768 3877.461439 2228.147952 chroma_frequency rmse delta melspectogram tempo \1737 0.227325 0.108344 2.078194e-08 3.020211 117.453835 1738 0.271189 0.124934 5.785562e-08 4.098559 129.199219 1739 0.263462 0.111411 4.204189e-08 3.147722 143.554688 1740 0.261823 0.168673 3.245319e-07 7.674615 143.554688 1741 0.232985 0.311113 1.531590e-07 26.447679 129.199219 ... mfcc11 mfcc12 mfcc13 mfcc14 mfcc15 mfcc16 \1737 ... -2.615630 2.119485 -12.506942 -1.148996 0.090582 -8.694072 1738 ... 1.693247 -4.076407 -2.017894 -7.419591 -0.488603 -8.690254 1739 ... 2.487961 -3.434017 -6.099467 -6.008315 -7.483330 -2.908477 1740 ... 1.192605 -13.142963 0.281834 -5.981567 -1.066383 0.677886 1741 ... -5.636770 -12.078487 1.692546 -6.005674 1.502304 -0.415201 mfcc17 mfcc18 mfcc19 label 1737 -6.597594 2.925687 -6.154576 rabindra 1738 -7.090489 -6.530357 -5.593533 rabindra 1739 0.783345 -3.394053 -3.157621 rabindra 1740 0.803132 -3.304548 4.309490 rabindra 1741 2.389623 -3.135799 0.225479 rabindra [5 rows x 31 columns]
डेटा पूर्व-संसाधन
एक विश्वसनीय मशीन लर्निंग मॉडल बनाने के लिए प्रभावी डेटा पूर्व-संसाधन अत्यंत महत्वपूर्ण है। यह अनुभाग मॉडलिंग के लिए डेटा तैयार करने के लिए उठाए गए कदमों की रूपरेखा प्रस्तुत करता है।
गुम डेटा को संभालना
गुम डेटा मशीन लर्निंग मॉडल के प्रदर्शन को प्रतिकूल रूप से प्रभावित कर सकता है। गुम मानों की पहचान करना और उन्हें उपयुक्त रूप से संभालना महत्वपूर्ण है।
संख्यात्मक डेटा
संख्यात्मक फीचर्स के लिए, गुम मानों को माध्य रणनीति का उपयोग करके पूरित किया जाता है।
123456789101112
import numpy as npfrom sklearn.impute import SimpleImputer # Identify numerical columnsnumerical_cols = list(np.where((X.dtypes == np.int64) | (X.dtypes == np.float64))[0]) # Initialize SimpleImputer for mean strategyimp_mean = SimpleImputer(missing_values=np.nan, strategy='mean') # Fit and transform the dataimp_mean.fit(X.iloc[:, numerical_cols])X.iloc[:, numerical_cols] = imp_mean.transform(X.iloc[:, numerical_cols])
श्रेणीबद्ध डेटा
श्रेणीबद्ध फीचर्स के लिए, गुम मानों को सबसे अधिक बार रणनीति का उपयोग करके पूरित किया जाता है।
123456789
# Identify string columnsstring_cols = list(np.where((X.dtypes == object))[0]) # Initialize SimpleImputer for most frequent strategyimp_freq = SimpleImputer(missing_values=np.nan, strategy='most_frequent') # Fit and transform the dataimp_freq.fit(X.iloc[:, string_cols])X.iloc[:, string_cols] = imp_freq.transform(X.iloc[:, string_cols])
श्रेणीबद्ध चर को एन्कोड करना
मशीन लर्निंग एल्गोरिदमों को संख्यात्मक इनपुट की आवश्यकता होती है। इसलिए, श्रेणीबद्ध चरों को उपयुक्त रूप से एन्कोड करना आवश्यक है।
वन-हॉट एन्कोडिंग
उच्च संख्या में अद्वितीय श्रेणियों वाले श्रेणीबद्ध फीचर्स के लिए, वन-हॉट एन्कोडिंग का उपयोग किया जाता है ताकि क्रमिक संबंधों के परिचय से बचा जा सके।
123456789
from sklearn.compose import ColumnTransformerfrom sklearn.preprocessing import OneHotEncoder def OneHotEncoderMethod(indices, data): columnTransformer = ColumnTransformer( [('encoder', OneHotEncoder(), indices)], remainder='passthrough' ) return columnTransformer.fit_transform(data)
लेबल एन्कोडिंग
द्विआधारी श्रेणीबद्ध फीचर्स या उन फीचर्स जिनमें श्रेणियों की संख्या प्रबंधनीय होती है, उन पर लेबल एन्कोडिंग का उपयोग किया जाता है।
123456
from sklearn import preprocessing def LabelEncoderMethod(series): le = preprocessing.LabelEncoder() le.fit(series) return le.transform(series)
X के लिए एन्कोडिंग चयन
प्रत्येक फीचर में अद्वितीय श्रेणियों की संख्या के आधार पर एन्कोडिंग रणनीतियों का संयोजन लागू किया जाता है।
1234567891011121314151617181920
def EncodingSelection(X, threshold=10): # Step 01: Select the string columns string_cols = list(np.where((X.dtypes == object))[0]) one_hot_encoding_indices = [] # Step 02: Label encode columns with 2 or more than 'threshold' categories for col in string_cols: length = len(pd.unique(X[X.columns[col]])) if length == 2 or length > threshold: X[X.columns[col]] = LabelEncoderMethod(X[X.columns[col]]) else: one_hot_encoding_indices.append(col) # Step 03: One-hot encode the remaining columns X = OneHotEncoderMethod(one_hot_encoding_indices, X) return X # Apply encoding selectionX = EncodingSelection(X)print(f"Encoded feature shape: {X.shape}")
आउटपुट:
1
Encoded feature shape: (1742, 30)
फीचर चयन
सबसे प्रासंगिक फीचर्स का चयन मॉडल के प्रदर्शन को बढ़ाता है और संगणनात्मक जटिलता को कम करता है।
12345678910111213141516171819202122232425
from sklearn.feature_selection import SelectKBest, chi2from sklearn import preprocessing # Initialize Min-Max ScalerMMS = preprocessing.MinMaxScaler() # Define number of best features to selectK_features = 12 # Scale the featuresx_temp = MMS.fit_transform(X) # Apply SelectKBest with chi-squared scoringkbest = SelectKBest(score_func=chi2, k=10)x_temp = kbest.fit(x_temp, y) # Identify top featuresbest_features = np.argsort(x_temp.scores_)[-K_features:] # Determine features to deletefeatures_to_delete = np.argsort(x_temp.scores_)[:-K_features] # Reduce X to selected featuresX = np.delete(X, features_to_delete, axis=1)print(f"Reduced feature shape: {X.shape}")
आउटपुट:
1
Reduced feature shape: (1742, 12)
मॉडल प्रशिक्षण और मूल्यांकन
डेटा को पूर्व-संसाधित करने और फीचर्स का चयन करने के बाद, हम अपने मॉडलों को प्रशिक्षित और मूल्यांकन करने के लिए आगे बढ़ते हैं।
K-निकटतम पड़ोसी (KNN) वर्गीकार
KNN एक सरल, उदाहरण-आधारित सीखने का एल्गोरिदम है जो वर्गीकरण कार्यों के लिए एक आधाररेखा के रूप में कार्य कर सकता है।
123456789101112131415
from sklearn.neighbors import KNeighborsClassifierfrom sklearn.metrics import accuracy_score # Initialize KNN with 8 neighborsknnClassifier = KNeighborsClassifier(n_neighbors=8) # Train the modelknnClassifier.fit(X_train, y_train) # Make predictionsy_pred_knn = knnClassifier.predict(X_test) # Evaluate accuracyknn_accuracy = accuracy_score(y_pred_knn, y_test)print(f"KNN Accuracy: {knn_accuracy:.2f}")
आउटपुट:
1
KNN Accuracy: 0.68
लॉजिस्टिक रिग्रेशन मॉडल
लॉजिस्टिक रिग्रेशन को यहां बहुसंख्यक दृष्टिकोण का उपयोग करके बहु-कक्षा वर्गीकरण को संभालने के लिए विस्तारित किया गया है।
1234567891011121314
from sklearn.linear_model import LogisticRegression # Initialize Logistic Regression with increased iterationsLRM = LogisticRegression(random_state=0, max_iter=1000, multi_class='multinomial', solver='lbfgs') # Train the modelLRM.fit(X_train, y_train) # Make predictionsy_pred_lr = LRM.predict(X_test) # Evaluate accuracylr_accuracy = accuracy_score(y_pred_lr, y_test)print(f"Logistic Regression Accuracy: {lr_accuracy:.2f}")
आउटपुट:
1
Logistic Regression Accuracy: 0.65
तुलनात्मक विश्लेषण
दोनों मॉडलों का मूल्यांकन करने पर, इस विशेष परिदृश्य में K-निकटतम पड़ोसी वर्गीकार लॉजिस्टिक रिग्रेशन से बेहतर प्रदर्शन करता है।
- KNN सटीकता: 67.9%
- लॉजिस्टिक रिग्रेशन सटीकता: 65.0%
हालांकि, निम्नलिखित टिप्पणियों को ध्यान में रखना आवश्यक है:
- इटरेशन सीमा चेतावनी: प्रारंभ में, लॉजिस्टिक रिग्रेशन को संगम समस्याओं का सामना करना पड़ा, जिन्हें
max_iter
पैरामीटर को 300 से बढ़ाकर 1000 करने से हल किया गया।
- मॉडल प्रदर्शन: हालांकि KNN ने उच्च सटीकता दिखाई, लॉजिस्टिक रिग्रेशन बेहतर विवेचनशीलता प्रदान करता है और बड़े डेटासेट के साथ अधिक स्केलेबल हो सकता है।
भविष्य के सुधार:
- हाइपरपैरामीटर ट्यूनिंग: लॉजिस्टिक रिग्रेशन में
C
, penalty
, और अन्य पैरामीटर्स को समायोजित करने से प्रदर्शन में सुधार हो सकता है।
- क्रॉस-वैलिडेशन: क्रॉस-वैलिडेशन तकनीकों को लागू करने से मॉडल प्रदर्शन का अधिक मजबूत मूल्यांकन प्रदान किया जा सकता है।
- फीचर इंजीनियरिंग: अधिक सूचनात्मक फीचर्स को बनाना या चुनना वर्गीकरण सटीकता को बढ़ा सकता है।
निष्कर्ष
यह व्यापक मार्गदर्शिका पाइथन में बहु-कक्षा वर्गीकरण के लिए लॉजिस्टिक रिग्रेशन के कार्यान्वयन को दर्शाती है, जो डेटा पूर्व-संसाधन से लेकर मॉडल मूल्यांकन तक की पूरी प्रक्रिया को उजागर करती है। जबकि इस मामले में KNN ने बेहतर सटीकता प्रदर्शित की, लॉजिस्टिक रिग्रेशन एक शक्तिशाली उपकरण बना रहता है, विशेष रूप से जब विवेचनशीलता प्राथमिकता हो। संरचित पूर्व-संसाधन, फीचर चयन, और विचारशील मॉडल प्रशिक्षण का पालन करके, विभिन्न क्षेत्रों में बहु-कक्षा वर्गीकरण समस्याओं को प्रभावी ढंग से हल किया जा सकता है।
पूर्ण पाइथन कार्यान्वयन
नीचे सभी चर्चा किए गए चरणों को समेटने वाला पूर्ण पाइथन कोड दिया गया है:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
# Import necessary librariesimport pandas as pdimport numpy as npimport seaborn as snsfrom sklearn.impute import SimpleImputerfrom sklearn.compose import ColumnTransformerfrom sklearn.preprocessing import OneHotEncoder, LabelEncoder, StandardScaler, MinMaxScalerfrom sklearn.feature_selection import SelectKBest, chi2from sklearn.model_selection import train_test_splitfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score # Load the datasetdata = pd.read_csv('bangla.csv') # Separate features and targetX = data.iloc[:, :-1]y = data.iloc[:, -1] # Handling missing data - Numeric typenumerical_cols = list(np.where((X.dtypes == np.int64) | (X.dtypes == np.float64))[0])imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')imp_mean.fit(X.iloc[:, numerical_cols])X.iloc[:, numerical_cols] = imp_mean.transform(X.iloc[:, numerical_cols]) # Handling missing string datastring_cols = list(np.where((X.dtypes == object))[0])imp_freq = SimpleImputer(missing_values=np.nan, strategy='most_frequent')imp_freq.fit(X.iloc[:, string_cols])X.iloc[:, string_cols] = imp_freq.transform(X.iloc[:, string_cols]) # Encoding methodsdef OneHotEncoderMethod(indices, data): columnTransformer = ColumnTransformer( [('encoder', OneHotEncoder(), indices)], remainder='passthrough' ) return columnTransformer.fit_transform(data) def LabelEncoderMethod(series): le = LabelEncoder() le.fit(series) return le.transform(series) def EncodingSelection(X, threshold=10): string_cols = list(np.where((X.dtypes == object))[0]) one_hot_encoding_indices = [] for col in string_cols: length = len(pd.unique(X[X.columns[col]])) if length == 2 or length > 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)print(f"Encoded feature shape: {X.shape}") # Feature selectionMMS = MinMaxScaler()K_features = 12x_temp = MMS.fit_transform(X)kbest = SelectKBest(score_func=chi2, k=10)x_temp = kbest.fit(x_temp, y)best_features = np.argsort(x_temp.scores_)[-K_features:]features_to_delete = np.argsort(x_temp.scores_)[:-K_features]X = np.delete(X, features_to_delete, axis=1)print(f"Reduced feature shape: {X.shape}") # Train-test splitX_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.20, random_state=1)print(f"Training set shape: {X_train.shape}") # Feature scalingsc = StandardScaler(with_mean=False)sc.fit(X_train)X_train = sc.transform(X_train)X_test = sc.transform(X_test)print(f"Scaled Training set shape: {X_train.shape}")print(f"Scaled Test set shape: {X_test.shape}") # Building KNN modelknnClassifier = KNeighborsClassifier(n_neighbors=8)knnClassifier.fit(X_train, y_train)y_pred_knn = knnClassifier.predict(X_test)knn_accuracy = accuracy_score(y_pred_knn, y_test)print(f"KNN Accuracy: {knn_accuracy:.2f}") # Building Logistic Regression modelLRM = LogisticRegression(random_state=0, max_iter=1000, multi_class='multinomial', solver='lbfgs')LRM.fit(X_train, y_train)y_pred_lr = LRM.predict(X_test)lr_accuracy = accuracy_score(y_pred_lr, y_test)print(f"Logistic Regression Accuracy: {lr_accuracy:.2f}")
नोट: कोड निष्पादित करने से पहले सुनिश्चित करें कि डेटासेट bangla.csv
सही ढंग से आपके कार्य निर्देशिका में रखा गया है।
कीवर्ड्स
- लॉजिस्टिक रिग्रेशन
- बहु-कक्षा वर्गीकरण
- पाइथन ट्यूटोरियल
- मशीन लर्निंग
- डेटा पूर्व-संसाधन
- फीचर चयन
- K-निकटतम पड़ोसी (KNN)
- Scikit-learn
- डेटा साइंस
- पाइथन मशीन लर्निंग