我试图对决策树应用减少错误后修剪,该决策树是用Python中的嵌套字典实现的。这是一个树的示例,当与数据拟合时,限制为最多三层(尽管可能更深)
{'isLeaf': 'no',
'attr': 8,
'val': 0.936979167,
'mode': 0,
'left': {'isLeaf': 'no',
'attr': 's',
'val': 'Summer',
'mode': 0,
'left': {'isLeaf': 'no',
'attr': 'a',
'val': 4,
'mode': 0,
'left': {'isLeaf': 'yes', 'mode': 0, 'left': None, 'right': None},
'right': {'isLeaf': 'yes', 'mode': 0, 'left': None, 'right': None}},
'right': {'isLeaf': 'no',
'attr': 3,
'val': 'Sky',
'mode': 0,
'left': {'isLeaf': 'yes', 'mode': 0, 'left': None, 'right': None},
'right': {'isLeaf': 'yes', 'mode': 0, 'left': None, 'right': None}}},
'right': {'isLeaf': 'no',
'attr': 4,
'val': 23,
'mode': 1,
'left': {'isLeaf': 'no',
'attr': 1,
'val': 24.6,
'mode': 0,
'left': {'isLeaf': 'yes', 'mode': 1, 'left': None, 'right': None},
'right': {'isLeaf': 'yes', 'mode': 0, 'left': None, 'right': None}},
'right': {'isLeaf': 'no',
'attr': 11,
'val': 'day',
'mode': 1,
'left': {'isLeaf': 'yes', 'mode': 1, 'left': None, 'right': None},
'right': {'isLeaf': 'yes', 'mode': 0, 'left': None, 'right': None}}}}
本质上,我有属性'isLeaf'、'attr'、'val'和'mode',以及包含在进一步嵌套级别中的左、右子级。叶子节点不会分裂,因此缺少“attr”和“val”键。与减少错误修剪一样,我的目标是从底部(最深层)连续删除叶子,并每次检查错误;如果它相当于/优于整棵树,我将去掉叶子。我了解如何访问/打印叶子正上方的终端节点(需要在每次迭代中转换为叶子)。这可能是一个简单的递归,如下所示:
def get_leaf(tree):
node=tree
if node['right']['isLeaf'] =='yes' or node['left']['isLeaf'] =='yes':
print(node)
else:
if node['right']['isLeaf'] != 'yes':
get_leaf(node['right'])
if node['left']['isLeaf'] != 'yes':
get_leaf(node['left'])
但是,我不知道如何通过删除树叶来进行修改(并在每次迭代后更改整个树),以反映较小的树。这一步对于拟合验证数据和测试是否需要修剪是必要的。 如果您对此有任何意见,我们将不胜感激
目前没有回答
相关问题 更多 >
编程相关推荐