अपनी पहली पाइपलाइन बनाना: स्केलर और वर्गीकारक
शिक्षार्थी StandardScaler और LogisticRegression को एक Pipeline में जोड़ेंगे, fit और predict चलाएँगे और पुष्टि करेंगे कि स्केलर केवल प्रशिक्षण डेटा पर फिट हुआ था।
अपनी पहली पाइपलाइन बनाना: स्केलर और वर्गीकारक, CoddyKit पर Machine Learning Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Machine Learning Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
scikit-learn Pipeline क्या है
एक Pipeline कई प्रसंस्करण चरणों को एकल अनुमानक ऑब्जेक्ट में जोड़ती है। अंतिम चरण को छोड़कर प्रत्येक चरण में fit और transform लागू होने चाहिए; अंतिम चरण को केवल fit और predict की आवश्यकता होती है। pipeline.fit(X, y) चलाने पर सभी चरण क्रम से चलते हैं, और pipeline.predict(X) वर्गीकरण करने से पहले डेटा को सभी रूपांतरणों से गुज़ारता है। इससे हिसाब-किताब संबंधी त्रुटियाँ समाप्त होती हैं और डेटा-रिसाव रुकता है।
पाइपलाइन रिसाव को कैसे रोकती हैं
यदि आप पूरे डेटासेट पर StandardScaler को फिट करने के बाद डेटा को प्रशिक्षण और परीक्षण में बाँटते हैं, तो स्केलर परीक्षण-समुच्चय के आँकड़े देख चुका होता है—यह डेटा-रिसाव है। Pipeline इसे अपने-आप हल करती है: जब आप cross_val_score या GridSearchCV को Pipeline देते हैं, तो पूरी पाइपलाइन (स्केलर सहित) प्रत्येक प्रशिक्षण खंड पर नए सिरे से फिट की जाती है, इसलिए परीक्षण खंड स्केलर के पैरामीटरों को कभी प्रभावित नहीं करता।
अपनी पहली पाइपलाइन बनाना
(name, estimator) ट्यूपल की सूची देकर Pipeline बनाएँ। नाम आपकी पसंद के मनमाने स्ट्रिंग होते हैं—बाद में चरणों को संदर्भित करने के लिए इनका उपयोग किया जाता है (जैसे, ग्रिड-खोज हाइपरपैरामीटरों के लिए)। सबसे सामान्य पहली पाइपलाइन में पहले स्केलर और उसके बाद वर्गीकरण मॉडल होता है।
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
pipe = Pipeline([
('scaler', StandardScaler()),
('clf', LogisticRegression(C=1.0, max_iter=200))
])
print('Steps:', [name for name, _ in pipe.steps])
print('Named steps:', list(pipe.named_steps.keys()))फिट करना और पूर्वानुमान लगाना
बनाने के बाद Pipeline का उपयोग किसी भी sklearn अनुमानक की तरह करें: प्रशिक्षण डेटा पर fit, परीक्षण डेटा पर predict, और सटीकता के लिए score। आंतरिक रूप से, fit सभी मध्यवर्ती चरणों पर fit_transform और अंतिम अनुमानक पर fit चलाता है।
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
pipe = Pipeline([
('scaler', StandardScaler()),
('clf', LogisticRegression(max_iter=300))
])
pipe.fit(X_train, y_train)
print('Test accuracy:', pipe.score(X_test, y_test).round(4))
y_pred = pipe.predict(X_test)
print('Predictions[:5]:', y_pred[:5])यह पुष्टि करना कि स्केलर केवल प्रशिक्षण डेटा पर फिट हुआ है
प्रशिक्षण डेटा पर Pipeline को फिट करने के बाद आप प्रत्येक चरण के फिट किए गए पैरामीटर देख सकते हैं। पाइपलाइन के अंदर के स्केलर में mean_ और scale_ विशेषताएँ होंगी, जिनकी गणना केवल प्रशिक्षण समुच्चय से हुई होगी—पूरे डेटासेट से नहीं। इससे पुष्टि होती है कि पाइपलाइन सही ढंग से काम कर रही है।
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import numpy as np
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
pipe = Pipeline([('sc', StandardScaler()), ('lr', LogisticRegression(max_iter=300))])
pipe.fit(X_train, y_train)
# Scaler mean from pipeline vs computed from X_train
print('Pipeline scaler mean[0]:', pipe.named_steps['sc'].mean_[0].round(4))
print('Direct train mean[0]: ', X_train[:, 0].mean().round(4))मध्यवर्ती आउटपुट तक पहुँचना
किसी विशिष्ट चरण का रूपांतरित आउटपुट प्राप्त करने के लिए pipeline[:-1].transform(X) का उपयोग करें या pipeline.named_steps['step_name'] के माध्यम से अलग-अलग चरणों तक पहुँचें। Python स्लाइस संकेत-विधि से उप-पाइपलाइन प्राप्त करने के लिए आप pipeline[:'step_name'] भी चला सकते हैं, जो उस चरण तक और उसे शामिल करते हुए होगी। यह दोष-निवारण या स्केलिंग के बाद डेटा का रूप देखने के लिए उपयोगी है।
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
pipe = Pipeline([('sc', StandardScaler()), ('lr', LogisticRegression())])
pipe.fit(X, y)
# Get scaled output (all steps except the last)
X_scaled = pipe[:-1].transform(X)
print('After scaling — mean per feature:', X_scaled.mean(axis=0).round(4))
print('After scaling — std per feature:', X_scaled.std(axis=0).round(4))make_pipeline: एक आसान तरीका
make_pipeline आपको चरणों के नाम हाथ से बताए बिना Pipeline बनाने देता है—यह छोटे अक्षरों में वर्ग नामों से नाम स्वतः बनाता है। त्वरित प्रयोगों के लिए यह सुविधाजनक है, लेकिन उत्पादन कोड में कम पठनीय होता है, जहाँ स्पष्ट नाम ग्रिड-खोज पैरामीटर स्ट्रिंग में चरणों की पहचान करने में सहायता करते हैं।
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import MinMaxScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
import numpy as np
X, y = load_iris(return_X_y=True)
# Auto-names: 'minmaxscaler' and 'kneighborsclassifier'
pipe = make_pipeline(MinMaxScaler(), KNeighborsClassifier(n_neighbors=5))
print('Step names:', list(pipe.named_steps.keys()))
print('CV accuracy:', cross_val_score(pipe, X, y, cv=5).mean().round(4))संभाव्यता पूर्वानुमानों वाली पाइपलाइन
यदि अंतिम अनुमानक predict_proba का समर्थन करता है, तो Pipeline भी इसे उपलब्ध कराती है। इससे आप Pipeline को संभाव्यता आउटपुट की अपेक्षा करने वाले किसी भी फ़ंक्शन के साथ उपयोग कर सकते हैं—जैसे ROC-AUC स्कोरिंग, कैलिब्रेशन वक्र या सीमा-समायोजन—और मॉडल चलाने से पहले पूर्व-प्रसंस्करण को हाथ से लागू करने की आवश्यकता नहीं रहती।
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
pipe = Pipeline([('sc', StandardScaler()), ('lr', LogisticRegression(max_iter=300))])
pipe.fit(X_train, y_train)
proba = pipe.predict_proba(X_test)[:, 1]
print('ROC-AUC:', roc_auc_score(y_test, proba).round(4))निर्माण के बाद पैरामीटर निर्धारित करना
Pipeline बनाने के बाद आप दो-अंडरस्कोर विभाजक वाले set_params(step__param=value) का उपयोग करके किसी भी चरण के पैरामीटर को बदल सकते हैं। यही संकेत-विधि GridSearchCV में भी उपयोग होती है। जब आप पूरी पाइपलाइन को नए सिरे से बनाए बिना अलग-अलग सेटिंग आज़माना चाहते हैं, तब यह उपयोगी होती है।
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
pipe = Pipeline([('sc', StandardScaler()), ('lr', LogisticRegression())])
# Change C and max_iter after construction
pipe.set_params(lr__C=10.0, lr__max_iter=500)
print('C after set_params:', pipe.named_steps['lr'].C)पाइपलाइन को क्रमबद्ध करना और साझा करना
फिट की गई Pipeline एकल Python ऑब्जेक्ट होती है, जिसे pickle या joblib से क्रमबद्ध किया जा सकता है। पाइपलाइन को एक फ़ाइल के रूप में साझा करने से यह सुनिश्चित होता है कि पूर्वानुमान के समय ठीक वही पूर्व-प्रसंस्करण चरण और ठीक वही स्केलर पैरामीटर लागू हों, जिससे प्रशिक्षण और सेवा-प्रदाय परिवेशों के बीच संगतता संबंधी त्रुटियाँ समाप्त हो जाती हैं।
import joblib
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
pipe = Pipeline([('sc', StandardScaler()), ('lr', LogisticRegression())])
pipe.fit(X, y)
# Save and reload
joblib.dump(pipe, '/tmp/iris_pipeline.pkl')
loaded_pipe = joblib.load('/tmp/iris_pipeline.pkl')
print('Predictions match:', (pipe.predict(X) == loaded_pipe.predict(X)).all())पाइपलाइन क्रॉस-वैलिडेशन की सर्वोत्तम पद्धति
खंडों पर हाथ से चक्र चलाने के बजाय अपनी Pipeline को हमेशा cross_val_score में लपेटें। इससे यह सुनिश्चित होता है कि प्रत्येक प्रशिक्षण खंड पर स्केलर फिर से फिट हो और सत्यापन खंड को कभी न देखे, जिससे सामान्यीकरण प्रदर्शन का ईमानदार अनुमान मिलता है।
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.datasets import load_digits
from sklearn.model_selection import cross_val_score
import numpy as np
X, y = load_digits(return_X_y=True)
pipe = Pipeline([
('sc', StandardScaler()),
('svm', SVC(kernel='rbf', C=5.0, gamma='scale'))
])
scores = cross_val_score(pipe, X, y, cv=5, n_jobs=-1)
print(f'CV accuracy: {np.mean(scores):.4f} +/- {np.std(scores):.4f}')त्वरित जाँच
इस पाठ से scikit-learn Pipelines की अपनी समझ जाँचें।
पाठ का पुनरावलोकन
इस पाठ में आपने सीखा: Pipeline चरणों को एक अनुमानक में जोड़ती है और प्रत्येक चरण को केवल उस प्रशिक्षण डेटा पर फिट करके रिसाव रोकती है जिसे वह देखता है, make_pipeline स्वतः-नामित आसान तरीके प्रदान करता है जबकि स्पष्ट नाम ग्रिड-खोज को अधिक पठनीय बनाते हैं, और फिट की गई Pipeline को क्रमबद्ध करके साझा किया जा सकता है ताकि सेवा-प्रदाय के समय पूर्व-प्रसंस्करण एकसमान रहे। आगे हम मिश्रित संख्यात्मक और श्रेणीबद्ध डेटा को संभालने के लिए Pipeline के अंदर ColumnTransformer जोड़ेंगे।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “अपनी पहली पाइपलाइन बनाना: स्केलर और वर्गीकारक” पाठ निःशुल्क है?
हाँ—“अपनी पहली पाइपलाइन बनाना: स्केलर और वर्गीकारक” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Machine Learning Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“अपनी पहली पाइपलाइन बनाना: स्केलर और वर्गीकारक” में मैं क्या सीखूँगा?
शिक्षार्थी StandardScaler और LogisticRegression को एक Pipeline में जोड़ेंगे, fit और predict चलाएँगे और पुष्टि करेंगे कि स्केलर केवल प्रशिक्षण डेटा पर फिट हुआ था। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Machine Learning Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Machine Learning Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Machine Learning Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“अपनी पहली पाइपलाइन बनाना: स्केलर और वर्गीकारक” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Machine Learning Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Machine Learning Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- अपनी पहली पाइपलाइन बनाना: स्केलर और वर्गीकारक
- पाइपलाइन के अंदर ColumnTransformer
- पूरी पाइपलाइन का क्रॉस-वैलिडेशन और ग्रिड सर्च
- joblib के साथ पाइपलाइन सहेजना और लोड करना