আমি পরিসংখ্যানের দিক থেকে খুব বড় নই, তাই ক্ষমা চাইছি যদি এটি সরল প্রশ্ন থাকে। আমি কিছু তথ্য আকারে একটি নেতিবাচক সূচকীয় একটি বক্ররেখা ঝুলানো করছি, এবং কখনও কখনও আমার ডেটা সেরা তড়কা , এবং কখনও কখনও হইয়া কাছাকাছি একটি * ই ( - খ * এক্স 2 ) + গ । যাইহোক, কখনও কখনও এই দুজনেই ব্যর্থ হয় এবং আমি আবার রৈখিক ফিট হতে চাই। আমার প্রশ্ন হ'ল আমি কীভাবে নির্ধারণ করতে পারি যে কোনও মডেল কোনও নির্দিষ্ট ডেটা ফিট করে ফলাফল থেকে প্রাপ্ত ফলাফলের ভেরিয়েন্স-কোভারিয়েন্স ম্যাট্রিক্স থেকে সবচেয়ে ভাল সেট করে?scipy.optimize.curve_fit () ফাংশন? আমি বিশ্বাস করি যে এই ম্যাট্রিক্সের একটি তির্যকটি রয়েছে তবে আমি কীভাবে এটি ব্যাখ্যা করব তা নিশ্চিত নই I'm
আপডেট: একটি অনুরূপ প্রশ্নের ভিত্তিতে , আমি আশা করছি যে ভেরিয়েন্স-কোভারিয়েন্স ম্যাট্রিক্স আমাকে বলতে পারেন যে আমি তিনটি মডেলের মধ্যে সবচেয়ে ভাল চেষ্টা করছি যা ডেটা ফিট করে (আমি এই তিনটি মডেলের একটিতে অনেকগুলি ডেটাসেট ফিট করার চেষ্টা করছি)।
ফলাফলের ম্যাট্রিকগুলি প্রদত্ত উদাহরণের জন্য এটি দেখতে দেখতে:
pcov_lin
[[ 2.02186921e-05 -2.02186920e-04]
[ -2.02186920e-04 2.76322124e-03]]
pcov_exp
[[ 9.05390292e+00 -7.76201283e-02 -9.20475334e+00]
[ -7.76201283e-02 6.69727245e-04 7.90218415e-02]
[ -9.20475334e+00 7.90218415e-02 9.36160310e+00]]
pcov_exp_2
[[ 1.38338049e-03 -7.39204594e-07 -7.81208814e-04]
[ -7.39204594e-07 8.99295434e-09 1.92970700e-06]
[ -7.81208814e-04 1.92970700e-06 9.14746758e-04]]
আমি যা করছি তার উদাহরণ এখানে:
import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
import scipy.optimize
def exp_func(x, a, b, c):
return a * np.exp(-b * x) + c
def exp_squared_func(x, a, b, c):
return a * np.exp(-b * x*x*x) + c
def linear_func(x, a, b):
return a*x + b
def main():
x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], np.float)
y = np.array([1, 1, 1, 1, 0.805621, 0.798992, 0.84231, 0.728796, 0.819471, 0.570414, 0.355124, 0.276447, 0.159058, 0.0762189, 0.0167807, 0.0118647, 0.000319948, 0.00118267, 0, 0, 0], np.float)
p0 = [0.7746042467213462, 0.10347274384077858, -0.016253458007293588]
popt_lin, pcov_lin = scipy.optimize.curve_fit(linear_func, x, y)
popt_exp, pcov_exp = scipy.optimize.curve_fit(exp_func, x, y)
popt_exp_2, pcov_exp_2 = scipy.optimize.curve_fit(exp_squared_func, x, y)
plt.figure()
plt.plot(x, y, 'ko', label="Original data")
plt.plot(x, linear_func(x, *popt_lin), 'r-', label='linear')
plt.plot(x, exp_func(x, *popt_exp), 'b-', label='exponential')
plt.plot(x, exp_squared_func(x, *popt_exp_2), 'g-', label='exponential squared')
plt.legend()
plt.show()
if __name__ == '__main__':
main()