El método leastsq en scipy lib ajusta una curva a algunos datos. Y este método implica que en estos datos, los valores Y dependen de algún argumento X. Y calcula la distancia mínima entre la curva y el punto de datos en el eje Y (dy)Ajuste de regresión ortogonal en el método scipy de mínimos cuadrados
Pero lo que si necesito para calcular la distancia mínima en ambos ejes (dy y dx)
¿Hay algunas maneras de implementar este ¿cálculo?
Este es un ejemplo de código cuando se utiliza un cálculo eje:
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
recientemente He probado scipy.odr biblioteca y devuelve los resultados adecuados sólo para la función lineal. Para otras funciones como y = a * x^b, devuelve resultados incorrectos. Esta es la forma en que lo uso:
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()
Esto devuelve resultados erróneos, no deseados, y en algunos datos de entrada ni siquiera cerca de real. Puede ser, hay algunas formas especiales de usarlo, ¿qué hago mal?
Scipy tiene un módulo de "ortogonal Distancia regresión" - que es lo que necesita? http://docs.scipy.org/doc/scipy/reference/odr.html –
Sí, parece que resuelve este problema, pero cuando lo intento, devuelve el mismo resultado que el método leastsq. Seguí los ejemplos, que se proporcionan en la documentación, y no funciona según sea necesario. ¿Tienes algunos ejemplos de trabajo? – Vladimir
Cuando lo probé, descubrí que los resultados eran similares, pero no idénticos; supuse que solo significaba que el cálculo extra no tenía mucha importancia para el ajuste. –