সাইকিত-শিখতে [বন্ধ] মধ্যে নিখুঁত শতাংশের ত্রুটি (এমএপিই) হওয়া


24

পাইথন এবং সাইকিট-লার্ন ব্যবহার করে আমরা কীভাবে আমাদের পূর্বাভাসের গড় পরম শতাংশের ত্রুটি (এমএপিই) গণনা করতে পারি?

দস্তাবেজগুলি থেকে , আমাদের কাছে কেবল রেজিস্ট্রেশনের জন্য এই 4 টি মেট্রিক ফাংশন রয়েছে:

  • মেট্রিক্স.মোহিত_পরিবর্তন_স্কোর (y_true, y_pred)
  • মেট্রিক্স.মায়ান_অবসুলিউট_অরার (y_true, y_pred)
  • মেট্রিক্স.মিয়ান_সওয়ার্ড_অরর (y_true, y_pred)
  • মেট্রিক্স.আর ২_স্কোর (y_true, y_pred)

StackOverflow- উপর এই উত্তরটি পড়ুন stackoverflow.com/questions/42250958/...
Arpit Sisodia

উত্তর:


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_arraysscipy দ্বারা ditched ছিল। আছে 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.