决策树在分类、预测、规则提取等领域有着广泛的应用。

决策树是一种树状结果,它的每一个叶节点对应一个分类。构造决策树的核心问题是:在每一步如何选择适当的属性对样本做拆分。对于分类问题,从已知类标记的训练样本中学习并构造出决策树是一个自上而下,分而治之的过程。

常见的决策树算法如下:ID3算法

C4.5算法

CART算法

其中ID3是最经典的决策树分类算法。

ID3算法

ID3算法基于信息熵来选择最佳测试属性。它选择当前样本集中具有最大信息增益值的属性作为测试属性。

总的信息熵计算方式如下:

设S是s个数据样本的集合。假定某个类别有m个不同的取值:Ci(i = 1, 2, …, m)。设Si是某个类别Ci中的样本数。对于一个给定样本,它总的信息熵为:

其中,Pi是任意样本属于Ci的概率,一般可以用Si/s估计。

每个属性的信息熵计算方式如下:

假设一个属性A具有k个不同的值{a1, a2, …, ak},利用属性A将集合S划分为若干个子集 {S1, S2, …, Sk},其中Sj包含了集合S中属性A取aj值的样本。若选择属性A为测试属性,则这些子集就是从集合S的节点生长出来的新的叶子节点。设Sij是子集Sj中类别为Ci的样本数,则根据属性A划分样本的信息熵值为:

其中,是子集Sj中类别为Ci的样本的概率。

最后,用属性A划分样本集S后所得的信息增益(Gain)为:

Gain值越大,说明选择测试属性A对于分类提供的信息越大,选择A之后对于分类的不确定程度越小。

ID3算法具体流程对当前样本集合,计算所有属性的信息增益(总的信息熵)

选择信息增益最大的属性作为测试属性,把测试属性取值相同的样本划分为同一个样本集

若子样本集的类别属性只含有单个属性,则分支为叶子节点,判断其属性值并标上相应的符号,然后返回调用出;否则对子样本集递归调用本算法

决策树案例

接下来通过一个案例来了解天气、是否周末、是否有促销对销量的影响。数据集格式如下:

计算信息熵值

1、计算总的信息熵值

参考公式:

销量有两种分类为:Ci = {高, 低}, 其中销量为高的为18个,销量为低的是16个。

故总的信息熵为:

通过以下Python代码计算总的信息熵值为:0.997502546369

#-*- coding: utf-8 -*-

importmath as m#计算总的信息熵

I_18_16 = -18 / 34.0 * m.log(18 / 34.0, 2) - 16 / 34.0 * m.log(16 / 34.0, 2)print I_18_16

2、计算每个测试属性(天气、是否周末、是否有促销)的信息熵值

2.1 天气

天气好的情况:销量高的有11个,销量低的有6个

天气坏的情况:销量高的有7个,销量低的有10个

分别计算天气好和天气坏的信息熵为:

天气好的信息熵为:0.936667381878

天气坏的信息熵为:0.964078764808

根据公式:

天气属性的信息熵为:0.950373073343

根据公式:

计算属性「天气」属性的增益值为:

Gain(天气) = 0.0471294730262

同理,通过以上方式,我们可以计算得到「是否周末、是否有促销」的增益值,分别为:

天气属性的增益值为:0.047129

是否周末属性的增益值为:0.139394

是否有促销属性的增益值为:0.127268

故增益最大的属性为:是否为周末。

基于以上结论,以是否为周末作为根节点来构建决策树。

计算代码如下:

#-*- coding: utf-8 -*-

importmath as m#计算二分类信息熵#s1, s2必须是浮点数

defcalc(s1, s2):return - s1 / (s1 +s2) * m.log(s1 / (s1 +s2), 2) - s2 / (s1 +s2) * m.log(s2 / (s1 +s2), 2)#计算总的信息熵

print u'总的信息熵为:'

print calc(18.0, 16.0)print '- -' * 10

print '天气属性信息熵与增益值计算'

#计算天气好的信息熵为

print calc(11.0, 6.0)#计算天气坏的信息熵为

print calc(7.0, 11.0)#计算天气属性的信息熵为

come_weather = 17 / 34.0 * calc(11.0, 6.0) + 17 / 34.0 * calc(7.0, 11.0)printcome_weather#计算天气属性的增益值为

print '天气属性的增益值为:%f' % (calc(18.0, 16.0) -come_weather)print '- -' * 10

print '是否周末属性信息熵与增益值计算'

#计算是周末的信息熵为

print calc(11.0, 3.0)#计算不是周末的信息熵为

print calc(7.0, 13.0)#计算是否周末属性的信息熵为

come_weekday = 14 / 34.0 * calc(11.0, 3.0) + 20 / 34.0 * calc(7.0, 13.0)print '是否周末属性的增益值为:%f' % (calc(18.0, 16.0) -come_weekday)print '- -' * 10

print '是否有促销属性信息熵与增益值计算'

#计算有促销的信息熵为

print calc(15.0, 7.0)#计算不是周末的信息熵为

print calc(9.0, 3.0)#计算是否周末属性的信息熵为

come_sales = 22 / 34.0 * calc(15.0, 7.0) + 12 / 34.0 * calc(9.0, 3.0)print '是否有促销属性的增益值为:%f' % (calc(18.0, 16.0) - come_sales)

使用python构建决策树模型

#-*- coding: utf-8 -*-

importsys

reload(sys)

sys.setdefaultencoding('utf-8')#1. 导入pandas库

importpandas as pd#2.读取excel数据

