Python、PyDot 和 DecisionTree
Python, PyDot and DecisionTree
我正在尝试可视化我的 DecisionTree,但出现错误
代码是:
X = [i[1:] for i in dataset]#attribute
y = [i[0] for i in dataset]
clf = tree.DecisionTreeClassifier()
dot_data = StringIO()
tree.export_graphviz(clf.fit(train_X, train_y), out_file=dot_data)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("tree.pdf")
错误是
Traceback (most recent call last):
if data.startswith(codecs.BOM_UTF8):
TypeError: startswith first arg must be str or a tuple of str, not bytes
谁能给我解释一下这是怎么回事?非常感谢!
有问题的行正在检查 stream/file 是否编码为 UTF-8
而不是:
if data.startswith(codecs.BOM_UTF8):
使用:
if codecs.BOM_UTF8 in data:
您可能会取得更大的成功...
我遇到了同样的问题,只是花了几个小时试图解决这个问题。我不能保证我在这里分享的内容对其他人有用,但可能值得一试。
- 我尝试安装官方
pydot
软件包,但我有 Python 3,但它们根本不起作用。在我搜索过的众多网站之一的线程中找到一条注释后,我最终安装了 this forked repository of pydot。
- 我去了 graphviz.org 并在我的 Windows 7 机器上安装了他们的软件。如果您没有 Windows,请查看适用于您系统的下载部分。
- 安装成功后,在环境变量中(
Control Panel\All Control Panel Items\System\Advanced system settings
>点击Environment Variables
按钮>在System variables
下我找到了变量path
>点击Edit...
>我在 Variable value:
字段的末尾添加了 ;C:\Program Files (x86)\Graphviz2.38\bin
。
- 为了确认我现在可以在命令行(Windows 命令处理器)中使用
dot
命令,我输入 dot -V
返回 dot - graphviz version 2.38.0 (20140413.2041)
。
在下面的代码中,请记住我正在从剪贴板中读取 dataframe
。您可能正在从文件或其他内容中读取它。
在IPython笔记本中:
import pandas as pd
import numpy as np
from sklearn import tree
import pydot
from IPython.display import Image
from sklearn.externals.six import StringIO
df = pd.read_clipboard()
X = df[df.columns[:-1]]
y = df[df.columns[-1]]
dtr = tree.DecisionTreeRegressor(max_depth=3)
dtr.fit(X, y)
dot_data = StringIO()
tree.export_graphviz(dtr, out_file=dot_data, feature_names=X.columns)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())
或者,如果您不使用 IPython,只要您安装了 graphviz(上面的第 2 步),就可以从命令行生成您自己的图像。使用我上面相同的示例代码,你在拟合模型后使用这一行:
tree.export_graphviz(dtr.tree_, out_file='treepic.dot', feature_names=X.columns)
然后打开 treepic.dot
文件所在的命令提示符并输入此命令行:
dot -T png treepic.dot -o treepic.png
应使用您的决策树创建一个 .png 文件。
如果使用 Python 3,只需使用 pydotplus 而不是 pydot。也会有pip的软安装过程。
import pydotplus
<your code>
dot_data = StringIO()
tree.export_graphviz(clf, out_file=dot_data)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("iris.pdf")
我正在尝试可视化我的 DecisionTree,但出现错误 代码是:
X = [i[1:] for i in dataset]#attribute
y = [i[0] for i in dataset]
clf = tree.DecisionTreeClassifier()
dot_data = StringIO()
tree.export_graphviz(clf.fit(train_X, train_y), out_file=dot_data)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("tree.pdf")
错误是
Traceback (most recent call last):
if data.startswith(codecs.BOM_UTF8):
TypeError: startswith first arg must be str or a tuple of str, not bytes
谁能给我解释一下这是怎么回事?非常感谢!
有问题的行正在检查 stream/file 是否编码为 UTF-8
而不是:
if data.startswith(codecs.BOM_UTF8):
使用:
if codecs.BOM_UTF8 in data:
您可能会取得更大的成功...
我遇到了同样的问题,只是花了几个小时试图解决这个问题。我不能保证我在这里分享的内容对其他人有用,但可能值得一试。
- 我尝试安装官方
pydot
软件包,但我有 Python 3,但它们根本不起作用。在我搜索过的众多网站之一的线程中找到一条注释后,我最终安装了 this forked repository of pydot。 - 我去了 graphviz.org 并在我的 Windows 7 机器上安装了他们的软件。如果您没有 Windows,请查看适用于您系统的下载部分。
- 安装成功后,在环境变量中(
Control Panel\All Control Panel Items\System\Advanced system settings
>点击Environment Variables
按钮>在System variables
下我找到了变量path
>点击Edit...
>我在Variable value:
字段的末尾添加了;C:\Program Files (x86)\Graphviz2.38\bin
。 - 为了确认我现在可以在命令行(Windows 命令处理器)中使用
dot
命令,我输入dot -V
返回dot - graphviz version 2.38.0 (20140413.2041)
。
在下面的代码中,请记住我正在从剪贴板中读取 dataframe
。您可能正在从文件或其他内容中读取它。
在IPython笔记本中:
import pandas as pd
import numpy as np
from sklearn import tree
import pydot
from IPython.display import Image
from sklearn.externals.six import StringIO
df = pd.read_clipboard()
X = df[df.columns[:-1]]
y = df[df.columns[-1]]
dtr = tree.DecisionTreeRegressor(max_depth=3)
dtr.fit(X, y)
dot_data = StringIO()
tree.export_graphviz(dtr, out_file=dot_data, feature_names=X.columns)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())
或者,如果您不使用 IPython,只要您安装了 graphviz(上面的第 2 步),就可以从命令行生成您自己的图像。使用我上面相同的示例代码,你在拟合模型后使用这一行:
tree.export_graphviz(dtr.tree_, out_file='treepic.dot', feature_names=X.columns)
然后打开 treepic.dot
文件所在的命令提示符并输入此命令行:
dot -T png treepic.dot -o treepic.png
应使用您的决策树创建一个 .png 文件。
如果使用 Python 3,只需使用 pydotplus 而不是 pydot。也会有pip的软安装过程。
import pydotplus
<your code>
dot_data = StringIO()
tree.export_graphviz(clf, out_file=dot_data)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("iris.pdf")