在DecisionTree中使用StringIO的目的是什么

问题描述 投票:2回答:2

我正在编写决策树,以下代码是完整代码的一部分:

def show_tree(tree, features, path):
    f = io.StringIO()
    export_graphviz(tree, out_file=f, feature_names=features)
    pydotplus.graph_from_dot_data(f.getvalue()).write_png(path)
    img = misc.imread(path)
    plt.rcParams['figure.figsize'] = (20,20)
    plt.imshow(img)

请问任何人请告诉我在这里使用StringIO的目的是什么?

python scikit-learn decision-tree stringio
2个回答
1
投票

Python不是我的主要语言,但我认为你的问题的答案很简单,不需要很多研究。

StringIO用于维护输入/输出文本流。你的功能显示树,但是为了做到这一点它需要一种方法来做,某种数据传输高速公路。

在这里f = io.StringIO()你正在初始化你的数据流。在此之后,您可以随意使用它,在这种特殊情况下:

  1. export_graphviz(tree, out_file=f, feature_names=features)

这里:out_file=f您使用f = io.StringIO();之前初始化的数据将数据导出到您的流。由于StringIO是内存中的文本文件,因此您基本上将数据放在流对象中以供进一步使用。多亏了你不必将你的数据写入.dot文件,而是暂时保存它。(只要你的流正在使用中,临时意味着)

More about this particular case

  1. pydotplus.graph_from_dot_data(f.getvalue()).write_png(path)

在这里:f.getvalue()您从.dot数据生成图表。在最基本的用途中,你应该确保.dot文件的路径,在该文件中存储以前生成的数据,但是你没有必要!这就是诀窍,你的数据仍然是你预先创建和填充的流对象!因此,现在您只需将其直接指向此功能,该功能将生成包含该数据的图形图像并将其另存为.png文件。

系统文件和程序之间的通信可以通过多种方式建立,但通常使用流。您在开始时初始化流,使用它然后关闭。每个std::coutstd:err(我的主要语言参考,抱歉非python示例)就是那个流。 Stream允许您维护程序和指定tagret之间的数据交换(例如控制台或本例文件),但是您也可以将其用作临时存储空间,在这种情况下,您可以加快图像生成过程,因为您不需要真的要编写并将数据加载到文件中。所有你需要做的就是将数据写入其他函数将接受的顺序流,然后使用相同的流来读取该数据以用于图像生成目的。

More about StringIO


0
投票

StringIO表示内存中的文本文件。它可以与任何文本文件完全相同使用,因此您可以从中进行写入/读取。访问速度比常规文件快,因为stringio缓冲区是在内存中管理的,但另一方面它在磁盘上不是持久的。

在您给出的示例中,您还可以使用常规文本文件。

这是一个常规点文本文件的示例:

def show_tree(tree, features, path):
    f = 'tree.dot'
    export_graphviz(tree, out_file=f, feature_names=features)
    pydotplus.graph_from_dot_file(f).write_png(path)
    img = misc.imread(path)
    plt.rcParams['figure.figsize'] = (20,20)
    plt.imshow(img)

这是另一个没有文件和没有StringIO的例子,只使用export_graphviz()导出的点文件的字符串内容

def show_tree(tree, features, path):
    dot_data = export_graphviz(tree, out_file=None, feature_names=features)
    pydotplus.graph_from_dot_data(dot_data).write_png(path)
    img = misc.imread(path)
    plt.rcParams['figure.figsize'] = (20,20)
    plt.imshow(img)
© www.soinside.com 2019 - 2024. All rights reserved.