我正在开发基于训练数据对图像进行分类的机器学习算法。
在图像预处理阶段,我可以修改几个参数,这些参数会影响我提供算法的数据(例如,我可以在提取SURF特征时更改Hessian阈值)。所以到目前为止的流程看起来像:
[param1,param2,param3 ...] => [黑匣子] =>准确度%
我的问题是:我可以使用如此多的参数,如何系统地选择能够提供优化结果/准确度的值?一种天真的方法是运行嵌套for循环(假设我参数)并且只是迭代所有参数组合,但如果从我的“黑匣子”系统计算精度需要5分钟,这将需要很长很长时间。
话虽如此,是否有任何算法或技术可以在黑匣子系统中搜索最佳参数?我正在考虑参加离散优化课程,但我不确定这是否会最好地利用我的时间。
感谢您的时间和帮助!
修改(回答评论): 我有5-8个参数。每个参数都有自己的范围。一个参数可以是0-1000(整数),而另一个参数可以是0到1(实数)。没有什么能阻止我对黑盒评估进行多线程处理。
此外,黑匣子的某些部分对它们有一些随机性。例如,一个阶段是使用k均值聚类。每个黑匣子评估,集群中心可能会发生变化。我运行k-means几次(希望)避免局部最优。此外,我多次评估黑匣子并找到中位数准确度,以进一步减少随机性和异常值。
答案 0 :(得分:2)
作为部分解决方案,可以在n参数导致最佳值的区域中递归地重复重复中等分辨率和范围的网格搜索。
每个步骤的每个n维结果将用作下一次迭代的起始点。
关键是每次迭代时,绝对值的分辨率保持不变(即保持迭代周期不变),但的范围减小,以减小间距/粒度步长。
我称之为'收缩网格':)
请记住,虽然它避免了完全的暴力复杂性,但它只能在最后一次迭代中达到详尽的分辨率(这是定义最终迭代)。
此外,概述的过程仅对可能包含或可能不包括全局最小值的点的子集进行详尽的处理 - 即它可能导致局部最小值。
(你总是可以通过将初始网格偏移一些次初始分辨率并比较结果来追逐你的尾巴......)
玩得开心!
答案 1 :(得分:0)