【问题标题】:Realworld parameter optimization真实世界的参数优化
【发布时间】:2012-12-24 10:28:31
【问题描述】:

我需要为我的最新研究项目进行参数优化。我有一个算法,它目前有 5 个参数(四个双精度 [0,1] 和一个标称值,有 3 个值)。该算法使用这些参数来计算一些东西,然后我计算精度、召回率和 FMeasure。单次运行大约需要 1.8 秒。目前,我正在以 0.1 步长遍历每个参数,这向我展示了全局最大值的大致位置。但我想找到精确的全局最大值。我研究了梯度下降,但我真的不知道如何将其应用于我的算法(如果可能的话)。任何人都可以指导我如何实现这样的算法,因为我对这种工作很陌生。

干杯, 丹尼尔

【问题讨论】:

  • 你能计算出你的(双)参数的梯度吗?
  • 嗨,托马斯。最近看了你的库:) 目前我的函数看起来像这样:a1 * x1 + a2 * x2 + a3 * x3 = y 和 x4 是一个阈值参数,它过滤掉 y
  • 也许你应该看看遗传搜索算法en.m.wikipedia.org/wiki/Genetic_algorithm。还有一些Java实现框架。
  • @DanielGerber 嘿,谢谢;)您的函数简化为正常的线性组合并产生凸函数(受双倍间隔和标称值的限制)。所以你的梯度基本上就是参数本身,所以用梯度下降来最小化这个应该没有问题(假设你为 alpha 选择了一个合适的值)。
  • 您使用哪种算法?梯度下降并不是一个那么复杂的算法。如果您查看逻辑回归论文,您可能会看到其中嵌入了梯度下降算法。所以你移植它。

标签: java optimization parameters machine-learning


【解决方案1】:

您当然可以比网格搜索做得更好。

在应用梯度下降等算法之前,您必须确保您的参数空间不包含局部最大值,或者至少您的起点接近全局最大值,并且您的步长足够适合您.

在您的情况下,我建议您从尽可能多的随机样本开始。这是一种比网格搜索更好的探索参数空间的方法。一旦通过这种方式收集到足够的数据,您就可以使用模式查找算法,例如 mean shift 或其更快的派生算法之一,或者直接进行优化。由于您没有参数空间的雅可比行列式,您可以使用迭代逼近它的 Broyden's methodsecant method,例如 BFGS

另外,请参阅此相关问题:How can I adjust parameters for image processing algorithm in an efficient way?

【讨论】:

  • 感谢您的回答。我已经查看了相关问题并基于此实施了爬山方法。遗憾的是,该函数有很多局部最大值(我认为这是由于阈值)。我抽样了很多随机起点,到目前为止,网格搜索给了我更好的结果。有没有一种特殊的方法来处理具有大量局部最大值的函数?
猜你喜欢
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 2013-11-19
相关资源
最近更新 更多