html
GridSearchCV के बिना K-Fold क्रॉस-वैलिडेशन में महारत: एक व्यापक मार्गदर्शिका
मशीन लर्निंग के क्षेत्र में, आपके मॉडलों की मजबूती और विश्वसनीयता सुनिश्चित करना अत्यंत महत्वपूर्ण है। इसे प्राप्त करने के लिए एक मौलिक तकनीकों में से एक K-Fold क्रॉस-वैलिडेशन है। जबकि Scikit-Learn जैसी लोकप्रिय लाइब्रेरीज़ हाइपरपैरामीटर ट्यूनिंग के लिए GridSearchCV
जैसे उपकरण प्रदान करती हैं जो क्रॉस-वैलिडेशन के साथ मिश्रित होते हैं, ऐसे परिदृश्य भी होते हैं जहाँ आप K-Fold क्रॉस-वैलिडेशन को मैन्युअली लागू करना चाह सकते हैं। यह मार्गदर्शिका Python और Jupyter Notebooks का उपयोग करके GridSearchCV
पर निर्भर हुए बिना K-Fold क्रॉस-वैलिडेशन को समझने और लागू करने में गहराई से प्रवेश करती है।
सामग्री की तालिका
- K-Fold क्रॉस-वैलिडेशन का परिचय
- डेटासेट को समझना
- डेटा प्रीप्रोसेसिंग
- गायब डेटा को संभालना
- फीचर चयन
- वर्गीकृत चर का एन्कोडिंग
- फीचर स्केलिंग
- मशीन लर्निंग मॉडल बनाना
- GridSearchCV के बिना K-Fold क्रॉस-वैलिडेशन लागू करना
- सर्वोत्तम प्रथाएँ और सुझाव
- निष्कर्ष
K-Fold क्रॉस-वैलिडेशन का परिचय
K-Fold क्रॉस-वैलिडेशन एक री-सैम्पलिंग तकनीक है जिसका उपयोग सीमित डेटा सैंपल पर मशीन लर्निंग मॉडल का मूल्यांकन करने के लिए किया जाता है। इस प्रक्रिया में मूल डेटासेट को K गैर-ओवरलैपिंग उपसमुच्चयों (फोल्ड्स) में विभाजित करना शामिल है। मॉडल को K-1 फोल्ड्स पर प्रशिक्षित किया जाता है और शेष फोल्ड पर मान्य किया जाता है। इस प्रक्रिया को K बार दोहराया जाता है, जिसमें प्रत्येक फोल्ड एक बार मान्यकरण सेट के रूप में कार्य करता है। अंतिम प्रदर्शन मीट्रिक आमतौर पर K मान्यकरण स्कोर का औसत होता है।
क्यों इस्तेमाल करें K-Fold क्रॉस-वैलिडेशन?
- मजबूत मूल्यांकन: एकल ट्रेन-टेस्ट स्प्लिट की तुलना में मॉडल प्रदर्शन का अधिक विश्वसनीय अनुमान प्रदान करता है।
- अधिक फिटिंग में कमी: कई उपसमुच्चयों पर प्रशिक्षण देकर, मॉडल अप्रत्याशित डेटा पर बेहतर सामान्यीकरण करता है।
- डेटा का कुशल उपयोग: विशेष रूप से सीमित डेटासेट्स के साथ काम करते समय लाभकारी।
जबकि GridSearchCV
क्रॉस-वैलिडेशन को हाइपरपैरामीटर ट्यूनिंग के साथ एकीकृत करता है, K-Fold क्रॉस-वैलिडेशन को मैन्युअली लागू करना मॉडल प्रशिक्षण प्रक्रिया में अधिक लचीलापन और अंतर्दृष्टि प्रदान करता है।
डेटासेट को समझना
इस मार्गदर्शिका के लिए, हम कार प्राइस प्रेडिक्शन डेटासेट का उपयोग करते हैं, जो Kaggle से प्राप्त किया गया है। इस डेटासेट में कारों की विभिन्न विशेषताएँ शामिल हैं, जिसका उद्देश्य उनके बाजार मूल्य की भविष्यवाणी करना है।
डेटासेट का अवलोकन
- विशेषताएँ: 25 (लक्ष्य चर को छोड़कर)
- संख्यात्मक: इंजन आकार, हॉर्सपावर, पीक RPM, शहर MPG, हाईवे MPG, आदि।
- श्रेणीबद्ध: कार ब्रांड, ईंधन प्रकार, आशा, दरवाजे की संख्या, कार बॉडी प्रकार, ड्राइव व्हील कॉन्फ़िगरेशन, आदि।
- लक्ष्य चर:
price
(सतत मान)
प्रारंभिक डेटा निरीक्षण
डेटा प्रीप्रोसेसिंग में गोता लगाने से पहले, डेटासेट का निरीक्षण करना महत्वपूर्ण है:
12345
import pandas as pd # Load the datasetdata = pd.read_csv('CarPrice.csv')print(data.head())
नमूना आउटपुट:
car_ID
symboling
CarName
fueltype
aspiration
doornumber
carbody
highwaympg
price
1
3
alfa-romero giulia
gas
std
two
convertible
27
13495.0
2
3
alfa-romero stelvio
gas
std
two
convertible
27
16500.0
3
1
alfa-romero Quadrifoglio
gas
std
two
hatchback
26
16500.0
4
2
audi 100 ls
gas
std
four
sedan
30
13950.0
5
2
audi 100ls
gas
std
four
sedan
22
17450.0
डेटा प्रीप्रोसेसिंग
प्रभावी डेटा प्रीप्रोसेसिंग सही और कुशल मशीन लर्निंग मॉडलों के निर्माण के लिए आवश्यक है। इस खंड में गायब डेटा को संभालना, फीचर चयन, वर्गीकृत चर का एन्कोडिंग, और फीचर स्केलिंग शामिल हैं।
गायब डेटा को संभालना
संख्यात्मक फीचर्स
संख्यात्मक फीचर्स में गायब मानों को औसत, माध्यिका, या सबसे अधिक आवृत्ति जैसी रणनीतियों का उपयोग करके प्रतिपूर्ति किया जा सकता है:
123456789101112
import numpy as npfrom sklearn.impute import SimpleImputer # Initialize imputer with mean strategyimp_mean = SimpleImputer(missing_values=np.nan, strategy='mean') # Identify numerical columnsnumerical_cols = list(np.where((X.dtypes == np.int64) | (X.dtypes == np.float64))[0]) # Fit and transform the numerical dataimp_mean.fit(X.iloc[:, numerical_cols])X.iloc[:, numerical_cols] = imp_mean.transform(X.iloc[:, numerical_cols])
श्रेणीबद्ध फीचर्स
श्रेणीबद्ध डेटा के लिए, सबसे अधिक आवृत्ति वाला मान गायब प्रविष्टियों की जगह ले सकता है:
1234567891011
from sklearn.impute import SimpleImputer # Identify string columnsstring_cols = list(np.where((X.dtypes == object))[0]) # Initialize imputer with most frequent strategyimp_freq = SimpleImputer(missing_values=np.nan, strategy='most_frequent') # Fit and transform the categorical dataimp_freq.fit(X.iloc[:, string_cols])X.iloc[:, string_cols] = imp_freq.transform(X.iloc[:, string_cols])
फीचर चयन
अनुचित या अतिरुक्त फीचर्स को हटाने से मॉडल प्रदर्शन में सुधार हो सकता है:
12
# Drop the 'car_ID' column as it's not a predictive featureX.drop('car_ID', axis=1, inplace=True)
वर्गीकृत चर का एन्कोडिंग
मशीन लर्निंग मॉडलों को संख्यात्मक इनपुट की आवश्यकता होती है। इसलिए, वर्गीकृत चर को एन्कोड करना आवश्यक है।
वन-हॉट एन्कोडिंग
वन-हॉट एन्कोडिंग वर्गीकृत चर को बाइनरी मैट्रिक्स में परिवर्तित करता है:
1234567891011121314
from sklearn.preprocessing import OneHotEncoderfrom sklearn.compose import ColumnTransformer # Identify string columns for encodingstring_cols = list(np.where((X.dtypes == object))[0]) # Initialize ColumnTransformer with OneHotEncodercolumnTransformer = ColumnTransformer( [('encoder', OneHotEncoder(), string_cols)], remainder='passthrough') # Apply transformationX = columnTransformer.fit_transform(X)
फीचर स्केलिंग
स्केलिंग सुनिश्चित करता है कि संख्यात्मक फीचर्स मॉडल प्रशिक्षण प्रक्रिया में समान योगदान दें।
मानकीकरण
मानकीकरण फीचर्स को 0 के औसत और 1 के मानक विचलन के साथ स्केल करता है:
123456789
from sklearn.preprocessing import StandardScaler # Initialize StandardScalersc = StandardScaler(with_mean=False) # Fit and transform the training datasc.fit(X_train)X_train = sc.transform(X_train)X_test = sc.transform(X_test)
मशीन लर्निंग मॉडल बनाना
प्रीप्रोसेस्ड डेटा के साथ, विभिन्न रिग्रेशन मॉडल्स बनाए और मूल्यांकन किए जा सकते हैं।
डिसीजन ट्री रिग्रेशर
12345678910
from sklearn.tree import DecisionTreeRegressorfrom sklearn.metrics import r2_score # Initialize the modelmodel = DecisionTreeRegressor(max_depth=4) # Train and evaluatemodel.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred))
R² स्कोर: 0.884
रैंडम फॉरेस्ट रिग्रेशर
123456789
from sklearn.ensemble import RandomForestRegressor # Initialize the modelmodel = RandomForestRegressor(n_estimators=25, random_state=10) # Train and evaluatemodel.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred))
R² स्कोर: 0.911
AdaBoost रिग्रेशर
123456789
from sklearn.ensemble import AdaBoostRegressor # Initialize the modelmodel = AdaBoostRegressor(random_state=0, n_estimators=100) # Train and evaluatemodel.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred))
R² स्कोर: 0.881
XGBoost रिग्रेशर
123456789101112131415
import xgboost as xgb # Initialize the modelmodel = xgb.XGBRegressor( n_estimators=100, reg_lambda=1, gamma=0, max_depth=3, learning_rate=0.05) # Train and evaluatemodel.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred))
R² स्कोर: 0.895
सपोर्ट वेक्टर रिग्रेशर (SVR)
123456789
from sklearn.svm import SVR # Initialize the modelmodel = SVR() # Train and evaluatemodel.fit(X_train, y_train)y_pred = model.predict(X_test)print(r2_score(y_test, y_pred))
R² स्कोर: -0.027
नोट: 0 से कम R² स्कोर यह दर्शाता है कि मॉडल क्षैतिज रेखा की तुलना में खराब प्रदर्शन कर रहा है।
GridSearchCV के बिना K-Fold क्रॉस-वैलिडेशन लागू करना
K-Fold क्रॉस-वैलिडेशन को मैन्युअली लागू करने से प्रशिक्षण और मूल्यांकन प्रक्रिया पर सूक्ष्म नियंत्रण प्राप्त होता है। यहाँ एक चरण-दर-चरण मार्गदर्शिका है:
चरण 1: K-Fold को प्रारंभ करना
1234
from sklearn.model_selection import KFold # Initialize KFold with 5 splits, shuffling, and a fixed random state for reproducibilitykf = KFold(n_splits=5, random_state=42, shuffle=True)
चरण 2: मॉडल बनाने का फ़ंक्शन परिभाषित करना
पुन: उपयोग के लिए मॉडल प्रशिक्षण और मूल्यांकन को एक फ़ंक्शन में संलग्न करें:
123456
from sklearn.metrics import r2_score def build_model(X_train, X_test, y_train, y_test, model): model.fit(X_train, y_train) y_pred = model.predict(X_test) return r2_score(y_test, y_pred)
चरण 3: K-Fold क्रॉस-वैलिडेशन निष्पादित करना
प्रत्येक फोल्ड के माध्यम से पुनरावृत्ति करें, मॉडल प्रशिक्षित करें, और R² स्कोर एकत्र करें:
12345678
scores = []for train_index, test_index in kf.split(X): X_train_fold, X_test_fold = X[train_index], X[test_index] y_train_fold, y_test_fold = y.iloc[train_index], y.iloc[test_index] score = build_model(X_train_fold, X_test_fold, y_train_fold, y_test_fold, model) scores.append(score) print(scores)
नमूना आउटपुट:
12345
[-0.10198885010286984, -0.05769313782320418, -0.1910165707884004, -0.09880100338491071, -0.260272529471554]
स्कोर की व्याख्या: नकारात्मक R² स्कोर सभी फोल्ड्स में खराब मॉडल प्रदर्शन को दर्शाते हैं। यह ओवरफिटिंग, डेटा लीकेज, या अनुचित मॉडल चयन जैसी समस्याओं का संकेत देता है।
चरण 4: परिणामों का विश्लेषण करना
क्रॉस-वैलिडेशन स्कोर का व्यापक विश्लेषण मॉडल की स्थिरता और सामान्यीकरण क्षमताओं के बारे में अंतर्दृष्टि प्रदान कर सकता है।
12345678
import numpy as np # Calculate mean and standard deviationmean_score = np.mean(scores)std_score = np.std(scores) print(f"Mean R² Score: {mean_score}")print(f"Standard Deviation: {std_score}")
नमूना आउटपुट:
12
Mean R² Score: -0.133554Standard Deviation: 0.077'''
अंतर्दृष्टि:
- नकारात्मक mean R² स्कोर यह संकेत देता है कि मॉडल ठीक से प्रदर्शन नहीं कर रहा है।
- उच्च मानक विचलन विभिन्न फोल्ड्स में महत्वपूर्ण परिवर्तनशीलता को सूचित करता है, जो मॉडल की भविष्यवाणी शक्ति में असंगति की ओर इशारा करता है।
सर्वोत्तम प्रथाएँ और सुझाव
- वर्गीकरण के लिए स्ट्रैटिफाइड K-Fold: जबकि यह मार्गदर्शिका रिग्रेशन पर केंद्रित है, वर्गीकरण कार्यों में प्रत्येक फोल्ड के बीच वर्गों के वितरण को बनाए रखने के लिए स्ट्रैटिफाइड K-Fold का उपयोग करना आवश्यक है।
- फीचर महत्व विश्लेषण: मॉडल प्रशिक्षण के बाद, फीचर महत्व का विश्लेषण यह समझने में मदद कर सकता है कि कौन से फीचर्स लक्ष्य चर को सबसे अधिक प्रभावित करते हैं।
- हाइपरपैरामीटर ट्यूनिंग:
GridSearchCV
के बिना भी, आप हर फोल्ड के भीतर मैन्युअली हाइपरपैरामीटर समायोजित करके अपने मॉडलों के लिए इष्टतम सेटिंग्स पा सकते हैं।
- असंतुलित डेटासेट्स को संभालना: सुनिश्चित करें कि ट्रेनिंग और टेस्टिंग स्प्लिट्स वर्गों का संतुलन बनाए रखें, विशेष रूप से वर्गीकरण कार्यों में।
- मॉडल चयन: हमेशा कई मॉडलों के साथ प्रयोग करें ताकि यह निर्धारित किया जा सके कि कौन सा आपके डेटासेट की विशेषताओं के अनुकूल है।
निष्कर्ष
K-Fold क्रॉस-वैलिडेशन मशीन लर्निंग टूलकिट में एक अनिवार्य तकनीक है, जो मॉडल प्रदर्शन का मूल्यांकन करने के लिए एक मजबूत विधि प्रदान करती है। इस मार्गदर्शिका में दिखाए अनुसार K-Fold क्रॉस-वैलिडेशन को मैन्युअली लागू करके, आप मॉडल प्रशिक्षण प्रक्रिया में गहरी अंतर्दृष्टि प्राप्त करते हैं और प्रत्येक मूल्यांकन चरण पर पूर्ण नियंत्रण बनाए रखते हैं। जबकि GridSearchCV
जैसे स्वचालित उपकरण सुविधाजनक हैं, बुनियादी यांत्रिकी को समझने से आप अधिक जटिल परिदृश्यों का सामना करने और अपनी विशिष्ट आवश्यकताओं के अनुरूप वैलिडेशन प्रक्रिया को अनुकूलित करने में सक्षम होते हैं।
K-Fold क्रॉस-वैलिडेशन की शक्ति को अपनाएं ताकि आपके प्रेडिक्टिव मॉडलों की विश्वसनीयता और सटीकता बढ़ सके, जिससे अधिक सूचित और डेटा-आधारित निर्णय लेने का रास्ता प्रशस्त हो सके।
कीवर्ड्स: K-Fold Cross-Validation, GridSearchCV, Machine Learning, Model Evaluation, Python, Jupyter Notebook, Data Preprocessing, Regression Models, Cross-Validation Techniques, Scikit-Learn