scipy

2013-06-28 18 views
5

में फिटिंग एल्गोरिदम के बीच अंतर मेरे पास scipy में उपयोग किए गए फिट एल्गोरिदम के बारे में एक प्रश्न है। मेरे कार्यक्रम में, मैं एक्स और केवल y त्रुटियों के साथ y डेटा बिंदुओं का एक सेट है, और यह करने के लिए एक समारोहscipy

f(x) = (a[0] - a[1])/(1+np.exp(x-a[2])/a[3]) + a[1] 

फिट करने के लिए चाहते हैं।

समस्या यह है कि मुझे पैरामीटर पर बेहद उच्च त्रुटियां मिलती हैं और फिट फिट पैरामीटर के लिए अलग-अलग मान और त्रुटियां भी मिलती हैं, जो दो फिट scipy fit routines scipy.odr.ODR (कम से कम वर्ग एल्गोरिदम के साथ) और scipy.optimize का उपयोग करते हैं। scipy.odr.ODR साथ

फ़िट fit_type = 2

Beta: [ 11.96765963 68.98892582 100.20926023 0.60793377] 
Beta Std Error: [ 4.67560801e-01 3.37133614e+00 8.06031988e+04 4.90014367e+04] 
Beta Covariance: [[ 3.49790629e-02 1.14441187e-02 -1.92963671e+02 1.17312104e+02] 
[ 1.14441187e-02 1.81859542e+00 -5.93424196e+03 3.60765567e+03] 
[ -1.92963671e+02 -5.93424196e+03 1.03952883e+09 -6.31965068e+08] 
[ 1.17312104e+02 3.60765567e+03 -6.31965068e+08 3.84193143e+08]] 
Residual Variance: 6.24982731975 
Inverse Condition #: 1.61472215874e-08 
Reason(s) for Halting: 
Sum of squares convergence 

और फिर scipy.optimize.leastsquares साथ फिट,: scipy.optimize साथ

फ़िट मैं अपने उदाहरण दे देंगे। leastsq

beta: [ 11.9671859 68.98445306 99.43252045 1.32131099] 
Beta Std Error: [0.195503 1.384838 34.891521 45.950556] 
Beta Covariance: [[ 3.82214235e-02 -1.05423284e-02 -1.99742825e+00 2.63681933e+00] 
[ -1.05423284e-02 1.91777505e+00 1.27300761e+01 -1.67054172e+01] 
[ -1.99742825e+00 1.27300761e+01 1.21741826e+03 -1.60328181e+03] 
[ 2.63681933e+00 -1.67054172e+01 -1.60328181e+03 2.11145361e+03]] 
Residual Variance: 6.24982904455 (calulated by me) 

मेरे प्वाइंट तीसरे फिट पैरामीटर है: परिणाम

scipy.odr हैं। ओडीआर, fit_type = 2: C = 100.209 +/- 80600

scipy.optimize.leastsq: C = 99.432 +/- 12.730

मैं नहीं जानता कि क्यों पहले त्रुटि इतना अधिक है। बेहतर भी: यदि मैं उत्पत्ति 9 में त्रुटियों के साथ ठीक उसी डेटा बिंदुओं डाल मैं सी = x0 = 99,41849 +/- 0,20283

और फिर वास्तव में ग में ++ जड़ एक ही डेटा CERN के सी = 99.85 +/- 1.373

भले ही मैंने रूट और पायथन के लिए बिल्कुल प्रारंभिक चर का उपयोग किया। उत्पत्ति को किसी की आवश्यकता नहीं है।

क्या आपके पास कोई संकेत है कि ऐसा क्यों होता है और यह सबसे अच्छा परिणाम कौन सा है?

मैं pastebin पर आप के लिए कोड कहा:

  • Data
  • C++ code
  • अजगर कोड: http://pastebin.com/jZVyzMkS

की मदद करने के लिए धन्यवाद!

संपादित करें: see comment below

+0

क्या आप उसी ग्राफ पर प्लॉट और त्रुटियों को एक्स और वाई त्रुटियों के साथ (1) 'scipy.odr' द्वारा प्राप्त कर सकते हैं, और (2) 'रूट' एक्स और वाई त्रुटियों के साथ। साथ ही, 'रूट' कैसे निर्धारित करता है कि एक्स और वाई त्रुटियों को क्या सापेक्ष भार देना है, बशर्ते कि वे विभिन्न इकाइयों में मापा जाए? 'Scipy.odr' में,' sx' और 'sy' को उनके वर्गों द्वारा 1.0 को विभाजित करके वजन में परिवर्तित किया जाता है - क्या 'रूट' वही करता है? –

उत्तर

1

आप वास्तव में कंधे से ODR और leastsq फिट बैठता पक्ष की साजिश रचने की कोशिश की: यहाँ SirJohnFranklins पोस्ट से संबंधित साजिश है? वे मूल रूप से समान लग रही है:

enter image description here

विचार करें कि मानकों के अनुरूप - beta[0] और beta[1], प्रारंभिक और अंतिम मान द्वारा वर्णित कदम समारोह, आपके डेटा में विचरण का अब तक बहुमत से बताते हैं।इसके विपरीत, beta[2] और beta[3] में छोटे बदलाव, अवरोध बिंदु और ढलान, वक्र के समग्र आकार पर तुलनात्मक रूप से कम प्रभाव डालेगा और इसलिए फिट के लिए अवशिष्ट भिन्नता होगी। इसलिए यह कोई आश्चर्य की बात नहीं है कि इन मानकों में उच्च मानक त्रुटियां हैं, और दो एल्गोरिदम द्वारा थोड़ा अलग तरीके से फिट की जाती हैं।

ODR द्वारा रिपोर्ट की गई कुल मानक त्रुटियों इस तथ्य के कारण हैं कि इस मॉडल में वाई-मानों में त्रुटियां शामिल हैं जबकि सामान्य कम से कम वर्ग फिट नहीं है - मापा गया वाई-मानों में त्रुटियों को हमारे आत्मविश्वास को कम करना चाहिए अनुमानित फिट पैरामीटर।

0

(दुख की बात है, मैं फिट अपलोड कर सकते हैं नहीं है, क्योंकि मैं अधिक प्रतिष्ठा की जरूरत है। मैं कप्तान सैंडविच के लिए भूखंड दे देंगे, तो वह मेरे लिए अपलोड कर सकते हैं।)

मैं एक ही में हूँ कार्यसमूह जिसने धागा शुरू किया, लेकिन मैंने यह साजिश रची।

इसलिए, मैंने डेटा पर एक्स-त्रुटियां जोड़ दीं, क्योंकि मैं आखिरी बार नहीं था। ओडीआर के माध्यम से प्राप्त त्रुटि अभी भी बेहद ऊंची है (बीटा पर 4.18550164e + 04] [2])। साजिश में, मैं आपको दिखाता हूं कि [रूट कर्न] [2] से एफआईटी क्या है, अब एक्स और वाई त्रुटि के साथ। यहां, x0 बीटा [2] है।

लाल और हरे रंग की वक्र में एक अलग बीटा होता है, बाएं एक शून्य से प्राप्त 3.430 के फिट की त्रुटि और सही एक प्लस त्रुटि के त्रुटि से कम है। मुझे लगता है कि उत्पत्ति 9 (जो केवल वाई-त्रुटियों को संभालने में सक्षम है) या ओडीआर द्वारा दिए गए लगभग 40k की त्रुटि से जुड़ी 0.2 की त्रुटि से यह पूरी तरह से समझ में आता है, जिसमें एक्स और वाई भी शामिल है त्रुटियों।

शायद, क्योंकि रूट ज्यादातर खगोल भौतिकीविदों द्वारा उपयोग किया जाता है, जिन्हें बहुत ही कठोर फिटिंग एल्गोरिदम की आवश्यकता होती है, यह अधिक कठिन फिट बैठ सकता है, लेकिन मुझे फिटिंग एल्गोरिदम की मजबूती के बारे में पर्याप्त जानकारी नहीं है।

+0

मुझे सच में नहीं लगता कि फिट बैठने की कोई समस्या है - आपके द्वारा किए गए सभी अलग-अलग एल्गोरिदम मॉडल पैरामीटर के लिए समझदार अनुमान देने लगते हैं। मेरे दिमाग में एकमात्र सवाल फिट पैरामीटर पर मानक त्रुटियों की ओडीआर की रिपोर्टिंग के बारे में है। –