我尝试使用scipy.optimize包进行回归。该函数的模型在func中定义,参数名为coeffs。我想使用数据xdata和ydata来学习使用LS准则的参数。
我有以下TypeError:只有length-1数组可以转换为Python标量
from __future__ import division
import numpy
import scipy
from math import exp
import scipy.optimize as optimization
global m0,t0
t0 = 0.25
m0=1
def func(t, coeffs):
a = coeffs[0]
b = coeffs[1]
m = (a/b + m0 )*exp(b*(t-t0))-a/b
return m
# fitting test
x0 = numpy.array([5, -5], dtype=float)
def residuals(coeffs, y, t):
return y - func(t, coeffs)
xdata = numpy.array([0.25,0.5,1])
ydata = numpy.array([1.0,0.803265329856,0.611565080074])
from scipy.optimize import leastsq
x = leastsq(residuals, x0, args=(ydata, xdata))
返回参数预计在[2,-1]附近。
不要使用from math import exp
,用from numpy import exp
替换它,以便正确处理数组:numpy.exp
函数将返回scipy预期的数组,每个元素都转换为指数值。