【问题标题】:Dynamic if-then Code动态 if-then 代码
【发布时间】:2015-07-03 00:22:00
【问题描述】:

我正在使用决策树算法,我得到 if-then 规则(以文本形式返回),例如:

if(Parameter1 > 10) then
   if(Parameter2< 5) then do A
   else do B
else do C

我想使用这些规则来决定几个项目: item(Parameter1, Parameter2) 示例: item1(15, 5), item2(10, 20), ... 问题是,if-then 规则是动态的,我想编写一个能够读取这些规则并将它们应用于项目的代码。

【问题讨论】:

  • 好的,您尝试了什么,遇到了什么问题?听起来您需要将决策树构建为数据结构并将其应用于对某些输入进行分类。
  • 要使它们“动态”,请使用变量而不是文字:int limit = 10; if (parameter1 &gt; limit) ...
  • 是的,就是这样。问题是,如何用 Java 代码编写它?我没有尝试过任何我不知道如何解决的事情。一些想法?
  • @SashaSalauyou 我不知道在应用决策树之前有多少 if-then 规则。每次我使用它(在新数据上)我都会得到一组新规则
  • @Zahzah 规则总是嵌套的吗?或者它们可能是树形排序的?

标签: java decision-tree


【解决方案1】:

您可以翻转它并使用谓词来实现您的测试。例如,

public class GreaterThan implements Predicate<Integer> {
    private final int point;

    public GreaterThan(final int point) {
        this.point = point;
    }

    public boolean test(final Integer incoming) {
        return incoming > point;
    }
}

public class LessThan implements Predicate<Integer> {
  private final int point;

  public LessThan(final int point) {
      this.point = point;
  }

  public boolean test(final Integer incoming) {
    return incoming < point;
  }
}

等等。然后,您可以使用它来动态构建逻辑检查,因为您的测试现在可以正常运行了。

Predicate<Integer> gt10 = new GreaterThan(10);
Predicate<Integer> lt5 = new LessThan(5);

if(gt10.test(Parameter1)) then
    if(lt5.test(Parameter2)) then do A
    else do B
else do C

将 A、B 和 C 的执行封装在函数中,您就可以使用灵活的系统。现在您正在处理功能性对象,您可以动态地构造事物 - 而不是上面显示的固定测试,您可以根据需要组合测试和结果。

【讨论】:

  • 看看我在这个例子中使用的两个 if-else-then,它并不总是这样,我可以用 3 或 4 代替。
  • 这就是我所说的“现在您正在处理功能性对象,您可以动态地构造事物 - 而不是上面显示的固定测试,您可以根据需要组合测试和结果。”
  • @Zahzah 那么你需要创建一个这样的谓词树
猜你喜欢
  • 1970-01-01
  • 2013-12-29
  • 2021-09-09
  • 2015-01-31
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多