আমি এখানে এই তালিকাটি দেখেছি এবং বিশ্বাস করতে পারি না যে সর্বনিম্ন স্কোয়ারগুলি সমাধান করার এতগুলি উপায় রয়েছে। "স্বাভাবিক সমীকরণ" এ উইকিপিডিয়া মোটামুটি সোজা এগিয়ে উপায় হতে
তাহলে কেন শুধু তাদের ব্যবহার করবেন না? আমি ধরে নিয়েছি যে কোনও গণ্য বা নির্ভুলতার বিষয়টি অবশ্যই দেওয়া আছে যে উপরের মার্কে এল এল স্টোন উল্লেখ করেছেন যে এসভিডি বা কিউআর পরিসংখ্যান সংক্রান্ত সফ্টওয়্যারগুলির জনপ্রিয় পদ্ধতি এবং সাধারণ সমীকরণগুলি "নির্ভরযোগ্যতা এবং সংখ্যাগত নির্ভুলতার অবস্থান থেকে ভয়ঙ্কর"। তবে , নিম্নোক্ত কোডটিতে, সাধারণ সমীকরণগুলি আমাকে তিনটি জনপ্রিয় পাইথন ফাংশনের সাথে তুলনায় যখন 12 ডেসিমাল স্থানে যথাযথতা দেয়: নিম্পির পলিফিট ; scipy এর লিনিং্রেস ; এবং সাইকিট- লার্নের লিনিয়াররেগ্রেশন ।
আরও মজার বিষয় হ'ল n = 100000000 যখন সাধারণ সমীকরণ পদ্ধতিটি সবচেয়ে দ্রুত হয় me পলিফিটের জন্য 12.9s; লিনিয়ারআগ্রেশনের জন্য 4.2 এস; এবং সাধারণ সমীকরণের জন্য 1.8 গুলি।
কোড:
import numpy as np
from sklearn.linear_model import LinearRegression
from scipy.stats import linregress
import timeit
b0 = 0
b1 = 1
n = 100000000
x = np.linspace(-5, 5, n)
np.random.seed(42)
e = np.random.randn(n)
y = b0 + b1*x + e
# scipy
start = timeit.default_timer()
print(str.format('{0:.30f}', linregress(x, y)[0]))
stop = timeit.default_timer()
print(stop - start)
# numpy
start = timeit.default_timer()
print(str.format('{0:.30f}', np.polyfit(x, y, 1)[0]))
stop = timeit.default_timer()
print(stop - start)
# sklearn
clf = LinearRegression()
start = timeit.default_timer()
clf.fit(x.reshape(-1, 1), y.reshape(-1, 1))
stop = timeit.default_timer()
print(str.format('{0:.30f}', clf.coef_[0, 0]))
print(stop - start)
# normal equation
start = timeit.default_timer()
slope = np.sum((x-x.mean())*(y-y.mean()))/np.sum((x-x.mean())**2)
stop = timeit.default_timer()
print(str.format('{0:.30f}', slope))
print(stop - start)