python - 科学 'Minimize the sum of squares of a set of equations'

标签 python scipy

我在 scipy 'leastsq' 优化例程中遇到问题,如果我执行下面的程序,它说

    raise errors[info][1], errors[info][0]
TypeError: Improper input parameters.

有时 索引超出数组范围...

from scipy import *
import numpy
from scipy import optimize
from numpy import asarray
from math import *

def func(apar):
  apar = numpy.asarray(apar)
  x = apar[0]
  y = apar[1]
  eqn = abs(x-y)
  return eqn

Init = numpy.asarray([20.0, 10.0])
x = optimize.leastsq(func, Init, full_output=0, col_deriv=0, factor=100, diag=None, warning=True)
print 'optimized parameters: ',x
print '******* The End ******'

我不知道我的 func optimize.leastsq() 调用有什么问题,请帮助我

最佳答案

leastsq 使用向量,因此残差函数 func 需要返回长度至少为 2 的向量。因此,如果您将 return eqn 替换为 return [eqn, 0.],您的示例将起作用。运行它给出:

optimized parameters:  (array([10., 10.]), 2)

这是绝对差的最小值的众多正确答案之一。

如果你想最小化一个标量函数,fmin 是可行的方法,optimize.fmin(func, Init)

这里的问题是,尽管这两个函数对于标量来说看起来相同,但它们针对的是不同的目标。 leastsq 找到最小平方误差,通常来自一组理想化曲线,并且只是进行“最佳拟合”的一种方法。另一方面,fmin 找到标量函数的最小值。

很明显,您的示例只是一个玩具示例,这些都没有真正意义,因此您采用哪种方式将取决于您的最终目标。

关于python - 科学 'Minimize the sum of squares of a set of equations',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1488227/

相关文章:

python - 加速 NumPy 中许多像素位置的线性插值

python - 如何使用 Numba 在 SciPy 中使用任意数量的变量和参数执行多重积分?

python - Python 3.5 上的 Scipy - 手动安装

python - 如何从 scipy.interpolate.BSpline 中提取 BSpline 基础

python - 如何解决django中属性错误的问题?

python - 如何连接列表元素

python - 并行更新python中的搁置字典

python - 使用 Pandas 或其他模块在 Python 中读取没有隐藏列的 Excel 文件

python - 索引和切片结构化 ndarrays

python - 拟合神经网络的训练误差