【问题标题】:Trying to make a decision tree尝试制作决策树
【发布时间】:2014-11-24 12:13:57
【问题描述】:
Name    Hair    Eyes    Shirt   Glasses Smiling Hat
Alice   BROWN   BLUE    GREEN     YES   YES     NO
Bob     BROWN   BROWN   GREEN     YES   NO     YES
Dave    BROWN   BROWN   GREEN     NO    YES    YES
Emily   BROWN   HAZEL   RED       YES   YES    YES
Frank   BROWN   GREEN   GREEN     YES   YES     NO
Isabelle BROWN  HAZEL   GREEN     YES   YES     NO
Mallie  BROWN   BLUE    RED       YES   YES     NO
Nick    BROWN   BLUE    RED       NO    YES     NO
Philip  BROWN   GREEN   RED       NO    YES     NO
Quinn   BROWN   BROWN   RED       NO    YES     NO
Robert  BROWN   BROWN   RED       NO    YES     YES
Tucker  BROWN   BLUE    BLUE      NO    YES     NO
Wendy   BROWN   BLUE    RED       YES   NO     NO
Zander  BROWN   BROWN   BLUE      NO    YES    NO

我有这些角色,我试图制作一个类似的决策树

 if (g.hairIsColor(Color.BROWN)) 
  {
   if(g.isWearingGlasses())
   {
     if(g.shirtIsColor(Color.GREEN))
     {
         k = "Bob";
       if(g.eyeIsColor(Color.GREEN))
       {
       k = "Frank";
       }
       if(g.eyeIsColor(Color.BLUE))
       {
       k = "Alice";
       break outerloop;
       }
       if(g.eyeIsColor(Color.HAZEL))
       {
       k = "Isabelle";
       }
     }
    if(g.eyeIsColor(Color.HAZEL))
    k = "Emily";
    if (g.isSmiling())
    k = "Mallie";
   }
    else if(g.eyeIsColor(Color.BROWN))
    {
     if (g.shirtIsColor(Color.RED))
     {
       if(g.isWearingHat())
       k = "Robert";
       else 
       k = "Quinn";
     }
     else if(g.shirtIsColor(Color.GREEN))
     k = "Dave";
     else
     k = "Zander";
    }
   else if(g.shirtIsColor(Color.RED))
   { 
    if(g.eyeIsColor(Color.BLUE))
    k = "Nick";
    if(g.eyeIsColor(Color.GREEN))
    k = "Philip";
   }
  else if(g.eyeIsColor(Color.BLUE) && g.shirtIsColor(Color.BLUE))
  k = "Tucker";
}

不幸的是,每个角色都尝试了太多次,想知道是否有人可以帮助我? 我正在尝试将每个字符的尝试次数设为 10 次或以下,但我似乎无法使用 if 语句获得 50% 有什么帮助吗? 我已经对其他头发颜色进行了分类,但棕色给我带来了麻烦

【问题讨论】:

  • 如果你要求别人帮你做作业,别人不会愿意做的。

标签: java decision-tree


【解决方案1】:

不要使用 if-then-else。

  1. 创建一个名为Key 的新类来保存属性
  2. 确保该类具有有效的hashCode()equals() 方法
  3. 创建一个Map<Key,String> 并使用您帖子中表格的内容对其进行初始化

当您需要查找某人时,创建一个新的Key 并设置属性值,将其用作地图中的查找键。如:

Key k = new Key(name, hair, eyes, shirt, glasses, hat, smiling, ...whatever);
String name = map.get(key);

【讨论】:

  • If 语句是我应该做的项目
  • 哎哟!将复杂的决策树作为一系列 if-then-else 语句是一种反模式,因为它们无法理解和维护。几乎 any 替代方法比在代码中嵌入决策树要好。很抱歉,您必须这样做。我希望老师能跟进更好的选择。
【解决方案2】:

条件运算符if提供0到1位的信息:

  • if hair color is brown 提供零位,因为头发颜色是恒定的。

  • if glasses 提供一位,因为它将搜索空间分成两半。

使用提供完整信息的测试理论上可以通过四个测试来识别每个人。根据实际数据选择好的测试应该可以解决这个问题。但它可能要求测试的每个分支都有独特的逻辑。例如,glasses = yes 可能会在衬衫颜色上测试下一个,glasses = no 可能会在帽子上测试下一个,以便将它们各自的搜索空间分支分成两半。

【讨论】:

    【解决方案3】:

    解决了我的问题原来我是从错误的第一个决定开始的,因此最终做错了。我从不同的眼睛颜色开始,然后从那里着手解决了我的问题

    【讨论】:

      猜你喜欢
      • 2022-08-24
      • 2020-09-08
      • 2017-02-21
      • 2014-08-30
      • 2016-11-09
      • 1970-01-01
      • 2018-04-02
      • 2018-11-14
      • 1970-01-01
      相关资源
      最近更新 更多