我有一个决策树需要转向C#中的代码
这样做的简单方法是使用if-else语句,但在此解决方案中,我需要创建4-5个嵌套条件。
我正在寻找一种更好的方法来实现它,到目前为止我读了一些关于规则引擎的内容。
您是否有其他建议可以通过4-5嵌套条件开发决策树的有效方法?
答案 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)