【问题标题】:Decision tree and algorithm choice决策树和算法选择
【发布时间】:2016-02-23 21:02:42
【问题描述】:

我得到了一项作业,要求我编写(仅使用函数式范例)一个类似于 Akinator 的游戏,在该游戏中,计算机会问我一些关于我正在思考的人的问题,并且必须猜测它是谁。我有一个大约二十个人的数据库,每个人都有大约十个问题,他们要么回答"true"要么"false"。

我被要求构建最小(深度)决策树,定义为:

<Tree> ::= leaf(<List[Atom]>) %list of persons | question(<Atom> true :<Tree> false :<Tree>)。

我建议用一个简单的算法来做,其中树的下一个节点代表真假数最接近的问题。我必须编写一个至少和这个算法一样有效的算法。所以我在网上查找了一个更好的算法,我发现了一些算法,比如 C4.5 和 ID3。

我的问题是我可以使用哪种算法比我为我的家庭作业提出的算法更好? (对于我的要求来说不是太复杂?)

【问题讨论】:

  • 您已经提出了一个简单的解决方案:从上到下构建一个树,同时在每个节点询问熵最多(最消歧)的问题。所以 第一个 问题是最接近 50:50 拆分的问题。 然后,对于每个分支(每个问题下有两个,对或错)递归地重复该过程。
  • 是的,抱歉我不清楚,我正在寻找更好的算法:)
  • 您是否尝试过您找到的任何算法?
  • 不,我还没试过

标签: algorithm decision-tree


【解决方案1】:

算法 C4.5 和 ID3 都是贪心算法,对于如此简单的真假数据,它们最终会构建与您解释的简单解决方案相同的树。贪心算法会做出局部最优选择,但可能不会构建全局最优树。一般构造globally optimal trees is NP-Complete。有一些算法试图改进贪心算法,但总的来说它们相当复杂或/并且不能很好地工作。参见例如chapter 5.4 of a survey article。

【讨论】:

  • 谢谢!我怀疑是否值得使用这两个算法中的一个......但是我是否坚持使用第一个算法?作业表明有可能找到更好的。
猜你喜欢
  • 2019-08-12
  • 2012-05-06
  • 2011-05-06
  • 2018-12-12
  • 2018-12-20
  • 2016-07-06
  • 2019-01-28
  • 2018-08-26
  • 2018-08-18
相关资源
最近更新 更多