自动调整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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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