使用优化功能优化功能

时间:2020-10-31 18:03:56

标签: python numpy optimization scipy

我想定义一个函数:

enter image description here

我想找出关于(a,b)的最小值:

x = np.array([.2, .5, .8, .9, 1.3, 1.7, 2.1, 2.7])
y = f(x) + np.random.randn(len(x))

使用函数:optimize.fmin_cg(您可以在这里找到文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_cg.html

到目前为止我的工作

我设法定义了一个compute_error()函数:

def compute_error(a,b):
    k=[0]*len(x)
    for i in range(0,len(x)):
        k[i]=(y[i]-(a*x[i]+b))**2
    return sum(k)

我尝试使用此优化功能将其最小化,但是遇到了一些问题。

x_0=np.array((0,0))     #start optimization from point (0,0)
 
minimum = optimize.fmin_cg(compute_error,x_0)

TypeError: compute_error() missing 1 required positional argument: 'b'

1 个答案:

答案 0 :(得分:3)

我认为compute_error应该采用两个元素的数组,而不是两个单独的参数

def compute_error(params_to_optimize):
    a = params_to_optimize[0]
    b = params_to_optimize[1]
    k=[0]*len(x)
    for i in range(0,len(x)):
        k[i]=(y[i]-(a*x[i]+b))**2
    return sum(k)

可能也是相关的x0初始化看起来有点怪异,我会在np.array构造函数中使用一个列表而不是一个元组

x_0=np.array([0,0])