文章目录

  • ◆ Pycharm如何生成决策树?
    • Ⅰ.决策树基本步骤
    • Ⅱ.实现生成决策树图
    • Ⅲ.InvocationException: GraphViz's executables not found 解决方案
  • ◆ 生成的决策树中文乱码问题

◆ Pycharm如何生成决策树?

Ⅰ.决策树基本步骤

  • 以下代码在jupyter中可以直接生成,但是在Pyharm中生成的结果是用文字形式表示的树模型。
"""决策树:决策树是一种非参数的有监督学习,可以从一系列有特征和标签的数据中总结出决策规则,并用树状图来展示出这些规则,解决分类和回归的问题。决策树的本质是一种图结构
"""
import pandas  as  pd
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier# 获取数据集
wine_data = load_wine()
x = pd.DataFrame(wine_data.data)
y = wine_data.target
feature = wine_data.feature_names
x.columns = feature# 划分测试集、训练集
xtrain,xtest,ytrain,ytest = train_test_split(x,y,test_size=0.3,random_state=420)# 建模
clf = DecisionTreeClassifier(criterion="entropy").fit(xtrain,ytrain)
# 返回预测的准确度 accuracy
score = clf.score(xtest,ytest)  # 0.9629629629629629# 绘制树
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜
色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
import graphviz
dot_data = tree.export_graphviz(clf,feature_names= feature_name,class_names=["琴酒","雪莉","贝尔摩德"],filled=True,rounded=True)
graph = graphviz.Source(dot_data)
print(graph)
digraph Tree {node [shape=box, style="filled, rounded", color="black", fontname=helvetica] ;
edge [fontname=helvetica] ;
0 [label="类黄酮 <= 1.575\nentropy = 1.557\nsamples = 124\nvalue = [34, 53, 37]\nclass = 雪莉", fillcolor="#dbfae8"] ;
1 [label="色调 <= 0.92\nentropy = 0.747\nsamples = 47\nvalue = [0, 10, 37]\nclass = 贝尔摩德", fillcolor="#a36fec"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="entropy = 0.0\nsamples = 36\nvalue = [0, 0, 36]\nclass = 贝尔摩德", fillcolor="#8139e5"] ;
1 -> 2 ;
3 [label="酒精 <= 13.515\nentropy = 0.439\nsamples = 11\nvalue = [0, 10, 1]\nclass = 雪莉", fillcolor="#4de88e"] ;
1 -> 3 ;
4 [label="entropy = 0.0\nsamples = 10\nvalue = [0, 10, 0]\nclass = 雪莉", fillcolor="#39e581"] ;
3 -> 4 ;
5 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 0, 1]\nclass = 贝尔摩德", fillcolor="#8139e5"] ;
3 -> 5 ;
6 [label="酒精 <= 12.785\nentropy = 0.99\nsamples = 77\nvalue = [34, 43, 0]\nclass = 雪莉", fillcolor="#d6fae5"] ;
0 -> 6 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
7 [label="entropy = 0.0\nsamples = 38\nvalue = [0, 38, 0]\nclass = 雪莉", fillcolor="#39e581"] ;
6 -> 7 ;
8 [label="脯氨酸 <= 655.0\nentropy = 0.552\nsamples = 39\nvalue = [34, 5, 0]\nclass = 琴酒", fillcolor="#e99456"] ;
6 -> 8 ;
9 [label="entropy = 0.0\nsamples = 4\nvalue = [0, 4, 0]\nclass = 雪莉", fillcolor="#39e581"] ;
8 -> 9 ;
10 [label="色调 <= 1.295\nentropy = 0.187\nsamples = 35\nvalue = [34, 1, 0]\nclass = 琴酒", fillcolor="#e6853f"] ;
8 -> 10 ;
11 [label="entropy = 0.0\nsamples = 34\nvalue = [34, 0, 0]\nclass = 琴酒", fillcolor="#e58139"] ;
10 -> 11 ;
12 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1, 0]\nclass = 雪莉", fillcolor="#39e581"] ;
10 -> 12 ;
}

Ⅱ.实现生成决策树图

