Python Scipy基于平方误差和优化常数
我希望找到一个Scipy模块,以类似于下面的测试示例的方式优化常数。这是否适合使用Basinhoping及其输入?我的目的是通过将“系数”优化为“123”的值,从而使“factoraray”和“factorayTrue”之间的差异(SSE=0)最小化,从而使“factorayRay”和“factorayTrue”彼此相等(SSE=0)Python Scipy基于平方误差和优化常数,python,python-2.7,optimization,scipy,constants,Python,Python 2.7,Optimization,Scipy,Constants,我希望找到一个Scipy模块,以类似于下面的测试示例的方式优化常数。这是否适合使用Basinhoping及其输入?我的目的是通过将“系数”优化为“123”的值,从而使“factoraray”和“factorayTrue”之间的差异(SSE=0)最小化,从而使“factorayRay”和“factorayTrue”彼此相等(SSE=0) 你最初的代码不太正确。传递给basinhopping()的第一个参数应该就是您要调用的函数。scipy将迭代调用该函数,该函数应期望将可优化系数作为其第一个参数。
你最初的代码不太正确。传递给basinhopping()的第一个参数应该就是您要调用的函数。scipy将迭代调用该函数,该函数应期望将可优化系数作为其第一个参数。inputarray应该是minimizer_kwargs中提供的附加参数之一 以下是有效的方法:
import numpy as np
from scipy.optimize import basinhopping
inputarray = [1,2,3,4,5]
coefficient = 100
def objective_function(coefficient, inputarray):
factorarray = np.empty(len(inputarray))
factorarrayTrue = np.empty(len(inputarray))
for i, num in enumerate(inputarray):
factorarray[i] = num * coefficient
factorarrayTrue[i] = num *123
#### SQUARE ERROR
SEzip = zip(factorarrayTrue, factorarray)
sse = 0
for e in SEzip:
sse += (e[0] - e[1])**2
return sse
minimizer_kwargs = {"method": "COBYLA", "args": (inputarray) }
result = basinhopping(objective_function, coefficient, minimizer_kwargs = minimizer_kwargs)
print(result)
我在这段代码中没有看到“常量”。你是说里面的文字
123
?只需将其作为目标函数的参数,而不是文字。很抱歉造成混淆。我认为系数是常数的同义词。我有一个类似的问题,有多个系数需要优化。如何在最小化函数中定义它们?
import numpy as np
from scipy.optimize import basinhopping
inputarray = [1,2,3,4,5]
coefficient = 100
def objective_function(coefficient, inputarray):
factorarray = np.empty(len(inputarray))
factorarrayTrue = np.empty(len(inputarray))
for i, num in enumerate(inputarray):
factorarray[i] = num * coefficient
factorarrayTrue[i] = num *123
#### SQUARE ERROR
SEzip = zip(factorarrayTrue, factorarray)
sse = 0
for e in SEzip:
sse += (e[0] - e[1])**2
return sse
minimizer_kwargs = {"method": "COBYLA", "args": (inputarray) }
result = basinhopping(objective_function, coefficient, minimizer_kwargs = minimizer_kwargs)
print(result)