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

标签 python artificial-intelligence decision-tree

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

伪代码:

# is_valid = (a == b OR a == a) AND c == c  # True
tree = {
    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
    return

is_valid = is_tree_valid(tree)

当我在谷歌上搜索决策树时,我发现了很多与人工智能相关的内容,但往往太深入了。我正在寻找一些简单的东西,我猜这是一个常见的话题,并且经常被重新发明。

我希望获得代码片段、模块或任何其他建议来完成 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)

关于python - Python 中的简单决策树(嵌套 if 语句)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59346864/

相关文章:

python - 我怎样才能避免生成一张电子名片而不是给定的电子名片?

python - sqlalchemy:如何为方言自定义标准类型(例如 DateTime() 参数绑定(bind)处理)?

artificial-intelligence - 感知器中阈值的意义是什么?

C++ 基于输入参数的返回类型推导

PHP函数每次将变量递增1

python - 使用Python脚本运行完全独立的powershell脚本

python - Pandas 根据另一列的值增加计数列

python - 一个物体过线后如何计数?

java - 从Evaluation.predictions() Weka-api java中保存在快速 vector 中的结果的含义是什么

python - 递归树生成器中的无限递归