给出训练数据时设置算法参数的一般公会线

时间:2015-09-28 11:00:10

标签: algorithm

假设算法有两个参数:

para_a,it is an integer between 10 and 30
para_b, it is an float between 0 and 1

算法的输出介于0和1之间,输出越高,设置的参数越好。现在我的问题是如果给出了一些测试数据,我们如何设置算法的参数。我的解决方案如下:

  • 第1步:从10到30选择para_a,然后从0到1选择para_b 间隔为0.1。
  • 步骤2:对于每个设置参数,计算算法的输出 给定测试数据的帮助。
  • 步骤3:选择导致最高输出的参数 值。

这是参数设置的直观解决方案,我们无法使用解决方案获得最佳参数。有更优雅的解决方案吗?

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