关于《机器学习决策树导出图片、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');  

 

 

感谢读者,看到这里!后台编辑,不是很熟悉,排版不够规范,恳请谅解!不足之处,恳请批评指正!

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值