scipy lib中的leastsq方法适合某些数据的曲线。而这种方法意味着在这个数据中Y值取决于一些X参数。并计算曲线与Y轴(DY)的数据点scipy最小二乘法中的正交回归拟合
但是,如果我需要计算两个轴的最小距离(DY和DX)
什么之间的最小距离是否有实现这一一些方法如何计算?
下面是代码的示例使用一个轴的计算时:
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
我最近tryed scipy.odr库和它仅适用于线性函数返回正确的结果。对于其他函数,如y = a * x^b,它会返回错误的结果。这是我如何使用它:
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()
这将返回错误的结果,不希望,并在一些输入数据甚至不接近真实。 可能是,有一些特殊的使用方法,我做错了什么?
SciPy的确实有“正交距离回归”模块 - 是你需要什么? http://docs.scipy.org/doc/scipy/reference/odr.html – 2012-02-21 12:35:25
是的,它似乎解决了这个问题,但是当我尝试它时,它返回的结果与leastsq方法相同。我遵循了文档中给出的例子,并且它并不按需要工作。你有一些工作的例子吗? – Vladimir 2012-02-22 04:41:13
当我尝试它时,我发现结果是相似的,但并不完全相同 - 我认为这只是意味着额外的计算对适合度没有太大影响。 – 2012-02-22 12:33:15