自动调整3个参数以最小化标准差

情景:
我目前正在开发一个基于规则的 Java 应用程序。每个规则都有 3 个数值参数来影响数据库通信。我正在测量一个受这些规则影响的值,并计算测量值的标准差。标准差应尽可能小。

问题:
我想知道是否可以自动执行此操作?我已经可以自动启动测试场景,并且可以自动计算标准差。所以,现在我正在寻找一种机制来根据测量值调整参数。有什么想法吗?

谢谢。

PS:我知道,这是一个非常笼统的问题…


回答:

正如Peter所说,您必须最小化一个函数 f(a,b,c)。对于表现良好的函数,有很多精细的方法。例如,对于可以微分的函数,或者对于所谓的凸函数。在你的情况下,你有一个我们不太了解的函数。因此,f 可能有不同的局部最小值,这会使许多既定的最小化方法失效。

如果对参数集 a,b,c 的简单评估很快,您可以尝试某种坐标下降法。这不是最好的方法,但对于您来说,强制方法很容易实现。我将由 (a,b,c) 实现的标准差命名为 s(a,b,c)

我给你一些 python 风格的伪代码,应该很容易阅读:

   def improve(a,b,c):
       eps = .01


       s1 = s(a*(1+eps), b, c)
       s2 = s(a, b*(1+eps), b, c)
       s3 = s(a, b, c*(1+eps))

       s4 = s(a*(1-eps), b, c)
       s5 = s(a, b*(1-eps), c)
       s6 = s(a, b, c*(1-eps))

       # determine minimal of (s1....s6) and take index:
       i = argmin (s1....s6) 

       # take parameters which lead to miminal si:   
       if i==1:
          a = a*(1+eps)
       if i==2:
          b = b*(1+eps)

       ...

       if i==6:
          c = c*(1-eps)

       return a,b ,c

您必须从一些值 (a,b,c) 开始,此函数应为您提供一个新的三元组 (a,b,c),从而减少变化。现在你可以根据需要经常应用此步骤。
也许您必须调整 eps,这取决于如果您对 abc 进行少量修改,s(a,b,c) 变化的速度。

这不是最好的解决方案,但是一种易于尝试的实践方法。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注