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