代码之家  ›  专栏  ›  技术社区  ›  NiPapen

将参数缩放到0到1之间以进行优化

  •  0
  • NiPapen  · 技术社区  · 6 年前

    我想为优化规范化参数,所有参数值应在[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
    

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Abhiped    6 年前

    在缩放参数之前,必须了解 最大值(参数) 最小值(参数) 。 然后,可以按如下方式将值缩放到0到1之间:

    归一化[x1] = (x1最小值(参数))/(最大值(参数)-最小值(参数))

    下面的示例代码运行良好:

    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)