【问题标题】:Java pattern for configuring models in a data mining system用于在数据挖掘系统中配置模型的 Java 模式
【发布时间】:2012-04-24 00:30:58
【问题描述】:

tl;博士:

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

长版:

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

问题:

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

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

我遇到的困难:

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

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

我可以创建一个采用配置对象的构造函数,但是将其扩展为也采用此配置的(cli、yaml、.properties)表现形式有点棘手。

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

【问题讨论】:

  • 也许类似于 Spring 框架,您可以使用“beans”使用 xml 文件初始化对象。

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


【解决方案1】:

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

它可以做许多有趣的事情,例如返回优化的实现(例如,当您使用 p=2 的 Lp-Norm 时,它将返回欧几里德距离的静态实例)。另外,它不会在第一次参数化错误时抛出异常,但可以在一次配置过程中报告多个错误。

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

我不知道他们是否也有一个工具可以自动改变参数以找到局部最优值。我想我至少看到了一些类似的计划。

【讨论】:

    猜你喜欢
    • 2011-12-25
    • 2013-07-21
    • 2012-02-03
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2019-05-16
    相关资源
    最近更新 更多