আমি কোন বাঁকানো ফিট থেকে কোভেরিয়েন্স ম্যাট্রিক্সকে কীভাবে ব্যাখ্যা করব?


15

আমি পরিসংখ্যানের দিক থেকে খুব বড় নই, তাই ক্ষমা চাইছি যদি এটি সরল প্রশ্ন থাকে। আমি কিছু তথ্য আকারে একটি নেতিবাচক সূচকীয় একটি বক্ররেখা ঝুলানো করছি, এবং কখনও কখনও আমার ডেটা সেরা তড়কা , এবং কখনও কখনও হইয়া কাছাকাছি একটি * ( - * এক্স 2 ) + । যাইহোক, কখনও কখনও এই দুজনেই ব্যর্থ হয় এবং আমি আবার রৈখিক ফিট হতে চাই। আমার প্রশ্ন হ'ল আমি কীভাবে নির্ধারণ করতে পারি যে কোনও মডেল কোনও নির্দিষ্ট ডেটা ফিট করে ফলাফল থেকে প্রাপ্ত ফলাফলের ভেরিয়েন্স-কোভারিয়েন্স ম্যাট্রিক্স থেকে সবচেয়ে ভাল সেট করে?একটি*(-*এক্স)+ +একটি*(-*এক্স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()

এটি দুর্দান্ত যে আপনি সেই সিভি প্রশ্নটির সাথে লিঙ্ক করেছেন এবং ফলস্বরূপ, গুরুত্বপূর্ণ মন্তব্য থ্রেডের সাথে (বি / ডাব্লু রোল্যান্ডো 2, ফ্র্যাঙ্ক হ্যারেল, ...) প্রশ্নযুক্ত যে ফিটের উপর ভিত্তি করে মডেল পোস্ট ফ্যাক্টোটি বেছে নেওয়া উপযুক্ত কিনা তা প্রশ্ন করা question মডেল বাছাই করতে সম্ভবত সিস্টেমের পূর্ব জ্ঞান ব্যবহার করা আরও ভাল better
আমান

সিভি-তে এই অন্য প্রশ্নটি সহায়ক হতে পারে: stats.stackexchange.com/questions/50830/…
আমান

এই বুঝতে কিভাবে ব্যাখ্যা করা সহ-ভ্যারিয়েন্স ম্যাট্রিক্স সহায়ক হতে পারে stats.stackexchange.com/questions/10795/... আমি তৃতীয় মডেলের মান ছোট বলতে হবে, কম বিচ্যুতি ইঙ্গিত -।
ব্যবহারকারী 4581

উত্তর:


4

একটি শোধন হিসাবে, পরিবর্তনশীল pcovথেকে scipy.optimize.curve_fitডেটা দেওয়া পরামিতি অনুমান, যে ঢিলেঢালাভাবে ভাষী আনুমানিক সহভেদাংক হয় এবং একটি মডেল, কত তথ্য দেওয়া মডেল একটি প্যারামিটার মান নির্ধারণ তথ্য নেই। সুতরাং নির্বাচিত মডেলটি ভাল কিনা তা সত্যই তা আপনাকে জানায় না। আরও দেখুন এই

ভাল মডেলটি সমস্যাটি আসলে একটি কঠিন সমস্যা। হিসাবে পরিসংখ্যানবিদদের দ্বারা যুক্তিযুক্ত

সমস্ত মডেল ভুল, কিন্তু কিছু দরকারী

সুতরাং বিভিন্ন মডেলের তুলনায় আপনি যে মানদণ্ডটি ব্যবহার করবেন তা নির্ভর করে আপনি কী অর্জন করতে চান তার উপর।

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

numpy.linalg.norm(y-func(x, *popt))

তবে, আপনি যদি আরও পরামিতি সহ একটি মডেল নির্বাচন করেন, তবে উচ্চতর মডেলের জটিলতার ব্যয় করে অবশিষ্টগুলি স্বয়ংক্রিয়ভাবে হ্রাস পাবে । সুতরাং তারপর এটি ফিরে আসে মডেলটির লক্ষ্য কী।

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