如何在scipy.optimize.minimize中传递输入参数的数组?

时间:2019-05-21 23:49:41

标签: python optimization scikit-learn scipy

我想使用scipy.optimize.minimize通过最小化误差函数来求解一组参数。

名为“错误”的函数返回我要为其找到z1,z2,z3(参数)的函数的平方误差。

我有一个x(在函数中称为“ b”)和y(在函数中称为“ real”)值的数组。

如果我将x和y设置为某个整数,则下面的代码可以正常工作,但是如果我尝试传递x和y值的数组作为方程中的变量“ b”和“ real”,则下面的代码可以正常工作最小化。

尝试传递X和Y值的数组会导致以下错误粘贴。

是否有一种方法可以传递数组以充当最小化函数方程式中的变量,而不仅仅是一个整数?

这是我的代码:

import numpy as np
import pandas as pd
from scipy.optimize import minimize

#dataset file, with a column named x,y with 1000 rows
f = pd.read_csv('Test_Data_.txt', sep='\t')

#initial guess
x0 = [1, 2, 3]

#f['x'] and f['y'] are columns with 1000 rows
#x = f['x'].values
#y = f['y'].values

x = 1 #these parameters work fine
y = 4

#a function called inside the function to be minimized
def est(z1, z2, z3, b):

    return z1 * b**2 + z2 * b + z3

#function to minimize
def error(x, real, b):

    return (real - est(x[0], x[1], x[2], b))**2

print(minimize(error, x0, args = ( x, y), method='BFGS', tol=1e-6))

在x和y值数组中输入会产生错误:

Traceback (most recent call last):
  File "problem1.py", line 24, in <module>
    minimize(error, x0, args = ( np.array(list(f['y'].values)), np.array(list(f['x'].values))), method='BFGS', tol=1e-6)
  File "/usr/local/lib/python3.5/dist-packages/scipy/optimize/_minimize.py", line 595, in minimize
    return _minimize_bfgs(fun, x0, args, jac, callback, **options)
  File "/usr/local/lib/python3.5/dist-packages/scipy/optimize/optimize.py", line 970, in _minimize_bfgs
    gfk = myfprime(x0)
  File "/usr/local/lib/python3.5/dist-packages/scipy/optimize/optimize.py", line 300, in function_wrapper
    return function(*(wrapper_args + args))
  File "/usr/local/lib/python3.5/dist-packages/scipy/optimize/optimize.py", line 730, in approx_fprime
    return _approx_fprime_helper(xk, f, epsilon, args=args)
  File "/usr/local/lib/python3.5/dist-packages/scipy/optimize/optimize.py", line 670, in _approx_fprime_helper
    grad[k] = (f(*((xk + d,) + args)) - f0) / d[k]
ValueError: setting an array element with a sequence.



0 个答案:

没有答案