决策树中的递归编程
Recursive programming in decision tree
我正在 python 中编写决策树。 tree
是一个有真分支 tb
和假分支 fb
的对象。只有根节点具有 results
属性。
results
是一个字典,包含节点上每个目标变量(即因变量)的计数。我正在研究二元分类问题,所以一个例子就是字典 {0: 25, 1: 9}
.
我想创建一个函数 findrootnodes(tree)
遍历树,直至根节点。它应该 return 列表根节点。列表的每个元素都应该包含一个字典。因此,具有四个根节点的决策树示例为 [{0: 25, 1: 9}, {0: 2, 1: 65}, {0: 2, 1: 7}, {0: 52, 1: 4}]
.
我该怎么做?我当前的代码在下面,但问题是它总是 returns 一个空列表。如果我将 rootnodes 带出函数,Python 会抱怨局部变量 rootnodes 在实例化之前被引用。
def findrootnodes(tree):
rootnodes = []
if tree.results != None:
rootnodes += tree.results
else:
findrootnodes(tree.tb)
findrootnodes(tree.fb)
return rootnodes
在您的 findrootnodes
函数中,您永远不会更改非结果节点的 rootnodes
的值。即调用findrootnodes
时,首先设置:
rootnodes = []
假设初始节点没有results
,那么你运行:
findrootnodes(tree.tb)
findrootnodes(tree.fb)
...两者都没有改变 rootnodes
的值。然后你 return rootnodes
,它仍然是一个空列表。
我认为你真正想要的是:
def findrootnodes(tree):
rootnodes = []
if tree.results != None:
rootnodes.append(tree.results)
else:
rootnodes.extend(findrootnodes(tree.tb))
rootnodes.extend(findrootnodes(tree.fb))
return rootnodes
请注意,我已将此处的 +=
更改为 .append(...)
,因为:
>>> x = []
>>> x += {'key': 'value'}
>>> x
['key']
尝试通过 +=
将字典添加到列表会将字典视为可迭代的,Python 将迭代 仅键 。
我正在 python 中编写决策树。 tree
是一个有真分支 tb
和假分支 fb
的对象。只有根节点具有 results
属性。
results
是一个字典,包含节点上每个目标变量(即因变量)的计数。我正在研究二元分类问题,所以一个例子就是字典 {0: 25, 1: 9}
.
我想创建一个函数 findrootnodes(tree)
遍历树,直至根节点。它应该 return 列表根节点。列表的每个元素都应该包含一个字典。因此,具有四个根节点的决策树示例为 [{0: 25, 1: 9}, {0: 2, 1: 65}, {0: 2, 1: 7}, {0: 52, 1: 4}]
.
我该怎么做?我当前的代码在下面,但问题是它总是 returns 一个空列表。如果我将 rootnodes 带出函数,Python 会抱怨局部变量 rootnodes 在实例化之前被引用。
def findrootnodes(tree):
rootnodes = []
if tree.results != None:
rootnodes += tree.results
else:
findrootnodes(tree.tb)
findrootnodes(tree.fb)
return rootnodes
在您的 findrootnodes
函数中,您永远不会更改非结果节点的 rootnodes
的值。即调用findrootnodes
时,首先设置:
rootnodes = []
假设初始节点没有results
,那么你运行:
findrootnodes(tree.tb)
findrootnodes(tree.fb)
...两者都没有改变 rootnodes
的值。然后你 return rootnodes
,它仍然是一个空列表。
我认为你真正想要的是:
def findrootnodes(tree):
rootnodes = []
if tree.results != None:
rootnodes.append(tree.results)
else:
rootnodes.extend(findrootnodes(tree.tb))
rootnodes.extend(findrootnodes(tree.fb))
return rootnodes
请注意,我已将此处的 +=
更改为 .append(...)
,因为:
>>> x = []
>>> x += {'key': 'value'}
>>> x
['key']
尝试通过 +=
将字典添加到列表会将字典视为可迭代的,Python 将迭代 仅键 。