পাইথনটিতে মূলের স্কোয়ার ত্রুটি (আরএমএসই) এর জন্য কোনও লাইব্রেরি ফাংশন রয়েছে?


157

আমি জানি যে আমি এই জাতীয় মূল স্কোয়ার ত্রুটি ফাংশনটি প্রয়োগ করতে পারি:

def rmse(predictions, targets):
    return np.sqrt(((predictions - targets) ** 2).mean())

আমি কি খুঁজছি যদি এই আরএমএস ফাংশনটি কোথাও কোনও লাইব্রেরিতে প্রয়োগ করা হয়, সম্ভবত স্কিপি বা সাইকিট-শিখে?


5
আপনি ঠিক সেখানে কাজ লিখেছেন। সম্ভবত ফাংশনটি যদি লিখতে সহজ হয় তবে এটি কোনও লাইব্রেরিতে থাকবে না। আপনি মডিউল নামে পরিচিত একজন পরিচালক তৈরি করা এবং এতে দরকারী ফাংশন স্থাপন এবং এটি আপনার পথে যুক্ত করা ভাল
রায়ান স্যাক্স

14
@ রায়ানস্যাক্সে আমি একমত নই আমি লাইব্রেরি ফাংশনটি নিজেকে রিম্পিমেন্ট না করে কল করা অনেক বেশি আশ্বাসযুক্ত মনে করব। উদাহরণস্বরূপ, আমি ভুল করে প্রথমটির .sum()পরিবর্তে লিখেছিলাম .mean()। তদ্ব্যতীত, আমি মনে করি এই ফাংশনটি এত বেশি ব্যবহৃত হয়েছে যে এটি কোনও গ্রন্থাগারের ফাংশন হিসাবে উপলব্ধ না হওয়ার কোনও কারণ আমি দেখতে পাচ্ছি না।
সিয়ামি

1
@ সিয়ামি: আমি বুঝতে পেরেছি যে ১০০%, আমি এই কারণটি নিয়ে অনুমান করেছিলাম যে এই ধরণের ক্রিয়াকলাপটি ভুল হতে পারে না। যদি এটি হয় তবে আমি এটির সন্ধান করতে পারি না
রায়ান স্যাক্সে

1
এমন লোকদের জন্য যারা এটি চেষ্টা করেছিল এবং এটি কার্যকর হয়নি: যদি predictionsএবং targetsউদাহরণস্বরূপ হয় int16তবে বর্গটি উপচে পড়তে পারে (negativeণাত্মক সংখ্যা দেওয়া)। তাই আপনি যদি একটি প্রয়োজন হতে পারে .astype('int')বা .astype('double')বর্গাকার, মত ব্যবহার করার আগে np.sqrt(((predictions - targets).astype('double') ** 2).mean())
জন

স্কলেয়ারে এটি থাকার আরেকটি সুবিধা হ'ল স্কেলার বাস্তবায়নে অ্যারেগুলি একই আকারের হয় তা নিশ্চিত করার জন্য প্রচুর অতিরিক্ত বয়লার প্লেট কোড থাকে এবং ওজন পরামিতিগুলি অন্তর্ভুক্ত করে এবং বহু-মাত্রিক অ্যারে এবং বিভিন্ন 'অ্যারে পছন্দগুলি' পরিচালনা করে। যা এটিকে আরও জটিল সমস্যা হিসাবে রূপান্তরিত করে তা করা
ডেভিড ওয়াটারওয়ার্থ

উত্তর:


212

sklearn.metricsএকটি mean_squared_errorফাংশন আছে। আরএমএসই হল যা কিছু ফিরে আসে তার কেবল বর্গমূল।

from sklearn.metrics import mean_squared_error
from math import sqrt

rms = sqrt(mean_squared_error(y_actual, y_predicted))

2
mean_squared_errorইন sklearn.metricsএখন অতিরিক্ত প্যারামিটার সমর্থন করে: squared- "সত্য সত্য যদি এমএসই মান দেয়, যদি মিথ্যা আরএমএসই মান দেয়।"
32

