Graphviz畫決策樹中文亂碼解決

2021-10-03 10:22:29 字數 3743 閱讀 9926

畫圖軟體graphviz的安裝

graphviz畫圖時中文亂碼的解決

python環境使用graphviz,需要安裝graphviz

注意:

安裝完使用時我出現了下面的錯誤,在系統環境中沒有,但我們已經配置了,重啟一下ide。

我重啟了一下pyc

harm

pycharm

pychar

m可以使用了。

graphviz.backend.executablenotfound: failed to execute [

'dot'

,'-tpng'

,'-o'

,'test.**'

],make sure the graphviz executables are on your systems' path

在畫決策樹生成的pdf檔案中,中文標籤出現了亂碼。

修改安裝graphviz軟體中的字型指引位置

# 在安裝目錄找到fonts\fonts.conf檔案

將 -<

dir>

#fontdir#

<

dir>~/

.fonts<

/dir

>--

>

替換去<

dir>c:\windows\fonts<

/dir

>

<

dir>~/

.fonts<

/dir

>

修改生成dot檔案中的字型,有兩種方法:

首先了解一下生成亂碼的原因

字型設定的檔案在\site-packages\sklearn\tree_export.py

#第434行

if self.rounded:

self.out_file.write(

', fontname=helvetica'

) self.out_file.write(

'] ;\n'

)#第442行

if self.rounded:

self.out_file.write(

'edge [fontname=helvetica] ;\n'

)

sklearn中設定生成dot檔案的字型是fon

tnam

e=he

lvet

ic

afontname=helvetica

fontna

me=h

elve

tica

,該字型是西文字型,不支援中文,了解到了原因,接下來就是解決。

注意:

我們看到if self.rounded,所以必須設定rounded=true,才能讓設定的字型成功使用。

a.第一種方法:修改原始碼

# 將上面的那兩處字型設定成"microsoft yahei"微軟雅黑

if self.rounded:

self.out_file.write(

', fontname="microsoft yahei"'

) self.out_file.write(

'] ;\n'

)if self.rounded:

self.out_file.write(

'edge [fontname="microsoft yahei"] ;\n'

)

b. 在生成的dot檔案將fontname=helvetica,替換成fontname="microsoft yahei"

使用乙個例子檢視替換

from sklearn import tree

from sklearn.datasets import load_wine # 紅酒資料

from sklearn.model_selection import train_test_split

import pandas as pd

wine = load_wine(

)data = wine.get(

'data'

)target = wine.get(

'target'

)feature_names = wine.get(

'feature_names'

)# 特徵名稱

target_names = wine.get(

'target_names'

)# 標籤名字

table = pd.concat(

[pd.dataframe(data, columns=feature_names)

, pd.dataframe(target, columns=

['label'])

], axis=1)

# 分訓練集,測試集需要3個引數,特徵資料,標籤,測試樣本佔的比例

x_train, x_test, y_train, y_test = train_test_split(data, target,test_size=

0.3)

clf = tree.decisiontreeclassifier(criterion=

'entropy'

)res = clf.fit(x_train, y_train)

# 畫一棵樹

import graphviz

# 特徵名字對應的中文名

feature_name =

['酒精'

,'蘋果酸'

,'灰'

,'灰的鹼性'

,'鎂'

,'總酚'

,'類黃酮'

,'非黃烷類酚類'

,'花青素'

,'顏色強度'

,'色調'

,'od280/od315稀釋葡萄酒'

,'脯氨酸'

]dot_data = tree.export_graphviz(res, feature_names=feature_name,

class_names=

['琴酒'

,'雪莉'

,'貝爾摩德'],

filled=

true

,# 是讓畫的樹有顏色,否則是黑白

rounded=

true

,# 字型,true才能替換字型,

special_characters=

true,)

# 把不支援中文的helvetica字型換成支援中文的微軟雅黑,可以看到生成的中間檔案wine裡面的fontname字型已經為微軟雅黑了

graph = graphviz.source(dot_data.replace(

'helvetica'

,'"microsoft yahei"'

), encoding=

'utf-8'

)graph.render(

'./model/wine'

,)

注意:

rounded=

true

# 必須設定

python畫決策樹

2.安裝python外掛程式graphviz pip install graphviz 3.安裝python外掛程式pydotplus。conda install c conda forge pydotplus 這樣環境就搭好了,有時候python會很笨,仍然找不到graphviz,這時,可以在 裡...

用graphviz視覺化決策樹

python上有支援graphviz使用 的import graphviz import pydotplus from ipython.display import image 這樣環境就搭好了,有時候python會很笨,仍然找不到graphviz,這時,可以在 裡面加入這一行 os.environ...

決策樹 中文版

決策樹思路 建立樹 獲取所有樣本的標籤列表 如果 標籤列表為同乙個值 停止劃分 如果 特徵選擇完畢 返回類別最多的標籤,停止劃分 選擇最好的特徵進行資料樣本的分割,並且返回該特徵的索引值 就是第幾個特徵 1 獲取到最好特徵的特徵名字 建立以該名字為節點的樹字典 在特徵名稱列表中將這個特徵刪除 獲取最...