मैं वक्र वक्र से सहसंयोजक मैट्रिक्स की व्याख्या कैसे करूं?


15

मैं आँकड़ों के मामले में बहुत महान नहीं हूँ, इसलिए अगर यह एक सरलीकृत प्रश्न है तो माफी माँगता हूँ। मैं कुछ आंकड़ों के रूप में एक नकारात्मक घातीय एक वक्र ढाले रहा हूँ, और कभी कभी मेरे डेटा सबसे अच्छा फिट , और कभी कभी फिट के करीब है एक * ( - * एक्स 2 ) + सी । हालांकि, कभी-कभी वे दोनों असफल हो जाते हैं, और मैं एक रैखिक फिट पर वापस गिरना चाहूंगा। मेरा सवाल यह है कि, मैं यह कैसे निर्धारित कर सकता हूं कि कौन सा मॉडल किसी विशेष डेटा को सेट करता है जिसके परिणामस्वरूप विचरण-कोविर्सियस मैट्रिक्स से सबसे अच्छा सेट किया गया है जो कि वापस आ गया है*(-*एक्स)+सी*(-*एक्स2)+सीscipy.optimize.curve_fit () फ़ंक्शन? मेरा मानना ​​है कि विचरण इस मैट्रिक्स के विकर्णों में से एक पर है, लेकिन मुझे यकीन नहीं है कि इसकी व्याख्या कैसे करें।

अद्यतन: एक समान प्रश्न के आधार पर , मैं उम्मीद कर रहा हूं कि विचरण-सहसंयोजक मैट्रिक्स मुझे बता सकता है कि मैं उन तीन मॉडलों में से कौन सा डेटा फिट करने का प्रयास कर रहा हूं (मैं इन तीन मॉडलों में से एक के लिए कई डेटासेट फिट करने की कोशिश कर रहा हूं)।

दिए गए उदाहरण के लिए परिणामी मैट्रिक्स इस तरह दिखते हैं:

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()

यह बहुत अच्छा है कि आप उस सीवी प्रश्न से लिंक करते हैं और परिणामस्वरूप, महत्वपूर्ण टिप्पणी थ्रेड (b / w rolando2, फ्रैंक हैरेल, ...) से यह सवाल करते हैं कि क्या फिट के आधार पर मॉडल पोस्ट फैक्टो को चुनना उचित है। शायद मॉडल को चुनने के लिए सिस्टम के पूर्व ज्ञान का उपयोग करना बेहतर है।
अमन

CV पर यह अन्य प्रश्न मददगार हो सकता है: आंकड़े.stackexchange.com/questions/50830/…
Aman

यह समझने में मददगार हो सकता है कि सह-विचरण मैट्रिक्स आँकड़ों की व्याख्या कैसे करें ।stackexchange.com / questions / 10795/… - मैं कहूंगा कि तीसरे मॉडल का मूल्य छोटा है, कम विचलन का संकेत देता है।
15:45 बजे user4581

जवाबों:


4

एक स्पष्टीकरण के रूप में, चर pcovसे scipy.optimize.curve_fitपैरामीटर अनुमान का अनुमानित कोविरेंस है, जो शिथिल रूप से बोल रहा है, डेटा और एक मॉडल को देखते हुए, दिए गए मॉडल में एक पैरामीटर के मूल्य को निर्धारित करने के लिए डेटा में कितनी जानकारी है। इसलिए यह वास्तव में आपको नहीं बताता है कि चुना गया मॉडल अच्छा है या नहीं। यह भी देखें इस

समस्या जो एक अच्छा मॉडल है वह वास्तव में एक कठिन समस्या है। जैसा कि सांख्यिकीविदों ने तर्क दिया है

सभी मॉडल गलत हैं, लेकिन कुछ उपयोगी हैं

इसलिए विभिन्न मॉडलों की तुलना में उपयोग करने के लिए मापदंड इस बात पर निर्भर करता है कि आप क्या हासिल करना चाहते हैं।

उदाहरण के लिए, यदि आप एक वक्र चाहते हैं जो डेटा के लिए "करीब संभव" है, तो आप एक मॉडल का चयन कर सकते हैं जो सबसे छोटा अवशिष्ट देता है । आपके मामले में यह मॉडल funcऔर अनुमानित पैरामीटर होगा popt, जिसकी गणना करते समय सबसे कम मूल्य होता है

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

हालांकि, यदि आप अधिक मापदंडों के साथ एक मॉडल का चयन करते हैं, तो उच्च मॉडल जटिलता की कीमत पर अवशिष्ट स्वचालित रूप से कम हो जाएगा । तो फिर यह वापस आता है कि लक्ष्य मॉडल का क्या है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.