如何用c#实现决策树(visual studio 2008) - 帮助

时间:2010-10-08 09:30:34

标签: c# .net classification decision-tree

我有一个决策树需要转向C#中的代码

这样做的简单方法是使用if-else语句,但在此解决方案中,我需要创建4-5个嵌套条件。

我正在寻找一种更好的方法来实现它,到目前为止我读了一些关于规则引擎的内容。

您是否有其他建议可以通过4-5嵌套条件开发决策树的有效方法?

4 个答案:

答案 0 :(得分:22)

我在本书中实现了一个简单的决策树作为样本。代码可用online here,所以也许您可以将其用作灵感。决策基本上表示为一个引用true分支和false分支的类,并包含一个执行测试的函数:

class DecisionQuery : Decision {
  public Decision Positive { get; set; }
  public Decision Negative { get; set; }
  // Primitive operation to be provided by the user
  public Func<Client, bool> Test { get; set; }

  public override bool Evaluate(Client client) {
    // Test a client using the primitive operation
    bool res = Test(client);
    // Select a branch to follow
    return res ? Positive.Evaluate(client) : Negative.Evaluate(client);
  }
}

这里,Decision是包含Evaluate方法的基类,源包含一个包含树的最终决策的其他派生类型(是/否)。类型Client是您使用树分析的示例输入数据。

要创建决策树,您可以编写如下内容:

var tree = new DecisionQuery {
    Test = (client) => client.Income > 40000,
    Positive = otherTree,
    Negative = someOtherTree
  };

如果您只想编写五个嵌套的静态if子句,那么可能只需编写if即可。使用像这样的类型的好处是你可以很容易地组成树 - 例如重复使用树的一部分或模块化结构。

答案 1 :(得分:2)

以下是答案https://stackoverflow.com/a/3889544/5288052中提到的Tomas Petricek的代码。

包含“真实世界功能编程”一书的所有源代码的zip可在此处https://www.manning.com/books/real-world-functional-programming获取。

Found value: +91 33 1234 5678
Found value: +91 123 1234 5678
Found value: +91 12345 67890

答案 2 :(得分:1)

只是因为...... 我有一个去,结果在这里...... https://github.com/jkennerley/DeeTree

答案 3 :(得分:-1)

我必须在C#中使用ID3算法实现决策树。

我写了关于我的实施here的文章。代码可以从GitHub下载。