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检测服务器是否正常
Feb 16 Python
在Python的Django框架中simple-todo工具的简单使用
May 30 Python
Python编程实现及时获取新邮件的方法示例
Aug 10 Python
Windows下Anaconda的安装和简单使用方法
Jan 04 Python
Python实现从log日志中提取ip的方法【正则提取】
Mar 31 Python
python操作excel的方法(xlsxwriter包的使用)
Jun 11 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
Feb 23 Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
Python列表如何更新值
May 27 Python
一些让Python代码简洁的实用技巧总结
Aug 23 Python
Python使用pandas导入csv文件内容的示例代码
Dec 24 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页面间传递参数实例代码
2008/06/05 PHP
header跳转和include包含问题详解
2012/09/08 PHP
php+mysqli实现批量替换数据库表前缀的方法
2014/12/29 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
js实现移动端轮播图
2020/12/21 Javascript
Python-基础-入门 简介
2014/08/09 Python
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
python爬虫之百度API调用方法
2017/06/11 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
Python编程中类与类的关系详解
2019/08/08 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
房地产销售经理岗位职责
2014/01/01 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
设备管理实施方案
2014/05/31 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
2014年实习班主任工作总结
2014/11/08 职场文书
公司禁烟通知
2015/04/23 职场文书
初中地理教学反思
2016/02/19 职场文书