Python实现决策树并且使用Graphviz可视化的例子


Posted in Python onAugust 09, 2019

一、什么是决策树(decision tree)——机器学习中的一个重要的分类算法

决策树是一个类似于数据流程图的树结构:其中,每个内部节点表示一个属性上的测试,每个分支代表一个属性输出,而每个树叶结点代表类或者类的分布,树的最顶层是根结点

根据天气情况决定出游与否的案例

Python实现决策树并且使用Graphviz可视化的例子

二、决策树算法构建

2.1决策树的核心思路

特征选择:从训练数据的特征中选择一个特征作为当前节点的分裂标准(特征选择的标准不同产生了不同的特征决策树算法)。

决策树生成:根据所选特征评估标准,从上至下递归地生成子节点,直到数据集不可分则停止决策树停止声场。

剪枝:决策树容易过拟合,需要剪枝来缩小树的结构和规模(包括预剪枝和后剪枝)。

2.2 熵的概念:度量信息的方式

实现决策树的算法包括ID3、C4.5算法等。常见的ID3核心思想是以信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂。

一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常不确定的事情,或者是我们一无所知的事情,需要大量的信息====>信息量的度量就等于不确定性的 多少。也就是说变量的不确定性越大,熵就越大

信息熵的计算公司

Python实现决策树并且使用Graphviz可视化的例子

S为所有事件集合,p为发生概率,c为特征总数。

信息增益(information gain)是指信息划分前后的熵的变化,也就是说由于使用这个属性分割样例而导致的期望熵降低。也就是说,信息增益就是原有信息熵与属性划分后信息熵(需要对划分后的信息熵取期望值)的差值,具体计算如下:

Python实现决策树并且使用Graphviz可视化的例子

其中,第二项为属性A对S划分的期望信息。

三、IDE3决策树的Python实现

以下面这个不同年龄段的人买电脑的情况为例子建模型算法

Python实现决策树并且使用Graphviz可视化的例子

'''
Created on 2018年7月5日
使用python内的科学计算的库实现利用决策树解决问题 
@author: lenovo
'''
#coding:utf-8
from sklearn.feature_extraction import DictVectorizer
#数据存储的格式 python自带不需要安装
import csv 
#预处理的包
from sklearn import preprocessing
from sklearn.externals.six import StringIO
from sklearn.tree import tree 
from sklearn.tree import export_graphviz
'''
文件保存格式需要是utf-8
window中的目录形式需要是左斜杠 F:/AA_BigData/test_data/test1.csv
excel表格存储成csv格式并且是utf-8格式的编码
'''
'''
决策树数据源读取
scklearn要求的数据类型 特征值属性必须是数值型的
需要对数据进行预处理
'''
#装特征的值
featureList=[] 
#装类别的词
labelList=[]
with open("F:/AA_BigData/test_data/decision_tree.csv", "r",encoding="utf-8") as csvfile:
 decision =csv.reader(csvfile)
 headers =[]
 row =1
 for item in decision:
 if row==1:
  row=row+1
  for head in item:
  headers.append(head)
 else:
  itemDict={}
  labelList.append(item[len(item)-1])
  for num in range(1,len(item)-1):
#  print(item[num])
  itemDict[headers[num]]=item[num]
  featureList.append(itemDict) 
print(headers)
print(labelList)
print(featureList)
'''
将原始数据转换成包含有字典的List
将建好的包含字典的list用DictVectorizer对象转换成0-1矩阵
'''
vec =DictVectorizer()
dumyX =vec.fit_transform(featureList).toarray();
#对于类别使用同样的方法
lb =preprocessing.LabelBinarizer()
dumyY=lb.fit_transform(labelList)
print(dumyY)
'''
 1.构建分类器——决策树模型
 2.使用数据训练决策树模型
'''
clf =tree.DecisionTreeClassifier(criterion="entropy")
clf.fit(dumyX,dumyY)
print(str(clf))
'''
1.将生成的分类器转换成dot格式的 数据
2.在命令行中dot -Tpdf iris.dot -o output.pdf将dot文件转换成pdf图的文件
'''
#视频上讲的不适用python3.5
with open("F:/AA_BigData/test_data/decisiontree.dot", "w") as wFile:
 export_graphviz(clf,out_file=wFile,feature_names=vec.get_feature_names())

Graphviz对决策树的可视化

Python实现决策树并且使用Graphviz可视化的例子

以上这篇Python实现决策树并且使用Graphviz可视化的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python在windows下实现ping操作并接收返回信息的方法
Mar 20 Python
python基础教程之匿名函数lambda
Jan 17 Python
Python编程实现数学运算求一元二次方程的实根算法示例
Apr 02 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
python反编译学习之字节码详解
May 19 Python
python3.6根据m3u8下载mp4视频
Jun 17 Python
python networkx 根据图的权重画图实现
Jul 10 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
详解如何用python实现一个简单下载器的服务端和客户端
Oct 28 Python
python opencv根据颜色进行目标检测的方法示例
Jan 15 Python
python pyg2plot的原理知识点总结
Feb 28 Python
python3.9之你应该知道的新特性详解
Apr 29 Python
Django ORM 常用字段与不常用字段汇总
Aug 09 #Python
详解如何减少python内存的消耗
Aug 09 #Python
Django命名URL和反向解析URL实现解析
Aug 09 #Python
利用python list完成最简单的DB连接池方法
Aug 09 #Python
python使用requests.session模拟登录
Aug 09 #Python
如何在Cloud Studio上执行Python代码?
Aug 09 #Python
python切片(获取一个子列表(数组))详解
Aug 09 #Python
You might like
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
js直接编辑当前cookie的脚本
2008/09/14 Javascript
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
JS原型链怎么理解
2016/06/27 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
windows下python安装pip图文教程
2018/05/25 Python
python学生信息管理系统(初级版)
2018/10/17 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
Python实现Linux监控的方法
2019/05/16 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
高中数学教学反思
2014/01/30 职场文书
《陈涉世家》教学反思
2014/04/12 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
个人工作年终总结
2015/03/09 职场文书
新闻通讯稿范文
2015/07/22 职场文书
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python