缩放参数在0和1之间以进行优化

问题描述 投票:0回答:1

我想规范化优化的参数,所有参数值都应该在[0,1]之间缩放。为了演示目的,这里有一个简单的例子:

from scipy import optimize
import numpy as np

def blabla(params): ### SOME FUNCTION WE WANT TO MINIMIZE
    x1,x2,x3=params #### PARAMETERS OF THE FUNCTION
    c=100+x1*9*x2-3*x3
    return(c)

def RMSE(params):####OBJECTIVE FUNCTION
    return ((np.sqrt((blabla(params)-100)**2))) ##100 it is the original value

guess=[1,2,3] ####INITIAL GUESS
res=optimize.minimize(RMSE, guess,method='Nelder-Mead', options={'xtol': 0.00001,'ftol':0.000001, 'disp': True}) ###NELDER-MEAD

如何围绕此函数构建一个包装器,使params值缩放,使x1 [0,1],x2 [0,1],x3 [0,1],旧参数比例为x1 [0,1], x2 [0,3],x3 [0,5]。我应该重写整个函数还是有更方便的方法。会不会感激任何提示。

python optimization wrapper
1个回答
0
投票

在缩放参数之前,您必须知道max(params)和min(params)。然后,您可以按如下方式缩放0到1之间的值:

归一化[x1] =(x1-min(params))/(max(params)-min(params))

以下示例代码工作正常:

test=[1,3,5] #test values
def norm(params = [], *args):
    new_list=[]
    print params
    for x in params:
        y=(float(x)-min(params))/(max(params)-min(params)) #normalize
        new_list.append(y)
    return new_list
output=norm(test)
print output

要添加到程序中的代码:

def blabla(params): ### SOME FUNCTION WE WANT TO MINIMIZE
    x1,x2,x3=params #### PARAMETERS OF THE FUNCTION
    x1=(float(x1)-min(x1,x2,x3))/(max(x1,2,x3)-min(x1,x2,x3)) ## Similarly for x2 and x3
    c=100+x1*9*x2-3*x3
    return(c)
© www.soinside.com 2019 - 2024. All rights reserved.