पाइथन में CAP वक्र के साथ मॉडल तुलना में महारत हासिल करना: एक व्यापक मार्गदर्शिका
तेजी से विकसित हो रहे मशीन लर्निंग के क्षेत्र में, अपने डेटासेट के लिए सर्वोत्तम प्रदर्शन करने वाले मॉडल का चयन करना अत्यंत महत्वपूर्ण है। उपलब्ध कई एल्गोरिदम के साथ, यह निर्धारित करना मुश्किल हो सकता है कि कौन सा वास्तव में उत्कृष्ट है। यहाँ Cumulative Accuracy Profile (CAP) curves एक शक्तिशाली उपकरण के रूप में सामने आता है जो कई मॉडलों की तुलना की प्रक्रिया को सरल बनाता है। इस व्यापक मार्गदर्शिका में, हम CAP वक्रों में गहराई से उतरेंगे, उन्हें पाइथन में कैसे लागू करें यह दिखाएंगे, और द्विआधारी और बहुवर्गीय वर्गीकरण परिदृश्यों में उनकी प्रभावशीलता प्रदर्शित करेंगे। चाहे आप डेटा उत्साही हों या अनुभवी विशेषज्ञ, यह लेख आपको अपने मॉडल मूल्यांकन तकनीकों को बढ़ाने के लिए आवश्यक ज्ञान से लैस करेगा।
सामग्री सूची
- CAP वक्रों को समझना
- अपने परिवेश की स्थापना
- डेटा पूर्वप्रसंस्करण
- मॉडल का निर्माण और उनका मूल्यांकन
- CAP वक्रों का निर्माण करना
- CAP वक्रों के साथ बहुवर्गीय वर्गीकरण
- सर्वोत्तम प्रथाएँ और सुझाव
- निष्कर्ष
CAP वक्रों को समझना
Cumulative Accuracy Profile (CAP) curves श्रेणीबद्ध मॉडल के प्रदर्शन का मूल्यांकन करने के लिए उपयोग किए जाने वाले ग्राफिकल उपकरण हैं। ये एक मॉडल की सकारात्मक उदाहरणों की पहचान करने की क्षमता का विजुअल प्रतिनिधित्व प्रदान करते हैं, जो एक यादृच्छिक मॉडल की सापेक्ष होती है। सही रूप से भविष्यवाणी किए गए सकारात्मकों की संचयी संख्या को कुल अवलोकनों के खिलाफ प्लॉट करके, CAP वक्र विभिन्न मॉडलों की प्रभावशीलता का आकलन और तुलना करने में मदद करते हैं।
CAP वक्र क्यों उपयोग करें?
- बोधगम्य विज़ुअलाइज़ेशन: मॉडलों के बीच स्पष्ट विजुअल तुलना प्रदान करता है।
- प्रदर्शन मीट्रिक: सकारात्मक उदाहरणों की पहचान में अंतर को उजागर करता है।
- बहुमुखी प्रतिभा: द्विआधारी और बहुवर्गीय दोनों प्रकार के वर्गीकरण समस्याओं पर लागू होता है।
अपने परिवेश की स्थापना
CAP वक्रों में गहराई से जाने से पहले, सुनिश्चित करें कि आपका पाइथन परिवेश आवश्यक पुस्तकालयों के साथ सेटअप है। हम pandas
, numpy
, scikit-learn
, matplotlib
, और xgboost
जैसी लाइब्रेरियों का उपयोग करेंगे।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.preprocessing import (LabelEncoder, OneHotEncoder, StandardScaler, MinMaxScaler) from sklearn.impute import SimpleImputer from sklearn.feature_selection import SelectKBest, chi2 from sklearn.metrics import accuracy_score from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import LogisticRegression from sklearn.naive_bayes import GaussianNB from sklearn.svm import SVC from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier import xgboost as xgb |
डेटा पूर्वप्रसंस्करण
डेटा पूर्वप्रसंस्करण मशीन लर्निंग वर्कफ़्लोज़ में एक महत्वपूर्ण कदम है। यह सुनिश्चित करता है कि डेटा साफ, अच्छी तरह संरचित, और मॉडलिंग के लिए उपयुक्त है।
मिसिंग डेटा को संभालना
मिसिंग डेटा परिणामों को विकृत कर सकता है और मॉडल की सटीकता को कम कर सकता है। यहां हम संख्यात्मक और श्रेणीबद्ध मिसिंग मानों दोनों को कैसे संभालें:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# For numerical columns import numpy as np from sklearn.impute import SimpleImputer imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean') numerical_cols = X.select_dtypes(include=['int64', 'float64']).columns imp_mean.fit(X[numerical_cols]) X[numerical_cols] = imp_mean.transform(X[numerical_cols]) # For categorical columns from sklearn.impute import SimpleImputer imp_mode = SimpleImputer(missing_values=np.nan, strategy='most_frequent') categorical_cols = X.select_dtypes(include=['object']).columns imp_mode.fit(X[categorical_cols]) X[categorical_cols] = imp_mode.transform(X[categorical_cols]) |
श्रेणीबद्ध चर को एन्कोड करना
अधिकांश मशीन लर्निंग एल्गोरिदम को संख्यात्मक इनपुट की आवश्यकता होती है। एन्कोडिंग श्रेणीबद्ध चर को एक संख्यात्मक प्रारूप में परिवर्तित करती है।
वन-हॉट एन्कोडिंग
दो से अधिक श्रेणियों वाले चर के लिए उपयुक्त।
1 2 3 4 5 6 7 8 |
from sklearn.compose import ColumnTransformer from sklearn.preprocessing import OneHotEncoder def OneHotEncoderMethod(indices, data): columnTransformer = ColumnTransformer([('encoder', OneHotEncoder(), indices)], remainder='passthrough') return columnTransformer.fit_transform(data) X = OneHotEncoderMethod(categorical_cols, X) |
लेबल एन्कोडिंग
दो श्रेणियों वाले श्रेणीबद्ध चर या उन चर के लिए उपयुक्त जहां एक-हॉट एन्कोडिंग संभव नहीं हो सकता है।
1 2 3 4 5 6 7 8 9 |
from sklearn import preprocessing def LabelEncoderMethod(series): le = preprocessing.LabelEncoder() le.fit(series) return le.transform(series) # Apply label encoding to target variable y = LabelEncoderMethod(y) |
फीचर चयन
फीचर चयन ओवरफिटिंग को कम करने, सटीकता बढ़ाने, और प्रशिक्षण समय को घटाने में मदद करता है।
1 2 3 4 5 6 7 8 9 10 11 12 |
from sklearn.feature_selection import SelectKBest, chi2 from sklearn import preprocessing # Scaling features scaler = preprocessing.MinMaxScaler() X_scaled = scaler.fit_transform(X) # Selecting top 5 features based on chi-squared test kbest = SelectKBest(score_func=chi2, k=5) kbest.fit(X_scaled, y) best_features = kbest.get_support(indices=True) X = X[:, best_features] |
फीचर स्केलिंग
स्केलिंग यह सुनिश्चित करता है कि सभी फीचर मॉडल प्रशिक्षण में समान रूप से योगदान करते हैं।
1 2 3 4 |
from sklearn.preprocessing import StandardScaler sc = StandardScaler(with_mean=False) X = sc.fit_transform(X) |
मॉडल का निर्माण और उनका मूल्यांकन
पूर्वप्रसंस्कृत डेटा के साथ, विभिन्न श्रेणीबद्ध मॉडल का निर्माण करने और उनके प्रदर्शन का मूल्यांकन करने का समय है।
K-निकटतम पड़ोसी (KNN)
1 2 3 4 5 6 7 |
from sklearn.neighbors import KNeighborsClassifier knnClassifier = KNeighborsClassifier(n_neighbors=3) knnClassifier.fit(X_train, y_train) y_pred_knn = knnClassifier.predict(X_test) accuracy_knn = accuracy_score(y_pred_knn, y_test) print(f'KNN Accuracy: {accuracy_knn}') |
लॉजिस्टिक रिग्रेशन
1 2 3 4 5 6 7 |
from sklearn.linear_model import LogisticRegression logreg = LogisticRegression(random_state=0, max_iter=200) logreg.fit(X_train, y_train) y_pred_logreg = logreg.predict(X_test) accuracy_logreg = accuracy_score(y_pred_logreg, y_test) print(f'Logistic Regression Accuracy: {accuracy_logreg}') |
नोट: आपको ConvergenceWarning
मिल सकता है। इसे हल करने के लिए, max_iter
बढ़ाने या किसी अन्य solver का चयन करने पर विचार करें।
गॉसियन नवामुल्य बेयस
1 2 3 4 5 6 7 |
from sklearn.naive_bayes import GaussianNB gnb = GaussianNB() gnb.fit(X_train, y_train) y_pred_gnb = gnb.predict(X_test) accuracy_gnb = accuracy_score(y_pred_gnb, y_test) print(f'Gaussian Naive Bayes Accuracy: {accuracy_gnb}') |
सपोर्ट वेक्टर मशीन (SVM)
1 2 3 4 5 6 7 |
from sklearn.svm import SVC svc = SVC() svc.fit(X_train, y_train) y_pred_svc = svc.predict(X_test) accuracy_svc = accuracy_score(y_pred_svc, y_test) print(f'SVM Accuracy: {accuracy_svc}') |
निर्णय वृक्ष
1 2 3 4 5 6 7 |
from sklearn.tree import DecisionTreeClassifier dtc = DecisionTreeClassifier() dtc.fit(X_train, y_train) y_pred_dtc = dtc.predict(X_test) accuracy_dtc = accuracy_score(y_pred_dtc, y_test) print(f'Decision Tree Accuracy: {accuracy_dtc}') |
रैंडम फॉरेस्ट
1 2 3 4 5 6 7 |
from sklearn.ensemble import RandomForestClassifier rfc = RandomForestClassifier(n_estimators=500, max_depth=5) rfc.fit(X_train, y_train) y_pred_rfc = rfc.predict(X_test) accuracy_rfc = accuracy_score(y_pred_rfc, y_test) print(f'Random Forest Accuracy: {accuracy_rfc}') |
AdaBoost
1 2 3 4 5 6 7 |
from sklearn.ensemble import AdaBoostClassifier abc = AdaBoostClassifier() abc.fit(X_train, y_train) y_pred_abc = abc.predict(X_test) accuracy_abc = accuracy_score(y_pred_abc, y_test) print(f'AdaBoost Accuracy: {accuracy_abc}') |
XGBoost
1 2 3 4 5 6 7 |
import xgboost as xgb xgb_classifier = xgb.XGBClassifier(use_label_encoder=False, eval_metric='mlogloss') xgb_classifier.fit(X_train, y_train) y_pred_xgb = xgb_classifier.predict(X_test) accuracy_xgb = accuracy_score(y_pred_xgb, y_test) print(f'XGBoost Accuracy: {accuracy_xgb}') |
नोट: XGBoost लेबल एन्कोडिंग और मूल्यांकन मीट्रिक के बारे में चेतावनियाँ जारी कर सकता है। चेतावनियों को दबाने के लिए उपरोक्त दिखाए गए अनुसार पैरामीटर समायोजित करें।
CAP वक्रों का निर्माण करना
CAP वक्र विभिन्न मॉडलों के प्रदर्शन की तुलना करने का एक विजुअल माध्यम प्रदान करते हैं। उन्हें उत्पन्न करने का तरीका यहां दिया गया है:
CAP निर्माण फ़ंक्शन को परिभाषित करना
1 2 3 4 5 6 7 8 9 10 11 12 |
def CAP_gen(model, X_test, y_test): pred = model.predict(X_test) _ = sorted(zip(pred, y_test), reverse=True) _cap = [] for p, o in _: if p == o: _cap.append(p) else: _cap.append(o) y_values = np.append([0], np.cumsum(_cap)) x_values = np.arange(0, len(y_test) + 1) return x_values, y_values |
CAP वक्रों को प्लॉट करना
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import matplotlib.pyplot as plt total = len(y_test) sum_count = np.sum(y_test) plt.figure(figsize=(10, 6)) # Generate CAP for GaussianNB x_gnb, y_gnb = CAP_gen(gnb, X_test, y_test) plt.plot(x_gnb, y_gnb, linewidth=3, label='GaussianNB') # Generate CAP for XGBoost x_xgb, y_xgb = CAP_gen(xgb_classifier, X_test, y_test) plt.plot(x_xgb, y_xgb, linewidth=3, label='XGBoost') # Optional: Add more models # x_abc, y_abc = CAP_gen(abc, X_test, y_test) # plt.plot(x_abc, y_abc, linewidth=3, label='AdaBoost') # x_rfc, y_rfc = CAP_gen(rfc, X_test, y_test) # plt.plot(x_rfc, y_rfc, linewidth=3, label='Random Forest') # Random Model line plt.plot([0, total], [0, sum_count], linestyle='--', label='Random Model') # Plot aesthetics plt.xlabel('कुल अवलोकन', fontsize=16) plt.ylabel('CAP मान', fontsize=16) plt.title('Cumulative Accuracy Profile', fontsize=16) plt.legend(loc='lower right', fontsize=16) plt.show() |
CAP वक्रों की व्याख्या
- तिरछी रेखा: यादृच्छिक मॉडल का प्रतिनिधित्व करती है। एक अच्छा मॉडल इस रेखा के ऊपर रहना चाहिए।
- मॉडल वक्र: टॉप-लेफ्ट कॉर्नर के करीब का वक्र बेहतर प्रदर्शन करने वाले मॉडल को इंगित करता है।
- वक्र के नीचे क्षेत्र (AUC): उच्च AUC बेहतर प्रदर्शन को दर्शाता है।
CAP वक्रों के साथ बहुवर्गीय वर्गीकरण
जहां CAP वक्र पारंपरिक रूप से द्विआधारी वर्गीकरण के लिए उपयोग किए जाते हैं, उन्हें बहुवर्गीय समस्याओं के लिए समायोजित किया जा सकता है। यहां बताता है कि बंगाली संगीत शैली डेटासेट (bangla.csv
) का उपयोग करके बहुवर्गीय सेटिंग में CAP वक्रों को कैसे लागू करें।
डेटा अवलोकन
bangla.csv
डेटासेट में विभिन्न ऑडियो विशेषताओं का प्रतिनिधित्व करने वाले 31 फीचर्स और एक लक्ष्य चर label
शामिल हैं जो संगीत शैली को इंगित करता है। शैलियों में rabindra
, adhunik
और अन्य जैसी श्रेणियाँ शामिल हैं।
पूर्वप्रसंस्करण कदम
पूर्वप्रसंस्करण कदम अधिकांशतः द्विआधारी वर्गीकरण के समान बने रहते हैं, जिसमें बहुवर्गीय लक्ष्य चर को एन्कोड करने पर जोर दिया जाता है।
1 2 3 4 |
# Label Encoding for multiclass target y = LabelEncoderMethod(y) # Proceed with encoding selection, feature scaling, and splitting as before |
बहुवर्गीय मॉडल का निर्माण
वे ही मॉडल जो द्विआधारी वर्गीकरण के लिए उपयोग किए जाते हैं, यहाँ भी लागू होते हैं। मुख्य अंतर उनके प्रदर्शन का मूल्यांकन कई वर्गों में करना है।
1 2 3 4 5 6 |
# Example with XGBoost xgb_classifier = xgb.XGBClassifier(use_label_encoder=False, eval_metric='mlogloss') xgb_classifier.fit(X_train, y_train) y_pred_xgb = xgb_classifier.predict(X_test) accuracy_xgb = accuracy_score(y_pred_xgb, y_test) print(f'XGBoost Multiclass Accuracy: {accuracy_xgb}') |
बहुवर्गीय मॉडलों के लिए CAP वक्रों का निर्माण
CAP निर्माण फ़ंक्शन अपरिवर्तित रहता है। हालाँकि, व्याख्या थोड़ी भिन्न होती है क्योंकि अब यह कई वर्गों को ध्यान में रखती है।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Generate CAP for GaussianNB x_gnb, y_gnb = CAP_gen(gnb, X_test, y_test) plt.plot(x_gnb, y_gnb, linewidth=3, label='GaussianNB') # Generate CAP for XGBoost x_xgb, y_xgb = CAP_gen(xgb_classifier, X_test, y_test) plt.plot(x_xgb, y_xgb, linewidth=3, label='XGBoost') # Random Model line plt.plot([0, total], [0, sum_count], linestyle='--', label='Random Model') # Plot aesthetics plt.xlabel('कुल अवलोकन', fontsize=16) plt.ylabel('CAP मान', fontsize=16) plt.title('Cumulative Accuracy Profile for Multiclass Classification', fontsize=16) plt.legend(loc='lower right', fontsize=16) plt.show() |
नोट: बहुवर्गीय परिदृश्यों में, CAP वक्रों की व्याख्या द्विआधारी वर्गीकरण की तुलना में उतनी सहज नहीं हो सकती है। फिर भी, वे विभिन्न वर्गों में एक मॉडल के प्रदर्शन पर मूल्यवान अंतर्दृष्टि प्रदान करते हैं।
सर्वोत्तम प्रथाएँ और सुझाव
- डेटा गुणवत्ता: सुनिश्चित करें कि आपका डेटा साफ और अच्छी तरह पूर्वप्रसंस्कृत है ताकि भ्रामक CAP वक्र से बचा जा सके।
- मॉडल विविधता: विभिन्न अंतर्निहित एल्गोरिदम वाले मॉडलों की तुलना करें ताकि सर्वोत्तम प्रदर्शन करने वाले को पहचाना जा सके।
- बहुवर्गीय विचार: बहुवर्गीय सेटिंग में CAP वक्रों की व्याख्या करते समय सावधान रहें; भ्रम मैट्रिक्स या F1 स्कोर जैसे अन्य मूल्यांकन मीट्रिक के साथ पूरक पर विचार करें।
- ओवरफिटिंग से बचें: क्रॉस-वैलिडेशन और नियमितीकरण जैसी तकनीकों का उपयोग करें ताकि आपके मॉडल अनदेखे डेटा पर अच्छी तरह से सामान्यीकृत हों।
- अपडेटेड रहें: मशीन लर्निंग एक लगातार विकसित हो रहा क्षेत्र है। अपने मॉडल मूल्यांकन रणनीतियों को परिष्कृत करने के लिए नवीनतम टूल और सर्वोत्तम प्रथाओं से अवगत रहें।
निष्कर्ष
कई मशीन लर्निंग मॉडलों की तुलना चुनौतीपूर्ण हो सकती है, लेकिन CAP वक्रों जैसे उपकरण इस प्रक्रिया को सरल बनाते हैं क्योंकि वे मॉडल के प्रदर्शन में स्पष्ट विजुअल अंतर्दृष्टि प्रदान करते हैं। चाहे आप द्विआधारी या बहुवर्गीय वर्गीकरण से निपट रहे हों, पाइथन में CAP वक्रों को लागू करना आपको अपने डेटा के लिए सर्वोत्तम मॉडल का मूल्यांकन और चयन करने के लिए एक मजबूत विधि प्रदान करता है। डेटा गुणवत्ता को प्राथमिकता देना, विभिन्न मॉडलों के सूक्ष्मताओं को समझना, और CAP वक्रों की विवेकपूर्ण व्याख्या करना याद रखें ताकि आप मशीन लर्निंग के आपके प्रयासों में उनकी पूरी क्षमता का उपयोग कर सकें।
सुखद मॉडलिंग!