假设算法有两个参数:
para_a,it is an integer between 10 and 30
para_b, it is an float between 0 and 1
算法的输出介于0和1之间,输出越高,设置的参数越好。现在我的问题是如果给出了一些测试数据,我们如何设置算法的参数。我的解决方案如下:
para_a
,然后从0到1选择para_b
间隔为0.1。这是参数设置的直观解决方案,我们无法使用解决方案获得最佳参数。有更优雅的解决方案吗?
答案 0 :(得分:0)
问题非常宽泛,有点模糊,但我认为可以在这里给出一些一般性提示:
正如您所描述的那样,问题可以被视为(相对简单)Optimization Problem。这些问题有许多不同的形式。例如。这些问题可分为线性或非线性,连续或离散,有界或无界等。求解此类问题的最佳过程取决于此一般分类,除此之外,哪些附加信息是可用 - 例如,是否可以计算目标函数的衍生。
根据目前给出的描述,必须假设问题是“黑匣子”:您不知道哪个输入将导致哪个输出。但可能至少有一些可用的其他信息。例如,您描述的目标函数可能连续:当您有输入和输出时
[10, 0.4999] -> 0.6999
[10, 0.5000] -> ???
[10, 0.5001] -> 0.7001
然后(对于大多数现实问题),第二种情况的输出“可能”接近0.7
。但这是一个必须经过验证的假设。
如果你真的有没有关于目标函数的其他信息,那么你几乎不能像你已经描述的那样进行“强力搜索”:你可以系统地尝试10和10之间的所有值。第一个参数为30,第二个参数的值为0.0到1.0。
(当然,这个抽样实际上可能会错过“最佳”值。但请注意,几乎所有避免这种情况的方法,或者一般来说,“更聪明的搜索”,至少隐含计算目标函数的衍生物......)
根据您是否可以更准确地对问题进行分类,Apache Commons Math "Optim"包中有几个优化器可用。我最近发布了一个示例here。