# 绘制树
import pydotplus
from sklearn import tree
from IPython.display import Imagefeature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
dot_tree = tree.export_graphviz(clf   # 构建的决策树模型,feature_names= feature_name  # 特征名,class_names=["琴酒","雪莉","贝尔摩德"]  # 分出的类名 --- 酒名,filled=True,rounded=True)
graph = pydotplus.graph_from_dot_data(dot_tree)
img = Image(graph.create_png())
graph.write_png("G:\Projects\pycharmeProject\Python_Sklearn\决策树\picture\wine.png")
  • 通过网上查找,找到了如上的解决方案。但是运行时报错:InvocationException: GraphViz's executables not found

返回顶部


Ⅲ.InvocationException: GraphViz’s executables not found 解决方案

下载安装GraphViz(这是一个独立软件)
https://graphviz.gitlab.io/_pages/Download/Download_windows.html

  • 下载完后解压缩后,进行安装,安装过程中选择添加至环境变量中。
  • 不过我手工在环境变量中添加了bin路径不行,还是运行下边这个语句好。
import os
os.environ["PATH"] += os.pathsep + r'F:\Graphviz\bin'
  • 然后在进行图像保存的时候,最好指明图片保存路径方便查找。
graph.write_png("G:\Projects\pycharmeProject\Python_Sklearn\决策树\picture\wine.png")

返回顶部


◆ 生成的决策树中文乱码问题

通过上述步骤后,可以生成树模型图。但是由于本人在设置名称时用的是中文,问题又来了,最后显示的图片中中文乱码。

with open('G:\Projects\pycharmeProject\Python_Sklearn\决策树\picture\dot_data.txt', 'w',encoding='utf-8') as f:  ##将生成树写入,因为含有中文,所以encoding='utf-8'f.writelines(dot_tree)import codecs
txt_dir = r'G:\Projects\pycharmeProject\Python_Sklearn\决策树\picture\dot_data.txt'
txt_dir_utf8 = r'G:\Projects\pycharmeProject\Python_Sklearn\决策树\picture\dot_data_utf8.txt'with codecs.open(txt_dir, 'r', encoding='utf-8') as f, codecs.open(txt_dir_utf8, 'w', encoding='utf-8') as wf:for line in f:lines = line.strip().split('\t')print(lines)if 'label' in lines[0]:newline = lines[0].replace('\n', '').replace(' ', '')else:newline = lines[0].replace('\n','').replace('SimSun-ExtB', 'Microsoft YaHei')wf.write(newline + '\t')

参见大佬博文~

返回顶部


【skLearn】Pycharm生成决策树系列相关推荐

  1. 大白话5分钟带你走进人工智能-第二十六节决策树系列之Cart回归树及其参数(5)...

                                                    第二十六节决策树系列之Cart回归树及其参数(5) 上一节我们讲了不同的决策树对应的计算纯度的计算方法, ...

  2. 《菜菜的机器学习sklearn课堂》sklearn入门与决策树

    决策树 sklearn简介 决策树 - 概述 决策树是如何工作的 sklearn中的决策树 分类树 DecisionTreeClassifier 重要参数 criterion 建立一颗树(只有一个参数 ...

  3. gini系数 决策树_决策树系列--ID3、C4.5、CART

    决策树系列,涉及很好算法,接下来的几天内,我会逐步讲解决策树系列算法 1.基本概念 首先我们理解什么是熵:熵的概念最早源于物理学,用于度量一个热力学系统的无序程度.在信息论里面,信息熵是衡量信息量的大 ...

  4. 大白话5分钟带你走进人工智能-第二十四节决策树系列之分裂流程和Gini系数评估(3)...

     第二十四节决策树系列之分裂流程和Gini系数评估(3) 上一节中我们讲解了决策树的数学表达形式,本节的话我们讲解决策树的分裂流程以及分裂条件的评估.我们基于决策树的递归表达式上:           ...

  5. sklearn分类算法-决策树、随机森林

    sklearn分类算法-决策树.随机森林 一.决策树 1.概念 决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法 比如: ...

  6. sklearn机器学习:决策树tree.DecisionTreeClassifier()

    sklearn中的决策树分类器 sklearn中的决策树分类器函数,格式如下: sklearn.tree.DecisionTreeClassifier(criterion='gini', splitt ...

  7. sklearn中的决策树(分类)

    本文在我的知乎上同步更新:sklearn中的决策树(分类) - 知乎 Sklearn库有很多机器学习模型,不同的模型有着不同的特点,针对不同的问题,选取对应的模型,可以很好地解决问题.树模型作为经典的 ...

  8. sklearn中的决策树(回归)

    本文在我的知乎上同步分享:sklearn中的决策树(分类) - 知乎 前面提到,sklearn中的tree模组有DecisionTreeClassifier与DecisionTreeRegressor ...

  9. 【sklearn入门】决策树在sklearn中的实现--实战红酒分类案例

    scikit-learn简介 scikit-learn,又写作sklearn,是一个开源的基于python语言的机器学习工具包.它通过NumPy, SciPy和 Matplotlib等python数值 ...

最新文章

  1. python 跳过迭代_Python迭代和解析(4):自定义迭代器
  2. 适配器设计模式,简单的Java代码模拟
  3. 没有4G时代,有的只是后3G时代
  4. linux tcmalloc,内存管理TCMalloc 安装和使用
  5. HihoCoder - 1831 - 80 Days(暴力)
  6. 【字节跳动背后的音视频技术揭秘】
  7. html5基础知识点文本标签
  8. 微服务系列:MicroProfile和Apache TomEE
  9. 【原】常见的模块,你语义化了没
  10. 孪生网络Dataset
  11. 打开指定大小的新窗体
  12. 情怀奏不响民宿的狂想曲
  13. 83998 连接服务器出错_Linux高性能服务器设计
  14. linux -- ubuntu桌面版安装xampp
  15. shell题库选择题_linux题库选择及答案
  16. 用什么擦地最干净脑筋急转弯_100个脑筋急转弯,很多人困在了第8题,赶快考考孩子吧...
  17. 2.25亿个邮箱密码被盗、微软漏洞或致黑客接管域控制器|12月23日全球网络安全热点
  18. 通过Bellman算子理解动态规划
  19. 力争群雄:2012年度IT博客大赛100强脱颖而出
  20. Cadence Allegro 17.4学习记录开始06-PCB Editor 17.4快捷键的说明和中英文的切换和操作界面放大缩小设置

热门文章

  1. Linux如何修改openfile参数
  2. ES6新特性的学习和使用
  3. 英语——2018年7月
  4. Vue实现点击列表切换并改变颜色
  5. 记录一下Adobe Acrobat 9 Pro添加水印的方法
  6. Mysql基于Amoeba_读写分离搭架
  7. Unity 日历插件组件-日期选择器2D(二)
  8. 英语口语笔记B1-Unit01.购物时尚-01-Buying clothes
  9. python程序设计题答案_Python程序设计课后习题答案
  10. 中山大学的计算机专业多少分,【广州日报】中山大学 专业录取不设分数级差...