如何优化参数权重?

2024-09-28 22:52:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三个参数(abc),希望找到它们权重的最佳组合(w_aw_bw_c)(即介于1到10之间)

y = ((w_a * a) + (w_b * b) + (w_c * c))/(w_a + w_b + w_c)

权重的最佳值是y的最大值

我已经应用了敏感性分析(一个接一个),但我想尝试一种优化方法。你有什么建议吗


Tags: 方法参数建议权重敏感性
1条回答
网友
1楼 · 发布于 2024-09-28 22:52:07

我不知道参数是什么,你的函数可以达到无穷大,最大化是没有意义的。然而,这里有一种方法可以最大化函数

def func(args):
    a = 1
    b = 2
    c = 1
    w_a, w_b, w_c = args
    out = -((w_a * a) + (w_b * b) + (w_c * c))/(w_a + w_b + w_c)
    if out > 1000 or out < -1000:
        return 0
    return out

from scipy.optimize import minimize

x0 = [0.1, 2, 3]
res = minimize(func, x0, method='Nelder-Mead', tol=1e-6)

请注意,我将您的函数限制在-10001000范围内。我使用了Nelder Mead,但您也可以尝试其他优化算法。我还从函数返回了负数,因为我们使用的是最小化例程,这相当于函数的最大化x0是您对函数权重的初始猜测值

跑步会给你带来以下好处:

 final_simplex: (array([[ 0.18709895,  4.98366926, -5.16577956],
       [ 0.18709896,  4.98366968, -5.16577998],
       [ 0.18709896,  4.9836698 , -5.1657801 ],
       [ 0.18709896,  4.98366971, -5.16578001]]), array([-999.99999989, -999.99999967, -999.99999919, -999.99999909]))
           fun: -999.999999885923
       message: 'Optimization terminated successfully.'
          nfev: 281
           nit: 144
        status: 0
       success: True
             x: array([ 0.18709895,  4.98366926, -5.16577956])

res[x]会给你的权重array([ 0.18709895, 4.98366926, -5.16577956]),使你的函数最大化。现在你的函数被最大化了,它的值是res[fun] = -999.999999885923

相关问题 更多 >