scikit-learn में मल्टी-आउटपुट रिग्रेशन का मूल्यांकन करना
जानें कि मल्टी-आउटपुट रिग्रेशन पूर्वानुमानों के लिए प्रति-लक्ष्य त्रुटियों को प्राप्त करने या कस्टम वेट्स लागू करने के लिए scikit-learn में multioutput पैरामीटर का उपयोग कैसे करें।
इस पृष्ठ पर
संक्षिप्त उत्तर
scikit-learn में कई आउटपुट श्रृंखलाओं वाले मॉडल का मूल्यांकन करने के लिए, mean_absolute_error या r2_score जैसे समर्थित मेट्रिक्स के भीतर multioutput पैरामीटर का उपयोग करें। multioutput='raw_values' सेट करने पर एक ऐरे मिलता है जिसमें प्रत्येक आउटपुट स्ट्रीम के लिए व्यक्तिगत स्कोर होता है, जिससे विस्तृत निदान संभव हो पाता है। एक एकल वेटेड स्कोर की गणना करने के लिए जहाँ विशिष्ट आउटपुट अधिक महत्वपूर्ण हों, multioutput पैरामीटर में वेट्स का एक ऐरे-लाइक ऑब्जेक्ट (जैसे, [0.3, 0.7]) पास करें। यह डिफ़ॉल्ट 'uniform_average' व्यवहार को बदल देता है, जो सभी लक्ष्य चरों को समान रूप से महत्वपूर्ण मानता है।
मल्टी-आउटपुट रिग्रेशन मेट्रिक्स को समझना
मल्टी-टारगेट रिग्रेशन में, एक मॉडल एक साथ कई निरंतर चरों (continuous variables) की भविष्यवाणी करता है। मानक मूल्यांकन मेट्रिक्स आमतौर पर एक एकल स्केलर लौटाते हैं, जो किसी एक विशिष्ट आउटपुट में खराब प्रदर्शन को छिपा सकते हैं यदि अन्य आउटपुट अच्छा प्रदर्शन कर रहे हों। Scikit-learn इस समस्या को त्रुटि को प्रति आउटपुट में विभाजित करने या विशिष्ट वेटिंग रणनीतियों का उपयोग करके उन्हें एकत्रित करने के तंत्र प्रदान करके हल करता है।
मेट्रिक का चयन लक्ष्य कार्यात्मकता के अनुरूप होना चाहिए। उदाहरण के लिए, यदि लक्ष्य वितरण के माध्य (mean) की भविष्यवाणी करना है, तो स्क्वेयर्ड लॉस फंक्शन उपयुक्त है। यदि लक्ष्य माध्यिका (median) है, तो एब्सोल्यूट लॉस को प्राथमिकता दी जाती है। मल्टी-आउटपुट परिदृश्यों में, इस निरंतरता को सभी लक्ष्य आयामों में बनाए रखा जाना चाहिए।
व्यावहारिक सुझाव
मल्टी-आउटपुट मेट्रिक्स के लिए कस्टम वेट्स का उपयोग करते समय, सुनिश्चित करें कि वेट्स का योग 1.0 हो ताकि मेट्रिक के मूल पैमाने और वेटेड एवरेज के रूप में इसकी व्याख्या बनी रहे।
प्रति-आउटपुट मूल्यांकन के लिए raw_values का उपयोग करना
'raw_values' विकल्प यह निदान करने के लिए आवश्यक है कि कौन सा विशिष्ट लक्ष्य चर मॉडल के खराब प्रदर्शन का कारण बन रहा है। परिणामों का औसत निकालने के बजाय, scikit-learn एक ऐरे लौटाता है जहाँ प्रत्येक तत्व एक आउटपुट कॉलम के लिए गणना किए गए मेट्रिक के अनुरूप होता है।
यह विशेष रूप से तब उपयोगी होता है जब लक्ष्य चरों के पैमाने (scales) अलग-अलग होते हैं या शोर (noise) का स्तर अलग होता है, क्योंकि यह उच्च-परिमाण वाले चर की त्रुटि को समग्र स्कोर पर हावी होने से रोकता है।
from sklearn.metrics import mean_absolute_error; import numpy as np; y_true = np.array([[0.5, 1], [-1, 1], [7, -6]]); y_pred = np.array([[0, 2], [-1, 2], [8, -5]]); scores = mean_absolute_error(y_true, y_pred, multioutput='raw_values'); print(scores) # Illustrative output: [0.5, 1. ]मल्टीपल आउटपुट्स के लिए कस्टम वेटिंग लागू करना
जब कुछ आउटपुट श्रृंखलाएं दूसरों की तुलना में व्यावसायिक रूप से अधिक महत्वपूर्ण होती हैं, तो एक समान औसत (uniform average) भ्रामक हो सकता है। Scikit-learn multioutput पैरामीटर में वेट्स का एक ऐरे पास करने की अनुमति देता है। परिणामी स्कोर व्यक्तिगत त्रुटियों का वेटेड सम (weighted sum) होता है।
उदाहरण के लिए, यदि दूसरा आउटपुट पहले की तुलना में दोगुना महत्वपूर्ण है, तो [0.33, 0.67] जैसे वेट्स लागू किए जा सकते हैं। यह सुनिश्चित करता है कि अंतिम स्केलर विशिष्ट लक्ष्य चरों के प्राथमिकता वाले महत्व को दर्शाता है।
from sklearn.metrics import mean_absolute_error; import numpy as np; y_true = np.array([[0.5, 1], [-1, 1], [7, -6]]); y_pred = np.array([[0, 2], [-1, 2], [8, -5]]); weighted_mae = mean_absolute_error(y_true, y_pred, multioutput=[0.3, 0.7]); print(weighted_mae) # Illustrative output: 0.85वेटेड बनाम यूनिफॉर्म एवरेजिंग की तुलना
यूनिफॉर्म एवरेजिंग ('uniform_average') डिफ़ॉल्ट व्यवहार है, जो प्रत्येक आउटपुट को समान वेट देता है। यह तब उपयुक्त होता है जब सभी लक्ष्य एक ही प्रकृति और महत्व के होते हैं।
इसके विपरीत, वेटेड एवरेजिंग उपयोगकर्ता को विशिष्ट आयामों में त्रुटियों को अधिक भारी रूप से दंडित करने की अनुमति देती है। 'raw_values' की तुलना वेटेड एवरेज से करने पर यह निर्धारित करने में मदद मिलती है कि क्या एक वैश्विक स्कोर किसी एक समस्याग्रस्त आउटपुट के कारण प्रभावित हो रहा है या मॉडल सभी लक्ष्यों में लगातार औसत प्रदर्शन कर रहा है।
विभिन्न मेट्रिक्स पर मल्टी-आउटपुट लॉजिक लागू करना
scikit-learn के सभी मेट्रिक्स multioutput पैरामीटर का समर्थन नहीं करते हैं। मीन एब्सोल्यूट एरर (MAE), रूट मीन स्क्वेर्ड एरर (RMSE), और R2 स्कोर जैसे सामान्य रिग्रेशन मेट्रिक्स इसका समर्थन करते हैं।
हालांकि, कुछ रोबस्ट मेट्रिक्स, जैसे कि median_absolute_error, मल्टी-आउटपुट इनपुट का समर्थन नहीं करते हैं। ऐसी स्थितियों में, उपयोगकर्ताओं को मैन्युअल रूप से आउटपुट कॉलम पर इटरेट करना होगा और प्रत्येक के लिए मेट्रिक की गणना करनी होगी।
वेटेड मल्टी-आउटपुट के लिए कस्टम स्कोरर बनाना
GridSearchCV या cross_val_score के भीतर वेटेड मल्टी-आउटपुट मेट्रिक का उपयोग करने के लिए, आपको make_scorer का उपयोग करके मेट्रिक को रैप करना होगा। चूंकि multioutput पैरामीटर एक कीवर्ड आर्गुमेंट है, इसलिए इसे स्कोरर बनाते समय पास किया जाना चाहिए।
क्योंकि ये मेट्रिक्स आमतौर पर लॉस (जहाँ कम मान बेहतर होता है) होते हैं, इसलिए make_scorer में greater_is_better पैरामीटर को False पर सेट किया जाना चाहिए ताकि यह सुनिश्चित हो सके कि सर्च एल्गोरिदम सही ढंग से निगेटेड लॉस को मैक्सिमाइज करे।
from sklearn.metrics import make_scorer, mean_absolute_error; from sklearn.model_selection import GridSearchCV; from sklearn.linear_model import LinearRegression; weighted_mae_scorer = make_scorer(mean_absolute_error, multioutput=[0.3, 0.7], greater_is_better=False); grid = GridSearchCV(LinearRegression(), param_grid={}, scoring=weighted_mae_scorer)एक साथ कई मेट्रिक्स का मूल्यांकन करना
एक व्यापक दृष्टिकोण के लिए, आप cross_validate का उपयोग करके कई प्रदर्शन संकेतकों को ट्रैक कर सकते हैं। scoring पैरामीटर में एक डिक्शनरी पास करके, आप वेटेड एग्रीगेट और R2 जैसे अन्य मेट्रिक्स दोनों की एक साथ निगरानी कर सकते हैं।
यह डेवलपर को यह देखने की अनुमति देता है कि क्या वेटेड MAE में सुधार करने से सभी आउटपुट में समग्र वेरिएंस (R2) की कीमत चुकानी पड़ती है।
from sklearn.model_selection import cross_validate; from sklearn.metrics import make_scorer, mean_absolute_error; from sklearn.linear_model import LinearRegression; import numpy as np; X = np.random.rand(10, 3); y = np.random.rand(10, 2); scoring_dict = {'weighted_mae': make_scorer(mean_absolute_error, multioutput=[0.3, 0.7], greater_is_better=False), 'r2': 'r2'}; results = cross_validate(LinearRegression(), X, y, scoring=scoring_dict, cv=2); print(results['test_weighted_mae'])संगत स्कोरिंग फंक्शन का चयन करना
स्कोरिंग में निरंतरता का अर्थ है कि मेट्रिक भविष्यवाणी के लक्षित फंक्शनल के साथ संरेखित होना चाहिए। यदि मॉडल को माध्य (mean) की भविष्यवाणी करने के लिए प्रशिक्षित किया गया है, तो RMSE या MAE उपयुक्त हैं।
मल्टी-आउटपुट कार्यों से निपटते समय, यह सुनिश्चित करें कि वेटिंग रणनीति अनजाने में मेट्रिक के सांख्यिकीय अर्थ को न बदल दे। उदाहरण के लिए, औसत निकालते समय RMSE को सावधानी से संभाला जाना चाहिए, क्योंकि मूल त्रुटि पैमाने को बनाए रखने के लिए MSE से RMSE में अनुवाद के दौरान वर्गमूल (square root) को संरक्षित किया जाना चाहिए।
क्या जाँचें
- सत्यापित करें कि y_true और y_pred के आकार (n_samples, n_outputs) मेल खाते हैं।
- पुष्टि करें कि चुना गया मेट्रिक multioutput पैरामीटर का समर्थन करता है।
- सुनिश्चित करें कि त्रुटि-आधारित मेट्रिक्स के लिए make_scorer में greater_is_better=False सेट है।
- जांचें कि वेट्स ऐरे की लंबाई आउटपुट कॉलम की संख्या से मेल खाती है।
उपयोग की सीमाएँ
multioutput पैरामीटर सभी मेट्रिक्स द्वारा समर्थित नहीं है, विशेष रूप से median_absolute_error इसमें शामिल नहीं है। इसके लिए लक्ष्य और भविष्यवाणी ऐरे के आयामों का मेल खाना आवश्यक है।