Python中简单的决策树(嵌套的if语句)?

我想在JSON中定义一个嵌套的if语句,并用Python来测试它。我在考虑一个简单的决策树,带有嵌套的分支,并递归地进行测试。

伪代码

# is_valid = (a == b OR a == a) AND c == c  # Truetree = {    branches: [        {            value1: 'a',            operator: '==',            value2: 'b',            child_connector: 'or'            children: [                {                    value1: 'a',                    operator: '==',                    value2: 'a'                }               ]        },        {            connector: 'and',            value1: 'c',            operator: '==',            value2: 'c'        }    ]}def is_tree_valid(tree):    # TODO    returnis_valid = is_tree_valid(tree)

当我在谷歌上搜索决策树时,我发现了很多与AI相关的资料,但通常过于深入。我在寻找一些简单的东西,并且猜测这是一个常见的话题,并且经常被重新发明。

我很感激能得到代码片段、模块或任何其他建议来完成is_tree_valid()

提前感谢!


回答:

这既关乎输入也关乎算法,但将它们一起设计是合理的。最简单的表达式编码是直接翻译抽象语法树(AST)

{  "operator": "and",  "left": {    "operator": "or",    "left": {      "operator": "==",      "left": "a",      "right": "b"    },    "right": {      "operator": "==",      "left": "a",      "right": "a"    }  },  "right": {    "operator": "==",    "left": "c",    "right": "c"  }}

然后(在解析成明显的Python结构后),评估看起来像这样

def evaluate(node):  try: op=node['operator']  except TypeError: return node  # leaf  l=evaluate(node['left'])  r=node['right']  # not evaluated yet  if op=='==': return l==evaluate(r)  elif op=='and': return l and evaluate(r)  elif op=='or': return l or evaluate(r)  else: raise ValueError("unknown operator: %r"%op)

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注