मशीन लर्निंग और डेटा साइंस के क्षेत्र में, फीचर इंजीनियरिंग मॉडल प्रदर्शन सुधार की आधारशिला के रूप में खड़ी है। जबकि एल्गोरिदम और मॉडल अक्सर सुर्खियों में रहते हैं, यह सावधानीपूर्वक तैयार की गई विशेषताएं हैं जो पूर्वानुमानित शक्ति की नींव रखती हैं। एक कमजोर नींव पर एक घर बनाने की कोशिश करने की कल्पना करें - मजबूत सुविधाओं के बिना, जटिल डेटासेट का सामना करने पर सबसे उन्नत एल्गोरिदम भी ढह सकते हैं।
फ़ीचर इंजीनियरिंग किसी मॉडल के प्रदर्शन को अधिकतम करने के लिए कच्चे डेटा से सुविधाओं (इनपुट चर) को चुनने, बदलने और बनाने की रचनात्मक और रणनीतिक प्रक्रिया है। यह डेटा को कार्रवाई योग्य अंतर्दृष्टि में परिवर्तित करने की कला है, जिससे मशीनों को सटीक भविष्यवाणियां करने के लिए आवश्यक प्रासंगिक समझ मिलती है। चाहे वह घर की कीमतों की भविष्यवाणी करना हो, ग्राहकों की प्राथमिकताओं को वर्गीकृत करना हो, या चिकित्सा स्थितियों का निदान करना हो, फीचर इंजीनियरिंग आपके डेटा के भीतर छिपी क्षमता को अनलॉक करने की कुंजी रखती है।
कल्पना कीजिए कि आपको विभिन्न कारकों के आधार पर घर की कीमतों की भविष्यवाणी करने का काम सौंपा गया है। शुरुआत में आप वर्गाकार फ़ुटेज, शयनकक्षों की संख्या और स्थान जैसी स्पष्ट विशेषताओं की ओर आकर्षित हो सकते हैं। हालाँकि, फीचर इंजीनियरिंग का जादू लक्ष्य चर को प्रभावित करने वाले सूक्ष्म पहलुओं का पता लगाने में निहित है। क्या बाथरूम और शयनकक्ष का अनुपात कीमत पर प्रभाव डालता है? चिमनी की उपस्थिति या छत की उम्र के बारे में क्या?
फ़ीचर इंजीनियरिंग केवल अधिक फ़ीचर बनाने के बारे में नहीं है; यह समझने के बारे में है कि डेटा के कौन से पहलू वास्तव में मायने रखते हैं। इस प्रक्रिया के लिए अक्सर डोमेन ज्ञान, रचनात्मकता और जिस समस्या से आप निपट रहे हैं उसकी गहरी समझ की आवश्यकता होती है। मौजूदा सुविधाओं को परिष्कृत करके और नई सुविधाओं को तैयार करके, आप अनिवार्य रूप से अपने मॉडल को एक विशेषज्ञ की तरह डेटा को समझना सिखा रहे हैं।
इसका उत्तर मॉडल प्रदर्शन में निहित है। अच्छी तरह से इंजीनियर की गई सुविधाओं से प्रशिक्षण के दौरान तेजी से अभिसरण हो सकता है, ओवरफिटिंग कम हो सकती है और अंततः, अधिक सटीक भविष्यवाणियां हो सकती हैं। एक मशीन लर्निंग मॉडल केवल उतना ही अच्छा होता है जितना डेटा इसे खिलाया जाता है, और अच्छी तरह से इंजीनियर की गई विशेषताएं उस डेटा का एक समृद्ध, अधिक सूक्ष्म प्रतिनिधित्व प्रदान करती हैं।
इस लेख में, हम कागल के उन्नत घर मूल्य पूर्वानुमान डेटासेट का उपयोग करके फीचर इंजीनियरिंग की दुनिया में गहराई से उतरेंगे। अनुसरण करके, आप विभिन्न तकनीकों में अंतर्दृष्टि प्राप्त करेंगे जो कच्चे डेटा को मूल्यवान भविष्यवक्ताओं में बदल सकते हैं और आप देखेंगे कि विभिन्न फीचर इंजीनियरिंग विधियों को लागू करने से आपके मॉडल के परिणाम कैसे बेहतर होते हैं।
तो, बिना समय बर्बाद किए, आइए फीचर इंजीनियरिंग के विभिन्न तरीकों के बारे में सीखना शुरू करें।
अब जब हमने मंच तैयार कर लिया है, तो उन्नत फीचर इंजीनियरिंग तकनीकों की रोमांचक दुनिया में उतरने का समय आ गया है। इस अनुभाग में, मैं आपको चार शक्तिशाली तरीकों के चरण-दर-चरण कार्यान्वयन के माध्यम से मार्गदर्शन करूंगा जो आपके पूर्वानुमानित मॉडल को सुपरचार्ज कर सकते हैं। प्रत्येक विधि एक अद्वितीय उद्देश्य को पूरा करती है, अंतर्दृष्टि और सुधार प्रदान करती है जो आपके मॉडल के प्रदर्शन में पर्याप्त अंतर ला सकती है।
कल्पना कीजिए कि आप सर्जिकल परिशुद्धता के साथ अपने मॉडल के लिए सबसे प्रभावशाली सुविधाओं का चयन करने में सक्षम हैं। पारस्परिक जानकारी आपको बस यही हासिल करने की अनुमति देती है। प्रत्येक सुविधा और लक्ष्य चर के बीच संबंध को मापकर, आप उन प्रमुख कारकों की पहचान कर सकते हैं जो आपकी भविष्यवाणियों को प्रभावित करते हैं। हम आपको कोड के बारे में बताएंगे और प्रत्येक चरण का विस्तृत विवरण प्रदान करेंगे, जिससे आपको इस व्यावहारिक तकनीक में महारत हासिल करने में मदद मिलेगी।
क्लस्टर अक्सर आपके डेटा के भीतर मूल्यवान पैटर्न छिपाते हैं। क्लस्टरिंग के साथ, आप इन छिपे हुए रत्नों को उजागर कर सकते हैं और अपने मॉडल की समझ को बढ़ाने के लिए उनका लाभ उठा सकते हैं। मैं समान उदाहरणों को एक साथ समूहित करने के लिए KMeans क्लस्टरिंग लागू करने की प्रक्रिया में आपका मार्गदर्शन करूंगा। आप सीखेंगे कि इन समूहों के आधार पर नई सुविधाएँ कैसे बनाएं और मॉडल प्रदर्शन पर उनके प्रभाव का निरीक्षण करें।
उच्च-आयामी डेटा भारी हो सकता है, लेकिन प्रिंसिपल कंपोनेंट एनालिसिस (पीसीए) एक समाधान प्रदान करता है। सबसे प्रभावशाली आयामों की पहचान करके, आप पूर्वानुमानित शक्ति का त्याग किए बिना जटिलता को कम कर सकते हैं। यह ट्यूटोरियल आपको पीसीए का उपयोग करके अपने डेटा के परिवर्तन के माध्यम से ले जाएगा, यह अंतर्दृष्टि प्रदान करेगा कि यह तकनीक अपनी सटीकता बनाए रखते हुए आपके मॉडल को कैसे सुव्यवस्थित कर सकती है।
इन तरीकों के अलावा, मैं आपको गणितीय परिवर्तनों से भी परिचित कराऊंगा - एक अक्सर नजरअंदाज की जाने वाली तकनीक जो शक्तिशाली परिणाम दे सकती है। चयनित स्तंभों पर गणितीय परिचालन लागू करके, आप अपने मॉडल की मान्यताओं के साथ बेहतर संरेखित करने के लिए अपने डेटा को आकार दे सकते हैं। आप लघुगणक, वर्गमूल और व्युत्क्रम परिवर्तनों का पता लगाएंगे, यह दर्शाते हुए कि वे कैसे छिपे हुए संबंधों को उजागर कर सकते हैं और आपके मॉडल की सटीकता को बढ़ा सकते हैं।
इस पूरे अनुभाग में, मैं यह सुनिश्चित करने के लिए व्यापक स्पष्टीकरण प्रदान करूंगा कि आप न केवल तकनीकी पहलुओं को समझें बल्कि प्रत्येक विधि के अनुप्रयोग के पीछे के तर्क को भी समझें। अंत तक, आपको उन्नत फीचर इंजीनियरिंग तकनीकों का एक मूल्यवान टूलकिट प्राप्त हो जाएगा जिसे विभिन्न परिदृश्यों में आपके पूर्वानुमानित मॉडल को बढ़ाने के लिए आत्मविश्वास से लागू किया जा सकता है।
क्या आप प्रत्येक विधि की पेचीदगियों का पता लगाने, उनकी क्षमता को उजागर करने और खुद को इंजीनियर सुविधाओं की विशेषज्ञता से लैस करने के लिए तैयार हैं जो अधिक सटीक और शक्तिशाली भविष्य कहनेवाला मॉडल में अनुवाद करते हैं? आइए इस ज्ञानवर्धक यात्रा की शुरुआत करें!
आइए सबसे पहले वे सभी पैकेज आयात करें जिनकी आपको आवश्यकता है।
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error from sklearn.feature_selection import SelectKBest, mutual_info_regression from sklearn.cluster import KMeans from sklearn.decomposition import PCA from sklearn.preprocessing import LabelEncoder, StandardScaler import numpy as np
अब, आइए कागल से डेटासेट प्राप्त करें और इसे प्रीप्रोसेस करें।
# Load the dataset data = pd.read_csv('train.csv') # Data preprocessing def preprocess_data(df): # Handle missing values df = df.fillna(df.median()) # Handle categorical variables df = pd.get_dummies(df, drop_first=True) return df data = preprocess_data(data) # Prepare the data X = data.drop('SalePrice', axis=1) y = data['SalePrice'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
शुरू करने के लिए, आइए बिना किसी फीचर इंजीनियरिंग के एक बेसलाइन मॉडल चलाएं और इसकी सटीकता का आकलन करें। उसके बाद, हम चार फीचर इंजीनियरिंग विधियों (पारस्परिक जानकारी, क्लस्टरिंग, पीसीए आयामीता में कमी, और लेबल एन्कोडिंग) में से प्रत्येक को व्यक्तिगत रूप से लागू करेंगे और मॉडल प्रदर्शन पर उनके प्रभावों की तुलना करेंगे।
किसी भी फीचर इंजीनियरिंग को लागू करने से पहले, हम एक बेसलाइन मॉडल से शुरुआत करेंगे। यहां, हम मूल डेटासेट का उपयोग करके घर की कीमतों की भविष्यवाणी करने के लिए एक सरल रैखिक प्रतिगमन मॉडल का उपयोग करेंगे।
baseline_model = LinearRegression() baseline_model.fit(X_train, y_train) baseline_predictions = baseline_model.predict(X_test) baseline_rmse = mean_squared_error(y_test, baseline_predictions, squared=False) print(f"Baseline RMSE: {baseline_rmse}") # ------------------ OUTPUT ---------------- # Baseline RMSE: 49204.92
बेसलाइन मॉडल में, आप एक सरल रैखिक प्रतिगमन मॉडल के साथ शुरुआत कर रहे हैं जो मूल सुविधाओं का वैसे ही उपयोग करता है जैसे वे हैं। आप प्रशिक्षण डेटा का उपयोग करके मॉडल को प्रशिक्षित कर रहे हैं, परीक्षण डेटा पर भविष्यवाणियां कर रहे हैं, और यह मापने के लिए मूल माध्य वर्ग त्रुटि (आरएमएसई) की गणना कर रहे हैं कि मॉडल अदृश्य डेटा पर कितना अच्छा प्रदर्शन करता है।
# Method 1: Mutual Information mi_selector = SelectKBest(score_func=mutual_info_regression, k=10) X_train_mi = mi_selector.fit_transform(X_train, y_train) X_test_mi = mi_selector.transform(X_test) mi_model = LinearRegression() mi_model.fit(X_train_mi, y_train) mi_predictions = mi_model.predict(X_test_mi) mi_rmse = mean_squared_error(y_test, mi_predictions, squared=False) print(f"Mutual Information RMSE: {mi_rmse}") # ------------------ OUTPUT ----------------- # Mutual Information RMSE: 39410.99
यहां, आप लक्ष्य चर के बारे में प्रत्येक सुविधा द्वारा प्रदान की गई जानकारी की खोज कर रहे हैं। आप उन शीर्ष 10 विशेषताओं का चयन करें जिनका लक्ष्य के साथ उच्चतम पारस्परिक सूचना स्कोर है। फिर, आप केवल इन चयनित सुविधाओं का उपयोग करके एक नए रैखिक प्रतिगमन मॉडल को प्रशिक्षित करते हैं। इससे यह सुनिश्चित करने में मदद मिलती है कि आपका मॉडल सबसे अधिक जानकारीपूर्ण सुविधाओं पर ध्यान केंद्रित करता है, और आप यह देखने के लिए आरएमएसई की गणना करते हैं कि इस मॉडल की भविष्यवाणियां आधार रेखा से कैसे तुलना करती हैं।
# Method 2: Clustering num_clusters = 5 kmeans = KMeans(n_clusters=num_clusters, random_state=42) X_clustered = X.copy() X_clustered['Cluster'] = kmeans.fit_predict(X) X_clustered = pd.get_dummies(X_clustered, columns=['Cluster'], prefix='Cluster') X_train_clustered, X_test_clustered, _, _ = train_test_split(X_clustered, y, test_size=0.2, random_state=42) cluster_model = LinearRegression() cluster_model.fit(X_train_clustered, y_train) cluster_predictions = cluster_model.predict(X_test_clustered) cluster_rmse = mean_squared_error(y_test, cluster_predictions, squared=False) print(f"Clustering RMSE: {cluster_rmse}") # ------------------- OUTPUT -------------- # Clustering RMSE: 47715.30
आप क्लस्टरिंग का उपयोग करके अपने डेटा में समान उदाहरणों को समूहीकृत करने पर विचार कर रहे हैं। विशेष रूप से, आप अपने डेटा को क्लस्टर में विभाजित करने के लिए KMeans एल्गोरिदम का उपयोग करते हैं। प्रत्येक उदाहरण को एक क्लस्टर को सौंपा गया है, और आप इस क्लस्टर जानकारी को एक नई श्रेणीबद्ध सुविधा के रूप में जोड़ते हैं। ऐसा करके, आप मॉडल को उनके समूहों के संदर्भ में उदाहरणों के बीच संबंधों पर विचार करने का एक तरीका दे रहे हैं। इस संकुल डेटा पर एक रैखिक प्रतिगमन मॉडल को प्रशिक्षित करने के बाद, आप इसके प्रदर्शन का मूल्यांकन करने के लिए आरएमएसई की गणना करते हैं।
# Method 3: PCA Dimensionality Reduction scaler = StandardScaler() X_scaled = scaler.fit_transform(X_train) pca = PCA(n_components=10) X_train_pca = pca.fit_transform(X_scaled) X_test_pca = pca.transform(scaler.transform(X_test)) pca_model = LinearRegression() pca_model.fit(X_train_pca, y_train) pca_predictions = pca_model.predict(X_test_pca) pca_rmse = mean_squared_error(y_test, pca_predictions, squared=False) print(f"PCA RMSE: {pca_rmse}") # --------------- OUTPUT -------------- # PCA RMSE: 40055.78
पीसीए आपके डेटा को कम आयामों में सारांशित करके उसकी जटिलता को कम करने में आपकी मदद करता है। आप यह सुनिश्चित करने के लिए अपने डेटा का मानकीकरण करते हैं कि सभी सुविधाएँ समान पैमाने पर हैं। फिर, आप अपने डेटा में सबसे महत्वपूर्ण पैटर्न की पहचान करने और सुविधाओं की संख्या को 10 प्रमुख घटकों तक कम करने के लिए पीसीए का उपयोग करते हैं। इन घटकों पर एक रेखीय प्रतिगमन मॉडल का प्रशिक्षण करके, आप मॉडल को सरल बनाते हुए सबसे महत्वपूर्ण जानकारी प्राप्त करने में सक्षम हैं। आरएमएसई आपको यह आकलन करने में मदद करता है कि यह दृष्टिकोण प्रभावी है या नहीं।
# Method 5: Mathematical Transformations X_train_transformed = X_train.copy() X_test_transformed = X_test.copy() # Apply logarithmic transformation log_columns = ['GrLivArea', 'LotArea'] # Specify columns to apply log transformation X_train_transformed[log_columns] = np.log1p(X_train_transformed[log_columns]) X_test_transformed[log_columns] = np.log1p(X_test_transformed[log_columns]) # Apply square root transformation sqrt_columns = ['GarageArea', '1stFlrSF'] # Specify columns to apply square root transformation X_train_transformed[sqrt_columns] = np.sqrt(X_train_transformed[sqrt_columns]) X_test_transformed[sqrt_columns] = np.sqrt(X_test_transformed[sqrt_columns]) # Apply inverse transformation inv_columns = ['YearBuilt', 'OverallQual'] # Specify columns to apply inverse transformation X_train_transformed[inv_columns] = 1 / X_train_transformed[inv_columns] X_test_transformed[inv_columns] = 1 / X_test_transformed[inv_columns] math_transform_model = LinearRegression() math_transform_model.fit(X_train_transformed, y_train) math_transform_predictions = math_transform_model.predict(X_test_transformed) math_transform_rmse = mean_squared_error(y_test, math_transform_predictions, squared=False) print(f"Mathematical Transformations RMSE: {math_transform_rmse}") # ------------------ OUTPUT --------------- # Mathematical Transformations RMSE: 47143.21
गणितीय परिवर्तनों में अंतर्निहित पैटर्न को सामने लाने के लिए गणितीय परिचालनों का उपयोग करके फीचर मानों को बदलना शामिल है। आप विशिष्ट स्तंभों पर लघुगणक, वर्गमूल और व्युत्क्रम परिवर्तन लागू करते हैं। उदाहरण के लिए, लॉगरिदमिक परिवर्तन विषम डेटा को सामान्य बनाने में मदद करता है, वर्गमूल परिवर्तन आउटलेर्स के साथ मदद कर सकता है, और व्युत्क्रम परिवर्तन छोटे मूल्यों के साथ संबंधों पर जोर दे सकता है। आप इन रूपांतरित सुविधाओं का उपयोग करके एक रेखीय प्रतिगमन मॉडल को प्रशिक्षित करते हैं और यह आकलन करने के लिए आरएमएसई की गणना करते हैं कि क्या परिवर्तनों ने मॉडल की पूर्वानुमानित शक्ति में सुधार किया है।
इन सभी तरीकों में, आप अपने डेटा को मॉडलिंग के लिए अधिक उपयुक्त बनाने के लिए विभिन्न तकनीकों का प्रयोग कर रहे हैं। लक्ष्य उस विधि को ढूंढना है जो न्यूनतम आरएमएसई की ओर ले जाए, यह दर्शाता है कि आपके मॉडल की भविष्यवाणियां वास्तविक लक्ष्य मूल्यों के करीब हैं और इसलिए अधिक सटीक हैं।
बेसलाइन आरएमएसई: 49204.92 यह बेसलाइन मॉडल की मूल माध्य वर्ग त्रुटि (आरएमएसई) है, जहां कोई फीचर इंजीनियरिंग या परिवर्तन लागू नहीं किया गया है। मॉडल मूल सुविधाओं का वैसे ही उपयोग करता है जैसे वे हैं। 49204.92 का आरएमएसई परीक्षण डेटा पर बेसलाइन मॉडल की औसत भविष्यवाणी त्रुटि को इंगित करता है।
पारस्परिक सूचना आरएमएसई: 39410.99 यह आरएमएसई पारस्परिक सूचना सुविधा चयन पद्धति को लागू करने के बाद मॉडल के प्रदर्शन का प्रतिनिधित्व करता है। यह बेसलाइन आरएमएसई से काफी कम है, जो दर्शाता है कि उनके पारस्परिक सूचना स्कोर के आधार पर शीर्ष k सुविधाओं का चयन करने से मॉडल के प्रदर्शन में सुधार हुआ है।
क्लस्टरिंग आरएमएसई: 47715.30 यहां आरएमएसई क्लस्टरिंग के आधार पर एक नई श्रेणीबद्ध सुविधा शुरू करने के बाद मॉडल के प्रदर्शन से मेल खाता है। आरएमएसई बेसलाइन आरएमएसई के करीब है, यह सुझाव देता है कि क्लस्टरिंग की शुरूआत से इस मामले में कोई महत्वपूर्ण सुधार नहीं हुआ है।
पीसीए आरएमएसई: 40055.78 यह आरएमएसई आयामीता में कमी के लिए पीसीए लागू करने के बाद मॉडल के प्रदर्शन को दर्शाता है। यह पारस्परिक सूचना आरएमएसई से थोड़ा अधिक है लेकिन बेसलाइन आरएमएसई से कम है। पीसीए-रूपांतरित सुविधाओं का उपयोग करने वाला मॉडल मध्यम रूप से अच्छा प्रदर्शन करता प्रतीत होता है।
लेबल एन्कोडिंग आरएमएसई: 49204.92 यहां आरएमएसई मॉडल का प्रदर्शन दिखाता है जब श्रेणीबद्ध चर लेबल एन्कोडेड होते हैं। आरएमएसई बेसलाइन आरएमएसई से मेल खाता है, जो दर्शाता है कि लेबल एन्कोडेड सुविधाओं का उपयोग करने से इस मामले में कोई उल्लेखनीय सुधार नहीं हुआ है।
गणितीय परिवर्तन आरएमएसई: 47143.21 यह आरएमएसई चयनित स्तंभों में विभिन्न गणितीय परिवर्तनों को लागू करने के बाद मॉडल के प्रदर्शन का प्रतिनिधित्व करता है। आरएमएसई बेसलाइन आरएमएसई से कम है, जिससे पता चलता है कि इन परिवर्तनों से मॉडल के प्रदर्शन में सुधार हुआ है।
सारांश:
ध्यान रखें कि वास्तविक आरएमएसई मान और उनकी व्याख्या विभिन्न कारकों जैसे डेटासेट, मॉडल की जटिलता और लक्ष्य चर की प्रकृति पर निर्भर करती है। लक्ष्य विभिन्न फ़ीचर इंजीनियरिंग विधियों के साथ प्रयोग करना और उस पद्धति का चयन करना है जो अनदेखे डेटा पर सर्वोत्तम प्रदर्शन की ओर ले जाती है।