python - 在py中打印决策树
问题描述
我有一个class Node
:
class Node:
def __init__(self, label):
self.label = label
self.children = []
self.answer = ''
self.isPruned = False
其中label
设置为属性eg( Outlook
)。
children
(value, Node)
是一个数组,我在其中存储一对value
分割决策,并且Node
下一个节点
answer
包含路径末尾的分类
我想将它打印为一棵树,在每个边缘上都会有value
分裂的。
def print_tree(node, level = 0):
if node.answer != '':
print(' '*level, node.answer)
return
print(''*level, node.label)
for value, n in node.children:
print(''*(level+1), value)
print_tree(n, level+2)
这就是我想出的,但不是我所期望的。
关于如何轻松显示它的任何想法,在正确的位置显示每个节点和边缘?
编辑:
这是生成树的代码:
def build_tree(df, attributes, target, parent = None):
if df.empty:
node = Node('')
node.is_leaf = True
node.answer = plurality_value(df[target])
return node
elif len(np.unique(df[target])) <= 1: #Tutti gli esempi sono uguali ritorna quella classificazione
node = Node('')
node.is_leaf = True
node.answer = np.unique(df[target])[0]
return node
elif len(attributes) == 0:
node = Node('')
node.is_leaf = True
node.answer = plurality_value(parent)
return node
else:
best_split = importance(df, target)
tree = Node(best_split)
tree.is_internal = True
new_attributes = [i for i in attributes if i != best_split]
new_parent = df[target]
for value in np.unique(df[best_split]):
min_df = df.where(df[best_split] == value).dropna()
sub_tree = build_tree(min_df, new_attributes, target, new_parent)
tree.children.append((value, sub_tree))
return tree
解决方案
推荐阅读
- python - 面临的问题:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 918: ordinal not in range(128) while trying to load a Pytorch model
- python-3.x - 我的代码的哪一部分打印了这个特定的行?
- typescript - 在 Slide ionic 5 上播放视频
- if-statement - 我在 verilog 中的 if 和 else 语句没有给出预期的结果
- android - 导航组件 - 在导航图中访问 BuildConfig
- ios - 未找到模块“firebase_core”颤振示例动态链接测试项目
- c - _findnext() 在有很多文件时返回一个大小为 1 的列表
- python - 我想在输入行中输入x = 499,对吗?,有什么办法吗?
- c# - 派生类上的 C# AllowMultiple 属性
- node.js - 与任何第三方网站的合法登录用户连接/协作