132

আরএমএসই কি? এমএসই, আরএমডি বা আরএমএস নামেও পরিচিত। এটি কোন সমস্যার সমাধান করে?

আপনি যদি আরএমএসই: ​​(রুট মানে স্কোয়ার ত্রুটি) বোঝেন, এমএসই: ​​(মানে স্কোয়ার ত্রুটি) আরএমডি (রুট মানে স্কোয়ার্ড ডিভিয়েশন) এবং আরএমএস: (রুট মানে স্কোয়ার্ড) আপনার জন্য এটি গণনা করার জন্য একটি লাইব্রেরি জিজ্ঞাসা করা অপ্রয়োজনীয় ওভার ইঞ্জিনিয়ারিং । এই সমস্ত মেট্রিকগুলি প্রায় 2 ইঞ্চি লম্বা পাইথন কোডের একক লাইন। Rmse, mse, rmd এবং rms এই তিনটি মেট্রিক তাদের মূল ধারণাগতভাবে অভিন্ন।

RMSE প্রশ্নের উত্তর: "কিভাবে অনুরূপ, গড়ে, এ সংখ্যা list1থেকেlist2 ?"। দুটি তালিকা অবশ্যই একই আকারের হবে। আমি "প্রদত্ত যে কোনও দুটি উপাদানের মধ্যে আওয়াজ ধুয়ে ফেলতে চাইছি, সংগৃহীত তথ্যের আকার ধুয়ে ফেলতে চাই এবং সময়ের সাথে সাথে একক সংখ্যা বোধ করতে পারি"।

আরএমএসই এর জন্য স্বজ্ঞাত এবং ই এলআই 5:

কল্পনা করুন আপনি একটি ডার্ট বোর্ডে ডার্টগুলি ফেলতে শিখছেন। প্রতিদিন আপনি এক ঘন্টা অনুশীলন করেন। আপনি ভাল হয়ে উঠছেন বা আরও খারাপ হচ্ছে কিনা তা আপনি খুঁজে বের করতে চান। তাই প্রতিদিন আপনি 10 টি নিক্ষেপ করেন এবং বুলসিয়ে এবং যেখানে আপনার ডার্টটি আঘাত করে তার মধ্যে দূরত্বটি পরিমাপ করুন।

আপনি এই সংখ্যাগুলির একটি তালিকা তৈরি করুন list1। দিন 1 এ দূরত্ব এবং list2সমস্ত জিরো সমেত ব্যবস্থার মধ্যে মূল গড় স্কোয়ার ত্রুটিটি ব্যবহার করুন । ২ য় এবং নবম দিনেও একই কাজ করুন। আপনি যা পাবেন তা হ'ল একক সংখ্যা যা আশা করি সময়ের সাথে সাথে হ্রাস পাবে। আপনার আরএমএসই নম্বরটি শূন্য হলে আপনি প্রতিবার বুলসেসে আঘাত করেন hit আরএমএস নম্বর যদি উপরে যায় তবে আপনি আরও খারাপ হয়ে যাচ্ছেন।

মূল গণনার উদাহরণ অজগরটিতে স্কোয়ার ত্রুটির অর্থ:

import numpy as np
d = [0.000, 0.166, 0.333]   #ideal target distances, these can be all zeros.
p = [0.000, 0.254, 0.998]   #your performance goes here

print("d is: " + str(["%.8f" % elem for elem in d]))
print("p is: " + str(["%.8f" % elem for elem in p]))

def rmse(predictions, targets):
    return np.sqrt(((predictions - targets) ** 2).mean())

rmse_val = rmse(np.array(d), np.array(p))
print("rms error is: " + str(rmse_val))

কোন মুদ্রণ:

d is: ['0.00000000', '0.16600000', '0.33300000']
p is: ['0.00000000', '0.25400000', '0.99800000']
rms error between lists d and p is: 0.387284994115

গাণিতিক স্বরলিপি:

মূল মানে স্কোয়ার বিচ্যুতি ব্যাখ্যা করা হয়েছে

গ্লাইফ কিংবদন্তি: n একটি সম্পূর্ণ ধনাত্মক পূর্ণসংখ্যা যা ছোঁড়ার সংখ্যা উপস্থাপন করে। iযোগফলকে গণনা করে এমন একটি সম্পূর্ণ ধনাত্মক পূর্ণসংখ্যার কাউন্টারকে উপস্থাপন করে। dআদর্শ দূরত্বকে বোঝায়, list2উপরের উদাহরণে সমস্ত শূন্য রয়েছে। উপরের উদাহরণে pপারফরম্যান্সের জন্য দাঁড়ায় list1। সুপারস্ক্রিপ্ট 2 মানে সংখ্যার স্কোয়ার। d আমি হ'ল এর প্রথম সূচক dp আমি হ'ল এর সূচক p

আরএমএস ছোট পদক্ষেপে সম্পন্ন হয়েছে যাতে এটি বোঝা যায়:

def rmse(predictions, targets):

    differences = predictions - targets                       #the DIFFERENCEs.

    differences_squared = differences ** 2                    #the SQUAREs of ^

    mean_of_differences_squared = differences_squared.mean()  #the MEAN of ^

    rmse_val = np.sqrt(mean_of_differences_squared)           #ROOT of ^

    return rmse_val                                           #get the ^

আরএমএসইর প্রতিটি পদক্ষেপ কীভাবে কাজ করে:

অন্যের থেকে একটি সংখ্যা বিয়োগ করা আপনাকে তাদের মধ্যে দূরত্ব দেয়।

8 - 5 = 3         #absolute distance between 8 and 5 is +3
-20 - 10 = -30    #absolute distance between -20 and 10 is +30

আপনি যদি কোনও সংখ্যার গুণকে নিজেই গুণ করেন তবে ফলাফল সর্বদা ইতিবাচক হয় কারণ নেতিবাচক সময় নেতিবাচক হয়:

3*3     = 9   = positive
-30*-30 = 900 = positive

এগুলি সমস্ত যোগ করুন, তবে অপেক্ষা করুন, তারপরে অনেক উপাদান সহ একটি অ্যারেতে একটি ছোট অ্যারের চেয়ে বড় ত্রুটি থাকবে, সুতরাং উপাদানগুলির সংখ্যা অনুসারে এটিকে গড় করুন।

তবে অপেক্ষা করুন, ইতিবাচকভাবে বাধ্য করার জন্য আমরা তাদের সবার আগে স্কোয়ার করেছি। বর্গমূল দিয়ে ক্ষতিটিকে পূর্বাবস্থায় ফিরিয়ে আনুন!

এটি আপনাকে এমন একক সংখ্যার সাথে ছেড়ে দেয় যা উপস্থাপন করে গড়ে, তালিকা 1 এর প্রতিটি মানের সাথে তালিকার 2 এর মূল উপাদানটির সাথে সংশ্লিষ্ট দূরত্ব।

আরএমএসইয়ের মান সময়ের সাথে সাথে কমতে থাকলে আমরা খুশি কারণ বৈকল্পিকতা হ্রাস পাচ্ছে ।

আরএমএসই সর্বাধিক নির্ভুল লাইন ফিটিং কৌশল নয়, মোট সর্বনিম্ন স্কোয়ারগুলি হ'ল:

রুট গড় স্কোয়ার ত্রুটিটি বিন্দু এবং লাইনের মধ্যবর্তী উল্লম্ব দূরত্ব পরিমাপ করে, তাই যদি আপনার ডেটাটি কলাটির মতো আকারের হয়, নীচের অংশের সমতল এবং শীর্ষে খাড়া হয়, তবে আরএমএসই উচ্চতর পয়েন্টগুলিতে উচ্চতর দূরত্বের প্রতিবেদন করবে তবে সংক্ষিপ্ত দূরত্ব থেকে পয়েন্ট কম যখন বাস্তবে দূরত্ব সমান হয়। এটি একটি স্কিউ সৃষ্টি করে যেখানে রেখাটি নীচের চেয়ে উচ্চ পয়েন্টের কাছে যেতে পছন্দ করে।

যদি এটি সমস্যা হয় তবে সর্বনিম্ন স্কোয়ার পদ্ধতিটি এটি ঠিক করে: https://mubaris.com/posts/linear-regression

এই আরএমএসই ফাংশনটি ভেঙে ফেলতে পারে এমন গোচা:

যদি কোনও ইনপুট তালিকায় নাল বা অসীমতা থাকে তবে আউটপুট আরএমএসের মানটি কোনও অর্থবহ হতে চলেছে। উভয় তালিকায় নাল / নিখোঁজ মান / অসম্পূর্ণতা মোকাবেলা করার জন্য তিনটি কৌশল রয়েছে: সেই উপাদানটিকে উপেক্ষা করুন, এটিকে শূন্য করুন বা সর্বোত্তম অনুমান বা সমস্ত টাইমস্টেপের সাথে অভিন্ন র্যান্ডম শোনার যোগ করুন add আপনার উপাত্তটির অর্থ কী তার উপর নির্ভর করে প্রতিটি প্রতিকারের পক্ষে তার পক্ষে মতামত রয়েছে সাধারণভাবে অনুপস্থিত মান সহ যে কোনও উপাদানকে অগ্রাহ্য করা পছন্দ করা হয়, তবে এই আরএমএসই শূন্যের দিকে পক্ষপাতদুষ্ট করে তোলে আপনি ভাবছেন যে সত্যিকার অর্থে না হয়ে পারফরম্যান্সের উন্নতি হয়েছে। যদি প্রচুর অনুপস্থিত মান থাকে তবে একটি ভাল অনুমানের ভিত্তিতে এলোমেলো শব্দ যোগ করা পছন্দ করা যেতে পারে।

আরএমএসই আউটপুটটির আপেক্ষিক যথার্থতার গ্যারান্টি দেওয়ার জন্য আপনাকে অবশ্যই ইনপুট থেকে সমস্ত নাল / ইনফিনাইট অপসারণ করতে হবে।

আরএমএসইয়ের বহিরাগত ডেটা পয়েন্টগুলির সাথে শূন্য সহনশীলতা রয়েছে যা সম্পর্কিত নয়

রুট মানে স্কোয়ার ত্রুটিযুক্ত স্কোয়ারগুলি সমস্ত ডেটা সঠিক হওয়ার উপর নির্ভর করে এবং সবগুলি সমান হিসাবে গণনা করা হয়। এর অর্থ বাম ক্ষেত্রের বাইরে থাকা একটি স্ট্রাই পয়েন্ট পুরো হিসাবটি পুরোপুরি নষ্ট করতে চলেছে। আউটলেটর ডেটা পয়েন্টগুলি পরিচালনা করতে এবং নির্দিষ্ট প্রান্তিকের পরে তাদের অভূতপূর্ব প্রভাবকে বরখাস্ত করার জন্য, শক্তিশালী অনুমানকারীরা দেখুন যা বহিরাগতদের বরখাস্ত করার জন্য একটি প্রান্তিকের মধ্যে তৈরি করে।


3
হ্যাঁ, সাধারণ ফাংশন। তবে যদি আপনার এটি প্রতিদিন প্রয়োজন হয় তবে এটির দুর্দান্ত ব্যবহারটি কোথাও কোথাও একটি সঠিক সমাধান উপলভ্য করতে যাতে আপনাকে এটি প্রতিবার সংশোধন করতে না হয়; )
যৌক্তিক x 2

: @ এরিক-leschinski, আমি আপনি একটি সময়ে এই চেহারা আছে পারে কৃতজ্ঞ হবে stackoverflow.com/questions/45173451/...
Desta Haileselassie Hagos

