Machine Learning Academy · पाठ

पूरी पाइपलाइन का क्रॉस-वैलिडेशन और ग्रिड सर्च

शिक्षार्थी Pipeline को cross_val_score और GridSearchCV में देंगे और अलग-अलग चरणों के हाइपरपैरामीटर निर्दिष्ट करने के लिए डबल-अंडरस्कोर संकेत-लेखन का उपयोग करेंगे।

पाठ 3, कुल 4 में से13 चरण

पूरी पाइपलाइन का क्रॉस-वैलिडेशन और ग्रिड सर्च, CoddyKit पर Machine Learning Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Machine Learning Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

पूरी पाइपलाइन की ग्रिड खोज क्यों करें

ओवरफ़िटिंग से बचने के लिए हाइपरपैरामीटर ट्यूनिंग को हमेशा क्रॉस-वैलिडेशन के साथ करना चाहिए। जब आपके पूर्व-प्रसंस्करण चरणों के अपने पैरामीटर हों (जैसे PCA का n_components और OneHotEncoder का drop), तो उन्हें मॉडल के पैरामीटर के साथ एक साथ समायोजित करना आवश्यक है। सभी चीज़ों को Pipeline में लपेटकर GridSearchCV में देने से यह पूरा कार्य डेटा-लीकेज के बिना सही ढंग से होता है।

cross_val_score में पाइपलाइन देना

Pipeline का निष्पक्ष मूल्यांकन करने का सबसे सरल तरीका cross_val_score(pipeline, X, y, cv=5) है। प्रत्येक फ़ोल्ड पूरी पाइपलाइन—जिसमें स्केलर और क्लासिफ़ायर भी शामिल हैं—को प्रशिक्षण भाग पर फिर से फ़िट करता है, फिर अलग रखे गए फ़ोल्ड पर मूल्यांकन करता है। लौटाए गए array का माध्य और मानक विचलन सामान्यीकरण क्षमता का विश्वसनीय अनुमान देते हैं।

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_wine
import numpy as np

X, y = load_wine(return_X_y=True)

pipe = Pipeline([
    ('sc', StandardScaler()),
    ('lr', LogisticRegression(C=1.0, max_iter=300))
])

scores = cross_val_score(pipe, X, y, cv=5, scoring='accuracy')
print(f'CV accuracy: {np.mean(scores):.4f} +/- {np.std(scores):.4f}')

पाइपलाइन पैरामीटर के लिए डबल-अंडरस्कोर नोटेशन

पाइपलाइन के भीतर किसी नामित चरण के पैरामीटर का संदर्भ देने के लिए stepname__paramname का उपयोग करें। Pipeline के भीतर ColumnTransformer जैसी नेस्टेड संरचनाओं के लिए नामों को श्रृंखला में लिखें: preprocessor__num__scaler__with_std। इस परंपरा का उपयोग set_params कॉल और GridSearchCV में दिए गए param_grid शब्दकोश, दोनों में किया जाता है।

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

pipe = Pipeline([('sc', StandardScaler()), ('svm', SVC())])

# Print all tunable parameters
params = pipe.get_params()
for k, v in params.items():
    print(f'  {k}: {v}')

GridSearchCV के लिए param_grid परिभाषित करना

एक ऐसा शब्दकोश बनाएँ जिसमें कुंजियाँ पाइपलाइन पैरामीटर के नाम (डबल-अंडरस्कोर नोटेशन का उपयोग करते हुए) हों और मान आज़माए जाने वाले विकल्पों की सूचियाँ हों। GridSearchCV सभी सूचियों के कार्तीय गुणनफल में मौजूद प्रत्येक संयोजन के लिए पाइपलाइन को प्रशिक्षित और मूल्यांकित करता है। कुल फ़िट की संख्या len(combinations) * cv_folds के बराबर होती है।

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_wine

X, y = load_wine(return_X_y=True)

pipe = Pipeline([('sc', StandardScaler()), ('svm', SVC())])

param_grid = {
    'svm__C': [0.1, 1.0, 10.0, 100.0],
    'svm__kernel': ['rbf', 'linear'],
    'svm__gamma': ['scale', 'auto']
}

grid = GridSearchCV(pipe, param_grid, cv=5, n_jobs=-1, scoring='accuracy')
grid.fit(X, y)
print('Best params:', grid.best_params_)
print('Best CV score:', grid.best_score_.round(4))

पूर्व-प्रोसेसर के पैरामीटर भी समायोजित करना

