2

我正在开发基于训练数据对图像进行分类的机器学习算法。

在图像预处理阶段,我可以修改几个参数,这些参数会影响我为算法提供的数据(例如,我可以在提取 SURF 特征时更改 Hessian 阈值)。所以到目前为止的流程看起来像:

[param1, param2, param3...] => [黑盒] => 准确率%

我的问题是:有这么多参数可供我使用,我如何系统地选择可以优化结果/准确性的值?一种天真的方法是运行 i 嵌套的 for 循环(假设 i 参数)并遍历所有参数组合,但如果需要 5 分钟从我的“黑盒”系统计算准确度,这将需要很长时间。

话虽如此,是否有任何算法或技术可以在黑盒系统中搜索最佳参数?我正在考虑参加离散优化课程,但我不确定这是否是我时间的最佳利用。

感谢您的时间和帮助!

编辑(回答评论):我有 5-8 个参数。每个参数都有自己的范围。一个参数可以是 0-1000(整数),而另一个参数可以是 0 到 1(实数)。没有什么能阻止我对黑盒评估进行多线程处理。

此外,黑匣子的某些部分对它们具有一定的随机性。例如,一个阶段是使用 k-means 聚类。每次黑盒评估,聚类中心可能会发生变化。我多次运行 k-means 以(希望)避免局部最优。此外,我多次评估黑盒并找到中值准确度,以进一步减轻随机性和异常值。

4

2 回答 2

2

作为部分解决方案,可以在 n 参数产生最佳值的区域中 递归地重复中等分辨率和范围的网格搜索。

每个步骤的每个 n 维结果都将用作下一次迭代的起点

关键是对于每次迭代,绝对值的分辨率保持不变(即保持迭代周期不变)但范围减小以减小间距/粒度步长。

我称它为“收缩网格”:)

请记住,虽然它避免了完全的蛮力复杂性,但它只能在最终迭代中达到详尽的解决方案(这就是最终迭代的定义)。

此外,所概述的过程仅在可能包括或不包括全局最小值的点的子集上是详尽的 - 即它可能导致局部最小值。

(你总是可以通过将初始网格偏移一些低于初始分辨率的量并比较结果来追逐你的尾巴......)

玩得开心!

于 2016-05-19T00:17:04.587 回答
0

这是您的问题的解决方案

本文描述了它背后的一种方法。

于 2016-05-18T23:39:42.133 回答