Vla*_*mir 13 python regression scipy least-squares
scipy lib中的leastsq方法适合某些数据的曲线.并且此方法意味着在此数据中Y值取决于某些X参数.并计算曲线与Y轴(dy)中数据点之间的最小距离
但是如果我需要计算两个轴的最小距离(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
Run Code Online (Sandbox Code Playgroud)
我最近尝试了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()
Run Code Online (Sandbox Code Playgroud)
这会返回错误的结果,不需要,并且在某些输入数据中甚至不接近真实.可能是,有一些特殊的使用方式,我做错了什么?
scipy.odr实现正交距离回归.请参阅docstring中的基本使用说明:
https://github.com/scipy/scipy/blob/master/scipy/odr/odrpack.py#L27
我找到了解决方案.Scipy Odrpack正常工作,但需要对正确结果进行初步猜测.所以我把这个过程分成了两个步骤.
第一步:使用纵坐标最小二乘法找到初始猜测.
第二步:将ODR中的这些初始猜测替换为beta0参数.
它以可接受的速度运行良好.
谢谢你们,你的建议指导我找到合适的解决方案