我正在使用scipy.minimize函数,我想让一个参数只搜索带有两位小数的选项。
def cost(parameters,input,target):
from sklearn.metrics import mean_squared_error
output = self.model(parameters = parameters,input = input)
cost = mean_squared_error(target.flatten(), output.flatten())
return cost
parameters = [1, 1] # initial parameters
res = minimize(fun=cost, x0=parameters,args=(input,target)
model_parameters = res.x
这里self.model是一个基于参数执行一些矩阵操作的函数。输入和目标是两个矩阵。该函数按我想要的方式工作,除了我想让参数[1]有一个约束。理想情况下,我只想给出一个numpy数组,比如np.arange(0,10,0.01)。这可能吗?
答案 0 :(得分:1)
一般来说,这很难做到,因为 smoothness 是这些优化器的核心假设之一。
一些变量是离散的而一些变量不是很困难的问题,通常通过混合整数优化来解决(对于MI-线性编程很好,对于MI-convex-programming来说非常好,尽管解决方案不太好)或者全局优化(通常是无衍生的)。
根据您的任务详情,我建议分解问题:
np.arange(0,10,0.01)
- 类似修复变量 这将在N
内部优化中生效,N=state-space of your to fix-var
。
根据您的任务/数据,最好单调遍历修复空间(如使用np的arange)并使用迭代解i
作为问题的初始点{{1 (如果猜测好的话,可能需要更少的迭代)。但这可能与此无关,请参阅下一部分。
如果你真的有2个参数,如指示,这种分解导致只有1个变量的内部问题。然后,不要使用i+1
,使用minimize
(更快,更健壮;不需要初始点)。