在使用Graphviz进行决策树可视化的过程中遇到一个问题:export_graphviz似乎不支持中文,当feature_name包含中文时,导出的决策树pdf中文都是乱码。查了一些资料,说是要把源文件保存为UTF-8的格式,但在export_graphviz时不知道该怎么改。
目前试了以下两种方法有效。
使用python进行决策树分析及可视化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import pydotplus from sklearn import tree from sklearn.externals.six import StringIO from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test = train_test_split(x,y,test_size=0.2)
clf = tree.DecisionTreeClassifier() clf = clf.fit(X_train,Y_train)
Y_predict = clf.predict(X_test) matchCount = 0 for i in range(len(Y_predict)): if Y_predict[i] == Y_test[i]: matchCount += 1 accuracy = float(matchCount/len(Y_predict))
dot_data = StringIO() tree.export_graphviz(clf,out_file = dot_data,feature_names=feature_name, class_names=target_name,filled=True,rounded=True, special_characters=True) graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) graph.write_pdf("Tree.pdf")
|
解决办法
方法一
将决策树保存为.dot文件,
1 2 3 4
| tree.export_graphviz(clf,out_file = dot_data.dot,feature_names=feature_name, class_names=target_name,filled=True,rounded=True, special_characters=True)
|
并打开.dot文件编辑,将字体改为中文字体并保存(需输入中文字体的英文名,如”FangSong”或”Microsoft Yahei”)
1
| node [shape=box, style="filled, rounded", color="black", fontname="FangSong"]
|
在命令行画图
1
| dot -Tpdf dot_data.dot -o dot_data.pdf
|
方法二
比第一种方法简单,输出svg时中文显示正常
1 2 3 4 5 6 7
| dot_data = StringIO() tree.export_graphviz(clf,out_file = dot_data,feature_names=feature_name, class_names=target_name,filled=True,rounded=True, special_characters=True) graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) graph.write_svg("Tree.svg")
|
网页打开svg文件可另存为其他格式。
我尝试了但没有成功的方法
找到安装路径在 Graphviz\etc\fonts\fonts.conf,找到以下这行:
改成 Windows 字型路径:
1
| <dir>C:\WINDOWS\Fonts</dir>
|
参考资料: