সাধারণ ন্যূনতম স্কোয়ার সহগগুলি খুঁজে পাওয়ার জন্য কেন "সাধারণ সমীকরণ" ব্যবহার করবেন না?


17

আমি এখানে এই তালিকাটি দেখেছি এবং বিশ্বাস করতে পারি না যে সর্বনিম্ন স্কোয়ারগুলি সমাধান করার এতগুলি উপায় রয়েছে। "স্বাভাবিক সমীকরণ" এ উইকিপিডিয়া মোটামুটি সোজা এগিয়ে উপায় হতে

α^=y¯-β^এক্স¯,β^=Σআমি=1এন(এক্সআমি-এক্স¯)(Yআমি-Y¯)Σআমি=1এন(এক্সআমি-এক্স¯)2

তাহলে কেন শুধু তাদের ব্যবহার করবেন না? আমি ধরে নিয়েছি যে কোনও গণ্য বা নির্ভুলতার বিষয়টি অবশ্যই দেওয়া আছে যে উপরের মার্কে এল এল স্টোন উল্লেখ করেছেন যে এসভিডি বা কিউআর পরিসংখ্যান সংক্রান্ত সফ্টওয়্যারগুলির জনপ্রিয় পদ্ধতি এবং সাধারণ সমীকরণগুলি "নির্ভরযোগ্যতা এবং সংখ্যাগত নির্ভুলতার অবস্থান থেকে ভয়ঙ্কর"। তবে , নিম্নোক্ত কোডটিতে, সাধারণ সমীকরণগুলি আমাকে তিনটি জনপ্রিয় পাইথন ফাংশনের সাথে তুলনায় যখন 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) 

উত্তরগুলি বেশ অতিরঞ্জিত। এটি এতটা ভয়াবহ নয় যদি আপনি কেবল স্পষ্টভাবে বিপরীত গণনা করা এড়িয়ে যান।
ম্যাথ্রেডলার

3
গতিতে কয়েকটি নোট: আপনি কেবলমাত্র একটি একক covariate এ খুঁজছেন, সুতরাং ম্যাট্রিক্স বিপরীতে ব্যয়টি মূলত 0 হয় you আপনি কয়েক হাজার covariates তাকান, এটি পরিবর্তন হবে। দ্বিতীয়ত, আপনার কেবলমাত্র একক covariate থাকার কারণে, ডেটা-মংগিং হ'ল প্যাকেজযুক্ত প্রতিযোগীদের মধ্যে আসলে আপনার অনেক সময় লাগে (তবে এটি কেবল রৈখিকভাবে স্কেল করা উচিত, তাই কোনও বড় চুক্তি নয়)। সাধারণ সমীকরণের সমাধান ডেটা মংগিং করে না, তাই এটি দ্রুত, তবে এর ফলাফলগুলির সাথে কোনও ঘণ্টা এবং শিসল সংযুক্ত নেই।
ক্লিফ এবি

উত্তর:


23

সমস্যার জন্য , সাধারন সমীকরণ বর্গের শর্ত সংখ্যা বিরচন একটি বিরচন দ্বারা একটি টি একটি । মোটামুটিভাবে l o g 10 ( c o n d ) বললে হ'ল সবকিছু ভালভাবে সম্পন্ন করা হলে আপনি আপনার গণনায় যে অঙ্কগুলি হারাবেন তার সংখ্যা। এবং টি এর বিপরীতমুখী গঠনের সাথে আসলে কিছুই করার নেই । কীভাবে কোনও T A x = A T b সমাধান করা যায় তা বিবেচনাধীন, আপনি ইতিমধ্যে l o g হারিয়ে ফেলেছেনAxbAATAlog10(cond)ATAATAx=ATbনির্ভুলতার অঙ্ক। অর্থাৎ, সাধারণ সমীকরণ গঠনটি ব্যাটের ডানদিকে হারিয়ে যাওয়া নির্ভুলতার অঙ্কের সংখ্যা দ্বিগুণ করেছে।log10(cond(ATA))=2log10(cond(A))

শর্তের সংখ্যাটি যদি ছোট হয় (তবে এটিই সবচেয়ে ভাল) শর্তের সংখ্যা = এবং আপনি যদি একটি স্থিতিশীল পদ্ধতি যেমন কিউআর বা এসভিডি ব্যবহার করেন তবে ডাবল যথার্থতায় আপনার প্রায় 8 ডিজিট যথার্থতা থাকতে পারে। আপনি যদি সাধারণ সমীকরণ গঠন করেন তবে আপনি শর্ত সংখ্যাটি 10 16 এ স্কোয়ার করেছেন এবং আপনার উত্তরটিতে মূলত কোনও নির্ভুলতা নেই।1081016

কখনও কখনও আপনি সাধারণ সমীকরণগুলি নিয়ে পালিয়ে যান এবং কখনও কখনও আপনি তা করেন না।


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

নির্ভুলতার পার্থক্য ছাড়াও কি কিউআর এবং সাধারণ সমীকরণের মধ্যেও একটি বড় গতির পার্থক্য রয়েছে? কারণ পরবর্তী ক্ষেত্রে আপনি সমাধান করতে পারেন (X'X) -1 * X'Y, যা বিপরীত কারণে ধীর? আমি জিজ্ঞাসা করি কারণ আমি নিশ্চিত না যে কিউআর কীভাবে কাজ করে, তাই সেখানে এমন কিছু আছে যা ম্যাট্রিক্সকে উল্টানোর মতো ধীর। বা নির্ভুলতা ক্ষতি বিবেচনা একমাত্র পয়েন্ট?
সাইমন

4
ATAATb

8

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

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


0

কোনও আধুনিক পরিসংখ্যান প্যাকেজ সাধারণ সমীকরণের সাথে লিনিয়ার রিগ্রেশন সমাধান করবে না। সাধারণ সমীকরণ কেবলমাত্র পরিসংখ্যানের বইগুলিতেই বিদ্যমান।

সাধারণ সমীকরণগুলি ম্যাট্রিক্সের বিপরীত গণনা হিসাবে ব্যবহার করা উচিত নয় এটি খুব সমস্যাযুক্ত।

রৈখিক প্রতিরোধের জন্য গ্রেডিয়েন্ট বংশোদ্ভূত কেন ব্যবহার করবেন, যখন কোনও ক্লোজড-ফর্ম গণিতের সমাধান পাওয়া যায়?

... যদিও সরাসরি সাধারণ সমীকরণ উপলব্ধ। লক্ষ্য করুন যে সাধারণ সমীকরণে ম্যাট্রিক্সকে উল্টাতে হয়। এখন গণনার জন্য একটি ম্যাট্রিক্সের ওভার (এন 3) ব্যয় হয় যেখানে এক্স ম্যাট্রিক্সে অর্থাৎ সার্বক্ষণিক পর্যবেক্ষণগুলিতে এন সারির সংখ্যা। তদতিরিক্ত, যদি এক্স অসুস্থ অবস্থায় থাকে তবে এটি অনুমানের ক্ষেত্রে গণনামূলক ত্রুটি তৈরি করবে ...

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