data = pd.read_excel('sales_data.xls', index_col=u'序号')#3. 数据是类别标签,需要将数据转换为数字#用1表示好、是、高#用-1表示坏、否、低

data[data == u'好'] = 1data[data== u'是'] = 1data[data== u'高'] = 1data[data!= 1] = -1

#3.1 获取除索引列以外的3列

x = data.iloc[:,:3].as_matrix().astype(int)#3.2 获取销量列

y = data.iloc[:,3].as_matrix().astype(int)#4. 导入决策树模型

from sklearn.tree importDecisionTreeClassifier as DTC#5. 构建基于信息熵的决策树模型

dtc = DTC(criterion='entropy')#6. 训练模型

fit = dtc.fit(x, y)

python决策树预测模型_「数据挖掘入门系列」数据挖掘模型之分类与预测 - 决策树...相关推荐

  1. git 代码回退_「Vue 入门系列」第三期,适合新手入门的 Git 使用教程

    引言 Git 工具对于程序员来说已经不陌生了,在开发中也算是必不可少的工具了,本期我们就来看看如何利用 Git 管理代码,以及如何将代码提交到远程(线上) Github 仓库中. 主题:使用 Git ...

  2. graphviz 画决策树_数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris

    数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris 加载数据集 数据特征 训练 随机森林 调参工程师 结尾 数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iri ...

  3. python语言入门m-「数据挖掘入门系列」Python快速入门

    Python环境搭建 本次入门系列将使用Python作为开发语言.要使用Python语言,我们先来搭建Python开发平台.我们将基于Python 2.7版本.以及Python的开发发行版本Anaco ...

  4. 决策树 prepruning_数据挖掘入门系列教程(三点五)之决策树

    本来还是想像以前一样,继续学习< Python数据挖掘入门与实践 >的第三章"决策树",但是这本书上来就直接给我怼了一大串代码,对于决策树基本上没有什么介绍,可直接把我 ...

  5. python列表框_「每日一练」Python列表框部件的运用

    原标题:「每日一练」Python列表框部件的运用 用Python就一定要用到界面操作,有一个好的用户界面,才会有好的用户体验,下边就开始创建我们的主窗口,并设置相应的列表框部件吧! 案例 创建主窗口, ...

  6. python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17)...

    原创文章,欢迎转载.转载请注明:转载自 IT人故事会,谢谢! 原文链接地址: 「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17) Appium是一个开 ...

  7. python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具安卓ADB的使用(15)...

    原创文章,欢迎转载.转载请注明:转载自 IT人故事会,谢谢! 原文链接地址: 「docker实战篇」python的docker爬虫技术-移动自动化控制工具安卓ADB的使用(15) adb(Androi ...

  8. python自动抽奖_「懒人必备」用Python自动抽奖

    不知道你们有没有玩过无码科技的小程序抽奖助手,没有玩过的可以在微信小程序入门搜索抽奖助手,首页有很多奖品进行抽奖的,我前几天发现了之后就把那里的所有奖品都点了一次,就突发萌想,能不能用python来实 ...

  9. python开发闹钟_「玩转树莓派」为女朋友打造一款智能语音闹钟

    前言 最近在做智慧工厂相关的工作,多多少少了解了一点物联网相关的技术.于是心血来潮,寻思自己可以做点什么,恰巧之前听说过一些树莓派的传闻,于是就有了这么一款闹钟. 需要说明的是,在看这篇文章之前,你至 ...

  10. python docker实战_「docker实战篇」python的docker-docker镜像的创建使用dockerfile(3

    从上篇docker commit学习可以了解到,镜像的定制其实每一层添加的配置和文件,如果把每一层的修改配置,修改文件,都写入脚本,用这个脚本构建定制镜像,无法重复的问题,镜像构建透明性的问题,体积的 ...

最新文章

  1. div border-radius
  2. linux监控哪些目录,linux管理文件和目录的命令
  3. Linux kernel的中断子系统之(九):tasklet
  4. javascript自定义事件应用实例
  5. 用配置还用Attribute来实现IoC?
  6. linux执行db2的sql脚本,LinuxShell自动执行当前目录所有DB2 SQL语句
  7. 实现财务自由-《富爸爸穷爸爸》读书语句摘抄
  8. 神器!Alibaba Sentinel,功能真心强大!
  9. 君正X1000串口流控bug
  10. ICTCLAS 汉语词性标注集 中科院
  11. 小程序项目:基于微信小程序的超市购物系统——计算机毕业设计
  12. SpringMVC添加登录页面以及首页实现跳转
  13. linux skyeye,在Ubuntu 10.04上安装SkyEye及测试
  14. 6.4 二项式系数和恒等式
  15. html怎么绑定数据,06、如何在html中绑定数据
  16. 小学四则运算练习软件软件需求说明
  17. 倒三角形算法的实现!
  18. C/C++笔试面试手撕代码注意事项
  19. 漫画B-tree 与B+tree
  20. MySQL数据库使用——MySQL数据库管理

热门文章

  1. annotation:@Override出现The method of type must override asuperclass解决方案
  2. H5 表格标签基本使用
  3. Android中resource参数变量使用
  4. 重建二叉树(C++)
  5. LAMP+Redis详解(一)——基本原理
  6. 一文看懂BGP路由黑洞问题
  7. 华三 h3c 交换机链路聚合
  8. 首字母变大写 --输入一个英文句子,将每个单词的第一个字母改成大写字母。
  9. 文件比较与同步工具——FreeFileSync
  10. java - 常见对象object