用于在数据挖掘系统中配置模型的Java模式

时间:2012-04-11 16:49:15

标签: java oop design-patterns configuration data-mining

TL; DR:

我正在寻找枚举特定对象的变量的最佳模式,以及这些变量可能采用的范围。我想根据特定的变量设置配置对象。

长版本:

我正在阅读一些旧代码,试图清理我过去制作的一些丑陋的黑客。我有一个很好的机器学习和数据挖掘库。在这个库中有各种统计模型(和其他组件),通过给定足够数据(称为训练)的数学优化,可以学习许多自己的参数。但是,在训练之前设置的其他参数(超参数)作为输入之一。可以通过选择许多有效设置,为每个设置建立模型以及挑选获胜者来“调整”超参数。可以使用该过程的递归来调整若干超参数。

问题:

在我看来,优雅处理超参数(更常见的是选项)的有效系统所需的组件是:

  1. 枚举所有不同选项的静态变量 不同的类型(枚举,浮点数,布尔值等),有效值的范围, 这些也可以存储每个选项的默认值。
  2. 使用此选项设置进行配置并构建对象的构造函数。
  3. 很高兴有能力:例如,从.properties,gnu cli或yaml进行“配置”的能力。
  4. 我遇到的困难:

    这里的主要困难之一似乎是1)。 Java没有任何真正的机制来支持静态抽象变量,这阻止了强制实现“可配置”接口的给定类存储它们自己的默认配置实现。有没有一个很好的方法来解决这个问题?

    父母的默认配置应该传递给子类。

    我可以创建一个带有配置对象的构造函数,但是扩展它也需要(cli,yaml,.properties)这种配置的表现形式有点棘手。

    我很乐意就解决stackoverflow可以提供的这个问题提出任何建议。我一直在考虑这个问题,而我现在所拥有的只是丑陋的黑客,而不是漂亮的代码。

1 个答案:

答案 0 :(得分:2)

您可能希望了解数据挖掘框架ELKI如何解决此问题。 从他们在parameterization的维基页面来看,他们经历了几次迭代。当前版本似乎使用普通的java构造函数,但是处理参数化内容的静态公共内部类。

它可以执行许多有趣的操作,例如返回优化的实现(例如,当您使用L = Norm且p = 2时,它将返回欧几里德距离的静态实例)。另外,它不会在第一个参数化错误上引发异常,但可以在一个配置阶段报告多个错误。

他们拥有的MiniGUI UI具有内容辅助(例如,实现或枚举值的下拉列表),工具提示等,还有一个命令行界面。它还将列出有效的参数信息,例如范围约束或可用的实现。

我不知道他们是否还有一个工具来自动改变参数以找到局部最优。我想我至少看到了这些宣布的一些计划。

相关问题