我想定义一个函数:
我想找出关于(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'
答案 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])