gpt4 book ai didi

python - 更改使用导出 graphviz 创建的决策 TreeMap 的颜色

转载 作者:行者123 更新时间:2023-12-04 17:16:19 27 4
gpt4 key购买 nike

我正在使用 scikit 的回归树函数和 graphviz 来生成一些决策树的精彩、易于解释的视觉效果:

dot_data = tree.export_graphviz(Run.reg, out_file=None, 
feature_names=Xvar,
filled=True, rounded=True,
special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_png('CART.png')
graph.write_svg("CART.svg")

enter image description here

这运行完美,但如果可能,我想更改配色方案?该图表示 CO2 通量,因此我想将负值设为绿色,将正值设为棕色。我可以导出为 svg 并手动更改所有内容,但是当我这样做时,文本与框不太对齐,因此手动更改颜色并修复所有文本为我的工作流程添加了一个非常乏味的步骤,我真的很喜欢避免! enter image description here

此外,我还看到了一些树,其中连接节点的线的长度与拆分解释的方差百分比成正比。如果可能的话,我也希望能够做到这一点?

最佳答案

  • 您可以通过 graph.get_edge_list() 获取所有边的列表
  • 每个源节点应该有两个目标节点,索引较低的一个被评估为True,索引较高的为False
  • 颜色可以通过 set_fillcolor() 分配

  • enter image description here
    import pydotplus
    from sklearn.datasets import load_iris
    from sklearn import tree
    import collections

    clf = tree.DecisionTreeClassifier(random_state=42)
    iris = load_iris()

    clf = clf.fit(iris.data, iris.target)

    dot_data = tree.export_graphviz(clf,
    feature_names=iris.feature_names,
    out_file=None,
    filled=True,
    rounded=True)
    graph = pydotplus.graph_from_dot_data(dot_data)

    colors = ('brown', 'forestgreen')
    edges = collections.defaultdict(list)

    for edge in graph.get_edge_list():
    edges[edge.get_source()].append(int(edge.get_destination()))

    for edge in edges:
    edges[edge].sort()
    for i in range(2):
    dest = graph.get_node(str(edges[edge][i]))[0]
    dest.set_fillcolor(colors[i])

    graph.write_png('tree.png')

    Also, i've seen some trees where the length of the lines connecting nodes is proportional to the % varriance explained by the split. I'd love to be able to do that too if possible!?



    你可以玩 set_weight()set_len()但这有点棘手,需要一些摆弄才能使其正确,但这里有一些代码可以帮助您入门。
    for edge in edges:
    edges[edge].sort()
    src = graph.get_node(edge)[0]
    total_weight = int(src.get_attributes()['label'].split('samples = ')[1].split('<br/>')[0])
    for i in range(2):
    dest = graph.get_node(str(edges[edge][i]))[0]
    weight = int(dest.get_attributes()['label'].split('samples = ')[1].split('<br/>')[0])
    graph.get_edge(edge, str(edges[edge][0]))[0].set_weight((1 - weight / total_weight) * 100)
    graph.get_edge(edge, str(edges[edge][0]))[0].set_len(weight / total_weight)
    graph.get_edge(edge, str(edges[edge][0]))[0].set_minlen(weight / total_weight)

    关于python - 更改使用导出 graphviz 创建的决策 TreeMap 的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42891148/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com