জেসন আর এর উত্তরের একটি ত্রুটি রয়েছে, যা নুথের "আর্ট অফ কম্পিউটার প্রোগ্রামিং" খণ্ডে আলোচনা করা হয়েছে। ২. সমস্যাটি যদি আসে যদি আপনার একটি স্ট্যান্ডার্ড বিচ্যুতি থাকে যা গড়ের একটি ছোট ভগ্নাংশ হয়: E (x ^ 2) - (E (x) ^ 2) এর গণনা ভাসমান পয়েন্ট গোলাকার ত্রুটির ক্ষেত্রে তীব্র সংবেদনশীলতায় ভোগে।
এমনকি আপনি এটি পাইথন স্ক্রিপ্টে চেষ্টা করে দেখতে পারেন:
ofs = 1e9
A = [ofs+x for x in [1,-1,2,3,0,4.02,5]]
A2 = [x*x for x in A]
(sum(A2)/len(A))-(sum(A)/len(A))**2
আমি একটি উত্তর হিসাবে -128.0 পেয়েছি, যা স্পষ্টরূপে গণনাযোগ্যভাবে বৈধ নয়, যেহেতু গণিতের ভবিষ্যদ্বাণী করা হয় যে ফলাফলটি nonnegative হওয়া উচিত।
নথ চলমান গড় এবং স্ট্যান্ডার্ড বিচ্যুতি গণনার জন্য একটি পদ্ধতির (আমি আবিষ্কারকের নামটি মনে করি না) উদ্ধৃত করে যা এরকম কিছু হয়:
initialize:
m = 0;
S = 0;
n = 0;
for each incoming sample x:
prev_mean = m;
n = n + 1;
m = m + (x-m)/n;
S = S + (x-m)*(x-prev_mean);
এবং তারপরে প্রতিটি পদক্ষেপের পরে, মানটি m
হ'ল গড় এবং মানক বিচ্যুতিটি আপনার পছন্দের সংজ্ঞাটি কোনটির উপর নির্ভর করে sqrt(S/n)
বা sqrt(S/n-1)
নির্ভর করে তা গণনা করা যায় ।
উপরে আমি যে সমীকরণটি লিখছি তা নূথের তুলনায় কিছুটা আলাদা তবে এটি গণনার সমতুল্য।
যখন আমার আরও কয়েক মিনিট সময় থাকবে, আমি পাইথনের উপরের সূত্রটি কোড করব এবং দেখাব যে আপনি একটি অব্যক্ত উত্তর পেয়ে যাবেন (আশা করি সঠিক মানটির নিকটে)।
আপডেট: এটি এখানে।
test1.py:
import math
def stats(x):
n = 0
S = 0.0
m = 0.0
for x_i in x:
n = n + 1
m_prev = m
m = m + (x_i - m) / n
S = S + (x_i - m) * (x_i - m_prev)
return {'mean': m, 'variance': S/n}
def naive_stats(x):
S1 = sum(x)
n = len(x)
S2 = sum([x_i**2 for x_i in x])
return {'mean': S1/n, 'variance': (S2/n - (S1/n)**2) }
x1 = [1,-1,2,3,0,4.02,5]
x2 = [x+1e9 for x in x1]
print "naive_stats:"
print naive_stats(x1)
print naive_stats(x2)
print "stats:"
print stats(x1)
print stats(x2)
ফলাফল:
naive_stats:
{'variance': 4.0114775510204073, 'mean': 2.0028571428571427}
{'variance': -128.0, 'mean': 1000000002.0028572}
stats:
{'variance': 4.0114775510204073, 'mean': 2.0028571428571431}
{'variance': 4.0114775868357446, 'mean': 1000000002.0028571}
আপনি লক্ষ করবেন যে এখনও কিছু গোলাকৃতি ত্রুটি রয়েছে, তবে এটি খারাপ নয়, যেখানে naive_stats
কেবল ছাগলছানা।
সম্পাদনা: সবেমাত্র বেলিসারিয়াসের মন্তব্যে উইকিপিডিয়াকে উদ্ধৃত করে নুথ অ্যালগরিদমের কথা উল্লেখ করা হয়েছে।