Scikit में पूर्ण प्रतिशत त्रुटि (MAPE) का मतलब है [जानें]


24

हम पायथन और स्किकिट-लर्न का उपयोग करके अपनी भविष्यवाणियों के औसत निरपेक्ष प्रतिशत त्रुटि (एमएपीई) की गणना कैसे कर सकते हैं?

से डॉक्स , हम प्रतिगमन के लिए ही इन 4 मीट्रिक कार्य:

  • metrics.explained_variance_score (y_true, y_pred)
  • मेट्रिक्स.mean_absolute_error (y_true, y_pred)
  • मेट्रिक्स.mean_squared_error (y_true, y_pred)
  • metrics.r2_score (y_true, y_pred)

इस उत्तर को स्टैकऑवरफ़्लो- stackoverflow.com/questions/42250958/…
अर्पित सिसोदिया

जवाबों:


24

जैसा कि उल्लेख किया गया है (उदाहरण के लिए, विकिपीडिया में ), एमएपीई समस्याग्रस्त हो सकता है। सबसे स्पष्ट रूप से, यह विभाजन-दर-शून्य त्रुटियों का कारण बन सकता है। मेरा अनुमान है कि यही कारण है कि इसे स्केलेर मेट्रिक्स में शामिल नहीं किया गया है।

हालांकि, इसे लागू करना सरल है।

from sklearn.utils import check_arrays
def mean_absolute_percentage_error(y_true, y_pred): 
    y_true, y_pred = check_arrays(y_true, y_pred)

    ## Note: does not handle mix 1d representation
    #if _is_1d(y_true): 
    #    y_true, y_pred = _check_1d_array(y_true, y_pred)

    return np.mean(np.abs((y_true - y_pred) / y_true)) * 100

किसी अन्य मीट्रिक की तरह उपयोग करें ...:

> y_true = [3, -0.5, 2, 7]; y_pred = [2.5, -0.3, 2, 8]
> mean_absolute_percentage_error(y_true, y_pred)
Out[19]: 17.738095238095237

(ध्यान दें कि मैं 100 से गुणा कर रहा हूं और प्रतिशत वापस कर रहा हूं।)

... लेकिन सावधानी के साथ:

> y_true = [3, 0.0, 2, 7]; y_pred = [2.5, -0.3, 2, 8]
> #Note the zero in y_pred
> mean_absolute_percentage_error(y_true, y_pred)
-c:8: RuntimeWarning: divide by zero encountered in divide
Out[21]: inf

1
इस उत्तर में एक त्रुटि है। होना चाहिए ( हर में बदलने y_predवाला y_true):return np.mean(np.abs((y_true - y_pred) / y_true)) * 100
404pio

1
check_arraysडरपोक द्वारा खाई गई थी। नहीं है check_arrayवर्तमान sklearn में, लेकिन यह नहीं लगता है जैसे कि यह उसी तरह काम करता है।
किलोजूल

check_arrays विधि को हटा दिया जाता है ।16।
अर्पित सिसोदिया


17

यहाँ एक अद्यतन संस्करण है:

import numpy as np

def mean_absolute_percentage_error(y_true, y_pred): 
    y_true, y_pred = np.array(y_true), np.array(y_pred)
    return np.mean(np.abs((y_true - y_pred) / y_true)) * 100
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.