1
এটি অবশ্যই এই প্রজন্মের একটি চিহ্ন যা লোকেরা জিজ্ঞাসা করে এবং বহু-গিগাবাইট আকারের লাইব্রেরিগুলিতে নির্দেশ করে; 3 থেকে 20 মিনিটের নেটওয়ার্ক ডাউনলোডের পরে সিপিইউ সম্পূর্ণ-টিল্ট ইনস্টল করা প্রয়োজন, যখন আপনার সত্যিকারের দরকার হয় তখন প্রায় 3 লাইনের কোড যা 400 বাইটে ফিট করে। আপনি যদি এমন একটি কাজের জন্য একটি লাইব্রেরির জন্য জিজ্ঞাসা করেন যা 1 লাইন কোডের সংকুচিত হতে পারে, এটি প্রায় 90 টি অক্ষর প্রশস্ত হয়, তবে আপনি 3, 10 এবং শীঘ্রই 50 গিগাবাইট আকারের ইনস্টলগুলি 99.9999 এর সাথে লোকেরা আপনাকে গালাগাল করার লাইসেন্স দিচ্ছেন people % ফোলা এটি রকেট সার্জারি নয়। 740hz প্রসেসরের সাহায্যে 1978 সালে তৈরি আপনার সৌর চালিত ক্যালকুলেটর আরএমএসই করতে পারে।
এরিক লেসচিনস্কি

22

এটি সম্ভবত দ্রুত ?:

n = len(predictions)
rmse = np.linalg.norm(predictions - targets) / np.sqrt(n)

18

সাইকিট-লার্ন 0.22.0 এ আপনি আরএমএসই ফেরত দিতে mean_squared_error()যুক্তিটি পাস squared=Falseকরতে পারেন।

from sklearn.metrics import mean_squared_error

mean_squared_error(y_actual, y_predicted, squared=False)

2
এটি নতুন বৈশিষ্ট্য এবং আমরা এটি ব্যবহার করা ভাল হবে be
রবি জি

9

2019 সালে কেউ এই থ্রেডটি সন্ধান করতে পারে এমন একটি লাইব্রেরি রয়েছে ml_metricsযা ক্যাগল এর কার্নেলগুলিতে প্রাক-ইনস্টলেশন ছাড়া পাওয়া যায়, বেশ হালকা আলোযুক্ত এবং এর মাধ্যমে অ্যাক্সেসযোগ্য pypi(এটি সহজেই এবং দ্রুত ইনস্টল করা যায় pip install ml_metrics):

from ml_metrics import rmse
rmse(actual=[0, 1, 2], predicted=[1, 10, 5])
# 5.507570547286102

এটা কয়েক অন্যান্য আকর্ষণীয় বৈশিষ্ট্যের মান যা পাওয়া যায় না হয়েছে sklearn, মত mapk

তথ্যসূত্র:


4

আসলে, আমি স্ট্যাটাসমডেলের জন্য ইউটিলিটি ফাংশন হিসাবে তাদের একগুচ্ছ লিখেছি write

http://statsmodels.sourceforge.net/devel/tools.html#measure-for-fit-performance-eval-measures

এবং http://statsmodels.sourceforge.net/devel/generated/statsmodels.tools.eval_measures.rmse.html#statsmodels.tools.eval_measures.rmse

বেশিরভাগ এক বা দুটি লাইনার এবং খুব বেশি ইনপুট চেকিং হয় না এবং মূলত অ্যারে তুলনা করার সময় কিছু পরিসংখ্যান পাওয়ার জন্য getting তবে তাদের অক্ষের যুক্তিগুলির জন্য ইউনিট পরীক্ষা রয়েছে, কারণ আমি এখানে মাঝেমধ্যে opালু ভুল করি।


3

বা কেবলমাত্র NumPy ফাংশন ব্যবহার করে:

def rmse(y, y_pred):
    return np.sqrt(np.mean(np.square(y - y_pred)))

