關於《機器學習決策樹導出圖片、PDF支持中文》解決辦法

    很久沒有更新博客了,一直以爲自己默默無聞,埋頭苦幹。實際上是一種懶惰! 2020年的春天,是一段難忘的記憶!在這段特殊的時光裏,讓我靜心思考,潛心研究。每每遇到技術困惑,總能在CSDN找到解決辦法,由衷的感謝!也感謝熱愛技術的分享者!文筆超讚,邏輯通順,思路清晰!

   於是,我覺得也有必要再次開啓博客,記錄人生奮鬥的足跡!


     今天就分享一下,我在研究學習 機器學習-決策樹 這一部分知識時,遇到導出決策樹,有時不支持中文。今天總算研究完整,實現了導出PDF文件、PNG圖片都支持中文的方案。

    最關鍵的部分是在代碼中,加入本地支持字體

dot_data=dot_data.replace('helvetica','"Microsoft Yahei"') # 這句話很關鍵,把支持中文的字體

     以 Sklearn 自帶的Wine數據集爲例。

1、加載數據集

 from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split 
import numpy as np    
import pandas as pd
wine = load_wine()

2. JupterNoteBook 直接出圖

Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data,wine.target,test_size=0.3)

clf = tree.DecisionTreeClassifier(criterion="entropy")
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest) #返回預測的準確度
print(score)
feature_name = ['酒精',
                '蘋果酸',
                '灰',
                '灰的鹼性',
                '鎂','總酚','類黃酮','非黃烷類酚類','花青素',
                '顏色強度','色調','od280/od315稀釋葡萄酒','脯氨酸']

#安裝graphviz並配置電腦的環境變量,否則顯示不了圖片
import graphviz
dot_data = tree.export_graphviz(clf,
                                feature_names= feature_name,
                                class_names=["琴酒","雪莉","貝爾摩德"]
                                ,filled=True
                                ,rounded=True
                               )
# 出圖
graph = graphviz.Source(dot_data)
graph

3、可視化效果

4、導出PDF文件

#  畫出一棵樹
feature_name = ['酒精','蘋果酸','灰','灰的鹼性','鎂','總酚','類黃酮','非黃烷類酚類','花青素','顏色強度','色調','od280/od315稀釋葡萄酒','脯氨酸']
dot_data = tree.export_graphviz(clf
                               ,out_file = None
                               ,feature_names= feature_name			# 這個參數是將特徵變量名“可視化”,否則會返回“數據集中key="feature_names"對應值列表的索引”
                               ,class_names=["琴酒","雪莉","貝爾摩德"]			# 這個參數可以定義的個數,取決於數據集中key=“target_names”的個數,紅酒數據集的標籤有三個
                               ,filled=True		# 生成的樹展示出來是否填充顏色
                               ,rounded=True		# 展示出來的樹的“框框”是都有棱角~
                               )
dot_data=dot_data.replace('helvetica','"Microsoft Yahei"') # 修改字體,支持中文
graph = graphviz.Source(dot_data)

graph.render(r'wine')#將可視化結果輸出至指定位置

print("導出完畢")

5、導出PNG圖片

feature_name = ['酒精',
                '蘋果酸',
                '灰',
                '灰的鹼性',
                '鎂','總酚','類黃酮','非黃烷類酚類','花青素',
                '顏色強度','色調','od280/od315稀釋葡萄酒','脯氨酸']

dot_data =tree.export_graphviz(decision_tree=clf,
                           out_file=None,
                           feature_names=feature_name,
                           class_names=["琴酒","雪莉","貝爾摩德"],
                           filled=True,
                           rounded=True,
                           special_characters=True)

dot_data=dot_data.replace('helvetica','"Microsoft Yahei"') # 這句話很關鍵,把支持中文的字體,寫入dot文件,

with open("./dot_data.dot", 'w', encoding="utf-8") as f:  # 注意編碼方式
    f.writelines(dot_data)

#參考 唐宇迪 ,這樣實現了導出圖片, 完美!! by zsc
import  pydotplus as pydot
graph= pydot.graph_from_dot_file('dot_data.dot')
graph.write_png('wine-tree2.png');  

 

 

感謝讀者,看到這裏!後臺編輯,不是很熟悉,排版不夠規範,懇請諒解!不足之處,懇請批評指正!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章