Orthogonale regression fitting in scipy-least-squares-Methode

Den leastsq Methode in scipy lib passt eine Kurve, um einige Daten. Und diese Methode impliziert, dass in diesen Daten die Y-Werte abhängig von X-argument. Und berechnet den minimalen Abstand zwischen Kurve und die Daten zeigen in der Y-Achse (dy)

Aber was ist, wenn ich brauche zu berechnen minimalen Abstand in beiden Achsen (dy und dx)

Gibt es einige Möglichkeiten zur Umsetzung dieser Berechnung?

Hier ist ein Beispiel des Codes, wenn eine Achse Berechnung:

import numpy as np
from scipy.optimize import leastsq

xData = [some data...]
yData = [some data...]

def mFunc(p, x, y):
    return y - (p[0]*x**p[1])  # is takes into account only y axis

plsq, pcov = leastsq(mFunc, [1,1], args=(xData,yData))
print plsq

Ich habe vor kurzem versucht scipy.odr Bibliothek und es gibt die richtigen Ergebnisse nur für die lineare Funktion. Für andere Funktionen wie y=a*x^b es gibt falsche Ergebnisse. Dies ist, wie ich es verwenden:

def f(p, x):      
    return p[0]*x**p[1]

myModel = Model(f)
myData = Data(xData, yData)
myOdr = ODR(myData, myModel , beta0=[1,1])
myOdr.set_job(fit_type=0) #if set fit_type=2, returns the same as leastsq
out = myOdr.run()
out.pprint()

Dieser liefert falsche Ergebnisse, die nicht erwünscht sind, und in einigen input-Daten nicht einmal annähernd real.
Kann sein, es gibt einige spezielle Möglichkeiten, es zu benutzen, was mache ich falsch?

  • Scipy hat ein Modul für "Orthogonal Distance Regression" - ist es das, was Sie brauchen? docs.scipy.org/doc/scipy/reference/odr.html
  • Ja, es scheint, um dieses problem zu beheben, aber wenn ich versuche, es liefert das gleiche Ergebnis wie leastsq Methode. Ich folgte dem Beispiele, die gegeben sind in der Dokumentation, und es nicht funktioniert, wie gebraucht. Hast du einige Beispiele?
  • Wenn ich es versuchte ich fand, dass die Ergebnisse waren ähnlich, aber nicht identisch sind - bin ich davon ausgegangen, dass einfach nur gemeint, dass die zusätzliche Berechnung nicht viel Unterschied zu der Passform.
  • Ich habe Es! Ich habe die Lösung gefunden. Das problem war in ungeeigneter anfänglicher Vermutungen für odr-solver(beta0-parameter).
InformationsquelleAutor Vladimir | 2012-02-21
Schreibe einen Kommentar