आप उसी ग्रिड में पूर्व-प्रोसेसर के पैरामीटर भी शामिल कर सकते हैं। उदाहरण के लिए, क्लासिफ़ायर के नियमितीकरण के साथ PCA चरण के n_components को भी समायोजित करें। इससे संपीड़न का सर्वोत्तम स्तर और मॉडल की जटिलता एक साथ मिलती है, जो उन्हें अलग-अलग चरणों में समायोजित करने से अधिक कठोर तरीका है।

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_digits

X, y = load_digits(return_X_y=True)

pipe = Pipeline([
    ('sc', StandardScaler()),
    ('pca', PCA()),
    ('lr', LogisticRegression(max_iter=500))
])

param_grid = {
    'pca__n_components': [10, 20, 30, 40],
    'lr__C': [0.1, 1.0, 10.0]
}

grid = GridSearchCV(pipe, param_grid, cv=5, n_jobs=-1)
grid.fit(X, y)
print('Best:', grid.best_params_)
print('Score:', grid.best_score_.round(4))

GridSearchCV के परिणामों का निरीक्षण करना

cv_results_ विशेषता एक शब्दकोश है (जिसे DataFrame में बदला जा सकता है) जिसमें प्रत्येक हाइपरपैरामीटर संयोजन के लिए औसत परीक्षण स्कोर, मानक विचलन और फ़िट समय शामिल होते हैं। इस DataFrame का निरीक्षण करने से आपको प्रदर्शन के परिदृश्य को समझने और यह पहचानने में सहायता मिलती है कि सर्वोत्तम परिणाम दूसरे सर्वोत्तम परिणाम से वास्तव में बेहतर है या कई पैरामीटर संयोजन समान प्रदर्शन कर रहे हैं।

import pandas as pd

results = pd.DataFrame(grid.cv_results_)
results_sorted = results.sort_values('rank_test_score')
print(results_sorted[['param_pca__n_components', 'param_lr__C',
                       'mean_test_score', 'std_test_score']].head(6).to_string())

बड़े पैरामीटर क्षेत्र के लिए RandomizedSearchCV

जब पैरामीटर क्षेत्र बड़ा होता है, तो GridSearchCV का उपयोग कम्प्यूटेशन की दृष्टि से अत्यधिक महँगा हो जाता है। RandomizedSearchCV यादृच्छिक रूप से निश्चित संख्या में संयोजन चुनता है (जिसे n_iter नियंत्रित करता है) और अक्सर बहुत कम समय में लगभग सर्वोत्तम परिणाम खोज लेता है। सतत पैरामीटर के लिए scipy.stats वितरणों का उपयोग करें, ताकि अलग-अलग मानों के बजाय किसी परास से नमूने लिए जा सकें।

from sklearn.model_selection import RandomizedSearchCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.datasets import load_wine
from scipy.stats import loguniform, uniform

X, y = load_wine(return_X_y=True)

pipe = Pipeline([('sc', StandardScaler()), ('svm', SVC())])

param_dist = {
    'svm__C': loguniform(0.01, 100),
    'svm__gamma': loguniform(1e-4, 1),
    'svm__kernel': ['rbf', 'linear']
}

rs = RandomizedSearchCV(pipe, param_dist, n_iter=30, cv=5, random_state=42, n_jobs=-1)
rs.fit(X, y)
print('Best params:', rs.best_params_)
print('Best score:', rs.best_score_.round(4))

नेस्टेड CV: मूल्यांकन और चयन साथ-साथ

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

from sklearn.model_selection import GridSearchCV, cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.datasets import load_iris
import numpy as np

X, y = load_iris(return_X_y=True)

pipe = Pipeline([('sc', StandardScaler()), ('svm', SVC())])
param_grid = {'svm__C': [0.1, 1.0, 10.0], 'svm__gamma': ['scale', 'auto']}

inner_cv = GridSearchCV(pipe, param_grid, cv=5, n_jobs=-1)
# Outer CV evaluates the tuning procedure itself
outer_scores = cross_val_score(inner_cv, X, y, cv=5)
print(f'Nested CV score: {np.mean(outer_scores):.4f} +/- {np.std(outer_scores):.4f}')

सर्वोत्तम एस्टिमेटर का उपयोग करना

GridSearchCV.fit के बाद, best_estimator_ विशेषता वह पाइपलाइन होती है जिसे सर्वोत्तम हाइपरपैरामीटर का उपयोग करके पूरे प्रशिक्षण डेटासेट पर फिर से फ़िट किया गया है। अंतिम पूर्वानुमानों के लिए आपको इसी मॉडल का उपयोग करना चाहिए। आप सीधे इस पर predict, predict_proba या score कॉल कर सकते हैं।

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.datasets import load_wine