কোথায়:

  • y আমার টার্গেট
  • y_pred আমার ভবিষ্যদ্বাণী

rmse(y, y_pred)==rmse(y_pred, y)স্কয়ার ফাংশন কারণে নোট করুন ।


3

আপনি সরাসরি এসকেয়ার্নে আরএমএসই ফাংশনটি খুঁজে পাবেন না। তবে, ম্যানুয়ালি স্কয়ারটি করার পরিবর্তে স্ক্লেয়ার্ন ব্যবহারের আরও একটি স্ট্যান্ডার্ড উপায় রয়েছে। স্পষ্টতই, স্ক্লার্নের গড়_সোয়ার্ড_অরারের মধ্যে একটি ডিফল্ট মান হিসাবে "স্কোয়ারড" নামে পরিচিত একটি পরামিতি রয়েছে true

# code changes implemented by Esha Prakash
from sklearn.metrics import mean_squared_error
rmse = mean_squared_error(y_true, y_pred , squared=False)

0

এখানে একটি উদাহরণ কোড যা দুটি বহুভুজ ফাইল ফর্ম্যাটের মধ্যে আরএমএসই গণনা করে PLY। এটি ml_metricsলিব এবং উভয়ই ব্যবহার করে np.linalg.norm:

import sys
import SimpleITK as sitk
from pyntcloud import PyntCloud as pc
import numpy as np
from ml_metrics import rmse

if len(sys.argv) < 3 or sys.argv[1] == "-h" or sys.argv[1] == "--help":
    print("Usage: compute-rmse.py <input1.ply> <input2.ply>")
    sys.exit(1)

def verify_rmse(a, b):
    n = len(a)
    return np.linalg.norm(np.array(b) - np.array(a)) / np.sqrt(n)

def compare(a, b):
    m = pc.from_file(a).points
    n = pc.from_file(b).points
    m = [ tuple(m.x), tuple(m.y), tuple(m.z) ]; m = m[0]
    n = [ tuple(n.x), tuple(n.y), tuple(n.z) ]; n = n[0]
    v1, v2 = verify_rmse(m, n), rmse(m,n)
    print(v1, v2)

compare(sys.argv[1], sys.argv[2])

-1
  1. না, মেশিন লার্নিংয়ের জন্য সায়কিট লার্নে একটি পাঠাগার রয়েছে এবং পাইথন ভাষা ব্যবহার করে এটি সহজেই নিয়োগ করা যায়। এটিতে নীচের লিঙ্কটি ভাগ করে নিচ্ছি যা মিউন স্কোয়ারড ত্রুটির জন্য একটি ফাংশন রয়েছে:

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html

  1. ফাংশনটির নাম নীচে দেওয়া হয়েছে মানে_সোয়ার্ড_অরর, যেখানে y_true হবে ডেটা টিপলসের জন্য আসল শ্রেণির মান এবং y_pred হবে পূর্বাভাসিত মান, আপনি যে মেশিন লার্নিং অ্যালগরিদম ব্যবহার করছেন তা দ্বারা পূর্বাভাস:

গড়_সকোয়ারড_অরার (y_true, y_pred)

  1. আরএমএসই পেতে আপনাকে এটি পরিবর্তন করতে হবে (পাইথন ব্যবহার করে স্কয়ার্ট ফাংশন ব্যবহার করে) process এই প্রক্রিয়াটি এই লিঙ্কটিতে বর্ণিত হয়েছে: https://www.codeastar.com/regression-model-rmsd/

সুতরাং, চূড়ান্ত কোড কিছু হবে:

স্কলারন.মেট্রিক্স থেকে গণিত আমদানি স্কয়ার থেকে আমদানি_স্কোয়ারড_অরর

আরএমএসডি = স্কয়ার্ট (মানে_সোকেয়ারড_অরার (টেস্টিং_ই, পূর্বাভাস))

মুদ্রণ (RMSD)

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