html
मशीन लर्निंग के लिए डेटा तैयार करना: लापता मानों का प्रबंधन, एन्कोडिंग, और संतुलन
विषय सूची
- समीक्षा: वन-हॉट एन्कोडिंग के मूल तत्व
- लापता मानों का प्रबंधन
- तारीख फीचर का समाधान
- वन-हॉट एन्कोडिंग पुनरीक्षित
- असंतुलित डेटा का प्रबंधन
- डेटा का विभाजन
- फीचर स्केलिंग
- निष्कर्ष
समीक्षा: वन-हॉट एन्कोडिंग के मूल तत्व
हमारे पिछले सत्र में, हमने वन-हॉट एन्कोडिंग की परिचय दी थी—एक विधि जो श्रेणीबद्ध चर को मशीन लर्निंग एल्गोरिदम के उपयुक्त प्रारूप में परिवर्तित करती है। हमने आवश्यक कथन जोड़े थे लेकिन और अधिक चर और सामग्री की खोज के लिए विराम लिया। आज, हम उस आधार पर आगे बढ़ेंगे।
लापता मानों का प्रबंधन
लापता डेटा की पहचान
एन्कोडिंग से पहले, यह सुनिश्चित करना महत्वपूर्ण है कि आपके डेटासेट में लापता मान नहीं हैं, जो मॉडल प्रशिक्षण के दौरान त्रुटियों का कारण बन सकते हैं। pandas का उपयोग करके, हम लापता मानों की पहचान निम्नानुसार कर सकते हैं:
1234
import pandas as pd missing_values = pd.isnull(x).sum()print(missing_values)
शून्य का योग यह दर्शाता है कि कोई लापता मान नहीं हैं। हालांकि, यदि कुछ कॉलम गैर-शून्य मान प्रदर्शित करते हैं, तो उन कॉलमों में लापता डेटा होता है जिन्हें संबोधित करने की आवश्यकता है।
संख्यात्मक और श्रेणीबद्ध लापता डेटा का प्रबंधन
हमने औसत या माध्यिका प्रतिपूर्ति जैसी रणनीतियों का उपयोग करके संख्यात्मक कॉलमों में लापता मानों को सफलतापूर्वक संभाला है। हालांकि, श्रेणीबद्ध (स्ट्रिंग) कॉलमों के लिए एक अलग दृष्टिकोण की आवश्यकता होती है। श्रेणीबद्ध डेटा के लिए, सबसे अधिक आवृत्त मान अक्सर प्रतिपूर्ति के लिए उपयोग किया जाता है। इसे लागू करने का तरीका यहाँ है:
123456789
from sklearn.impute import SimpleImputer # For numerical datanum_imputer = SimpleImputer(strategy='mean')x_numeric = num_imputer.fit_transform(x_numeric) # For categorical datacat_imputer = SimpleImputer(strategy='most_frequent')x_categorical = cat_imputer.fit_transform(x_categorical)
तारीख फीचर का समाधान
तारीखें समस्याग्रस्त हो सकती हैं क्योंकि वे अक्सर अद्वितीय मानों पर होती हैं, जिससे वे भविष्यवाणी मॉडलिंग के लिए कम उपयोगी होती हैं। पूरी तिथि शामिल करने से उच्च आयामीकरण उत्पन्न हो सकता है और प्रेडिक्टिव पावर जोड़े बिना आपके मॉडल को धीमा कर सकता है। यहाँ कुछ रणनीतियाँ हैं:
- फीचर निष्कर्षण: वर्ष को छोड़कर दिन और महीने जैसे सार्थक घटकों को निकालें।
- लेबल एन्कोडिंग: तिथियों को संख्यात्मक लेबल सौंपें, लेकिन सावधान रहें क्योंकि यह अनजाने ऑर्डिनल संबंधों को उत्पन्न कर सकता है।
- वन-हॉट एन्कोडिंग: फीचर्स की संख्या में वृद्धि के कारण तिथियों के लिए अनुशंसित नहीं।
इन चुनौतियों को देखते हुए, सबसे सीधा समाधान है कि यदि यह आपके मॉडल के लिए आवश्यक नहीं है, तो तारीख फीचर को पूरी तरह से हटा दें:
1
x = x.drop(['date'], axis=1)
हमारे मामले में, Kaggle के "रेन प्रेडिक्शन इन ऑस्ट्रेलिया" डेटासेट विवरण के आधार पर, हमने बेहतर प्रदर्शन के लिए risk_mm
वेरिएबल को भी बाहर कर दिया है।
वन-हॉट एन्कोडिंग पुनरीक्षित
लापता मानों का प्रबंधन करने और अप्रासंगिक फीचर्स को हटाने के बाद, हम वन-हॉट एन्कोडिंग के साथ आगे बढ़ते हैं:
12345
from sklearn.preprocessing import OneHotEncoder encoder = OneHotEncoder()x_encoded = encoder.fit_transform(x)print(x_encoded.shape) # Example output: (number_of_samples, 115)
जैसा कि अपेक्षित था, एन्कोडिंग प्रक्रिया के कारण कॉलमों की संख्या बढ़ जाती है, हमारे उदाहरण में यह 23 से बढ़कर 115 हो जाती है।
असंतुलित डेटा का प्रबंधन
असंतुलित डेटासेट आपके मॉडल को बहुसंख्या वर्ग की ओर झुकाव दे सकते हैं, जिससे अल्पसंख्या वर्ग की सटीक भविष्यवाणी की क्षमता कम हो जाती है। इसे संबोधित करने के लिए यहाँ हैं तरीके:
- असंतुलन की जांच करें:
1234
from collections import Counter counter = Counter(y)print(counter) # Example output: {0: 2700, 1: 900}
यदि एक वर्ग दूसरे से काफी अधिक है (उदा. 75% बनाम 25%), तो संतुलन आवश्यक है।
- अल्पसंख्या वर्ग का अपसैंपलिंग:
123456789101112131415161718192021
from sklearn.utils import resample # Combine into a single DataFramedata = pd.concat([x_encoded, y], axis=1) # Separate majority and minority classesmajority = data[data.y == 0]minority = data[data.y == 1] # Upsample minorityminority_upsampled = resample(minority, replace=True, n_samples=len(majority), random_state=42) # Combine majority with upsampled minoritybalanced_data = pd.concat([majority, minority_upsampled]) # Separate features and targetX_balanced = balanced_data.drop('y', axis=1)y_balanced = balanced_data['y']
- सत्यापन:
12
print(Counter(y_balanced))# Output: {0: 2700, 1: 2700}
डेटा का विभाजन
संतुलित डेटा के साथ, हम इसे प्रशिक्षण और परीक्षण सेटों में विभाजित करना जारी रखते हैं:
12345
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X_balanced, y_balanced, test_size=0.2, random_state=42)
फीचर स्केलिंग
अंत में, हम फीचर्स को मानकीकृत करते हैं ताकि प्रत्येक फीचर मॉडल के प्रदर्शन में समान योगदान दे।
12345678
from sklearn.preprocessing import StandardScaler scaler = StandardScaler(with_mean=False) # Avoid centering on sparse matricesX_train_scaled = scaler.fit_transform(X_train)X_test_scaled = scaler.transform(X_test) print(X_train_scaled.shape)print(X_test_scaled.shape)
सूचना: वन-हॉट एन्कोडिंग से उत्पन्न होने वाली स्पार्स मैट्रिसेस के साथ काम करते समय, StandardScaler
में with_mean=False
सेट करने से सेंट्रलिंग संबंधी त्रुटियों से बचा जा सकता है।
निष्कर्ष
डेटा पूर्व-संसाधन कला और विज्ञान दोनों है, जो आपके डेटासेट को प्रभावी ढंग से तैयार करने के लिए विचारशील निर्णय लेने की आवश्यकता होती है। लापता मानों का प्रबंधन करके, श्रेणीबद्ध वेरिएबल्स को एन्कोड करके, तारीख फीचर्स का प्रबंधन करके, और अपने डेटा को संतुलित करके, आप मजबूत मशीन लर्निंग मॉडल बनाने के लिए एक ठोस आधार रखते हैं। याद रखें, आपके डेटा की गुणवत्ता सीधे आपके मॉडलों के प्रदर्शन को प्रभावित करती है, इसलिए इन पूर्व-संसाधन चरणों में आवश्यक समय और प्रयास निवेश करें।
हाथों-हाथ अनुभव के लिए इस Jupyter नोटबुक को फिर से देख सकते हैं, और अगर आपके कोई प्रश्न हों तो संपर्क करने में संकोच न करें। खुश मॉडलिंग!