X, y = load_wine(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

pipe = Pipeline([('sc', StandardScaler()), ('svm', SVC())])
param_grid = {'svm__C': [0.1, 1.0, 10.0], 'svm__kernel': ['rbf', 'linear']}

grid = GridSearchCV(pipe, param_grid, cv=5, n_jobs=-1)
grid.fit(X_train, y_train)

best = grid.best_estimator_
print('Test accuracy:', best.score(X_test, y_test).round(4))

GridSearchCV में स्कोरिंग विकल्प

डिफ़ॉल्ट रूप से GridSearchCV एस्टिमेटर के डिफ़ॉल्ट स्कोर का उपयोग करता है (क्लासिफ़ायर के लिए सटीकता)। आप scoring पैरामीटर के साथ कोई भी मेट्रिक निर्दिष्ट कर सकते हैं: 'roc_auc', 'f1', 'neg_mean_squared_error' या make_scorer से बनाया गया कस्टम स्कोरर। असंतुलित डेटासेट के लिए सामान्य सटीकता की तुलना में 'f1_macro' या 'roc_auc' बेहतर विकल्प हैं।

from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer

X, y = load_breast_cancer(return_X_y=True)

pipe = Pipeline([('sc', StandardScaler()), ('lr', LogisticRegression(max_iter=300))])
param_grid = {'lr__C': [0.01, 0.1, 1.0, 10.0]}

grid = GridSearchCV(pipe, param_grid, cv=5, scoring='roc_auc', n_jobs=-1)
grid.fit(X, y)
print('Best C:', grid.best_params_)
print('Best ROC-AUC:', grid.best_score_.round(4))

सर्वोत्तम पाइपलाइन सहेजना

ग्रिड खोज के बाद सर्वोत्तम पाइपलाइन को डिस्क पर सहेजें। इस एकल फ़ाइल में स्केलर (उसके फ़िट किए गए माध्य और प्रसरण सहित), PCA (उसके घटकों सहित) और क्लासिफ़ायर (उसके भार सहित)—नए डेटा पर पूर्वानुमान दोहराने के लिए आवश्यक हर चीज़—शामिल होती है। इसे उत्पादन परिवेश में लोड करके सीधे predict कॉल करें।

import joblib

# Save the best estimator
joblib.dump(grid.best_estimator_, '/tmp/best_pipeline.pkl')

# Load and verify
loaded = joblib.load('/tmp/best_pipeline.pkl')
print('Loaded pipeline test score:', loaded.score(X_test, y_test).round(4))

त्वरित जाँच

इस पाठ से पूरी पाइपलाइन पर क्रॉस-वैलिडेशन और ग्रिड खोज करने की अपनी समझ जाँचें।

पाठ का पुनरावलोकन

इस पाठ में आपने सीखा: Pipeline पर cross_val_score प्रत्येक फ़ोल्ड के लिए सभी चरणों को फिर से फ़िट करता है और सामान्यीकरण क्षमता का निष्पक्ष अनुमान देता है, डबल-अंडरस्कोर नोटेशन param_grid में नेस्ट किए गए हाइपरपैरामीटर का संदर्भ देता है, और RandomizedSearchCV निश्चित संख्या में यादृच्छिक संयोजन चुनकर बड़े पैरामीटर क्षेत्रों का कुशलतापूर्वक अन्वेषण करता है। आगे हम उत्पादन में उपयोग के लिए joblib से पूरी पाइपलाइन को सहेजना और लोड करना सीखेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “पूरी पाइपलाइन का क्रॉस-वैलिडेशन और ग्रिड सर्च” पाठ निःशुल्क है?

हाँ—“पूरी पाइपलाइन का क्रॉस-वैलिडेशन और ग्रिड सर्च” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Machine Learning Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“पूरी पाइपलाइन का क्रॉस-वैलिडेशन और ग्रिड सर्च” में मैं क्या सीखूँगा?

शिक्षार्थी Pipeline को cross_val_score और GridSearchCV में देंगे और अलग-अलग चरणों के हाइपरपैरामीटर निर्दिष्ट करने के लिए डबल-अंडरस्कोर संकेत-लेखन का उपयोग करेंगे। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Machine Learning Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Machine Learning Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Machine Learning Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“पूरी पाइपलाइन का क्रॉस-वैलिडेशन और ग्रिड सर्च” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Machine Learning Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Machine Learning Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. अपनी पहली पाइपलाइन बनाना: स्केलर और वर्गीकारक
  2. पाइपलाइन के अंदर ColumnTransformer
  3. पूरी पाइपलाइन का क्रॉस-वैलिडेशन और ग्रिड सर्च
  4. joblib के साथ पाइपलाइन सहेजना और लोड करना
← Machine Learning Academy पर वापस जाएँ