起步

决策树(decision tree)是一个树结构,可以是二叉树或非二叉树,也可以把他看作是 if-else 规则的集合,也可以认为是在特征空间上的条件概率分布。

决策树的结构

以一个简单的用于是否买电脑预测的决策树为例子:

树中的内部节点代表一个属性,节点引出的分支表示这个属性的所有可能的值,叶节点表示最终的分类结果。从根节点到叶节点的每一条路径构建一条规则,并且这些规则具有 互斥且完备 的性质,即每一个样本均被且只有一条路径所覆盖。

决策树的创建是根据给定的训练数据来完成的,给出下面的训练集(本章都是围着这个例子进行讲解):

这是一个是否买电脑的一个数据,数据上有4个特征:年龄( age ),收入( income ),是否学生( student ),信用度( credit_rating )。

案例的决策树中,为什么是以年龄作为第一个进行分类的特征呢?

特征的分类能力

如果一个特征对结果影响比较大,那么就可以认为这个特征的分类能力比较大。相亲时候一般会先问收入,再问长相,然后问其家庭情况。也就是说在这边收入情况影响比较大,所以作为第一个特征判断,如果不合格那可能连后续都不用询问了。

有什么方法可以表明特征的分类能力呢?

这时候,需要引入一个概念,熵 。

熵(entropy)

1948年,香农提出“信息熵”的概率。一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件不确定的事,需要了解大量信息。熵(entropy)用于表示 随机变量不确定性的度量, 如果熵越大,表示不确定性越大。

假设变量X,它有Xi(i=1,2,3...n)种情况,pi表示第i情况的概率,那么随机变量X的熵定义为:

$$

H(X) = -\sum_{i=1}^np_i\log_2{(p_i)}

$$

熵的单位是比特(bit)。

比如当随机变量X只有0,1两种取值,则有: H(x) = -plog(p) - (1-p)log(1-p) , 可以画出一个二维坐标表示他们的关系:

从而可知,当 p=0.5 时,熵取值最大,随机变量不确定性最大。

回到买电脑的例子,在是否购买电脑这个结果中,数据集D,有 9 个yes,5 个no。因此它的熵是:

$$

info(D) = H(D) = - \frac{9}{14}\log_2(\frac{9}{14}) - \frac5{14}\log_2(\frac5{14}) = 0.940 bits

$$

条件熵(conditional entropy)

随机变量X给定的条件下,随机变量Y的条件熵 H(Y|X) 定义为:

$$

H(Y|X) = \sum_{i=1}^np_iH(Y|X=x_i)

$$

信息增益 (Information gain)

信息增益表示的是:得知 特征X 的信息而使得 分类Y 的信息的不确定性减少的程度。如果某个特征的信息增益比较大,就表示该特征对结果的影响较大,特征A对数据集D的信息增益表示为:

$$

gain(A) = H(D) - H(D|A)

$$

以那个买电脑的数据集为例,我们来计算下 age 这个特征的信息增益,将数据再展示一下:

从图中可以看出,有14条数据 age 这个特征中,年轻人 youth 有5人, 中年人 middle_aged 有4人,老年人 senior 有5人。分别计算这三种情况下的信息熵,再将信息熵相加就能得到 H(D|A):

$$

\begin{align*}

info_{age}(D) = H(D|A) &= \frac5{14}\times (-\frac25\log_2\frac25 - \frac35\log_2\frac35) \\

&+\frac4{14}\times (-\frac44\log_2\frac44 - \frac04\log_2\frac04) \\

&+\frac5{14}\times (-\frac35\log_2\frac35 - \frac25\log_2\frac25) \\

&=0.694 bits

\end{align*}

$$

因此,gain(age) 的信息增益就是:

gain(age) = info(D) - info_{age}(D) = 0.940 - 0.694 = 0.246 bits

决策树归纳算法 (ID3)

ID3算法的核心是在决策树的各个结点上应用 信息增益 准则进行特征选择。这个算法也是本章主要介绍的算法。具体做法是:

从根节点开始,对结点计算所有可能特征的信息增益,选择信息增益最大的特征作为结点的特征,并由该特征的不同取值构建子节点;

对子节点递归地调用以上方法,构建决策树;

直到所有特征的信息增益均很小或者没有特征可选时为止。

根据上面的计算信息增量的方法,可以得出其他特征的信息增量:

gain(income) = 0.029, gain(student) = 0.151, gain(credit_rating)=0.048 。

age 这个特征的信息增益是最大的(0.246 bits),选择age作为第一个根节点进行分类:

然后再每个子树中,再根据其特征的信息增益量进行每个划分,递归地形成每个划分上的样本判定树。

递归的停止条件

递归划分步骤仅当下列条件之一成立停止:

(a) 给定结点的所有样本属于同一类。

(b) 没有剩余属性可以用来进一步划分样本。在此情况下,使用多数表决。这涉及将给定的结点转换成树叶,并用样本中的多数所在的类标记它。替换地,可以存放结点样本的类分布。

(c) 分枝,当所有特征的信息增益都很小,也就是没有再计算的必要了,就创建一个树叶,也是用多数表决。

其他决策树归纳算法

C4.5算法

C4.5算法与ID3算法的区别主要在于它在生产决策树的过程中,使用信息增益比来进行特征选择。

CART算法

分类与回归树(classification and regression tree,CART)与C4.5算法一样,由ID3算法演化而来。CART假设决策树是一个二叉树,它通过递归地二分每个特征,将特征空间划分为有限个单元,并在这些单元上确定预测的概率分布。

CART算法中,对于回归树,采用的是平方误差最小化准则;对于分类树,采用基尼指数最小化准则。

这些算法共同点:都是贪心算法,自上而下的创建决策树。不同点是在于对特征的选择度量方法不同。

决策树的剪枝

如果树长到叶子深度太大,就会造成一种情况,在训练集上表现非常好,但是因为分的太细了,在新的数据上就表现不好了。就是出现过度拟合的现象。为了避免这个问题,有两种解决办法:

先剪枝:当熵减少的数量小于某一个阈值时,就停止分支的创建。这是一种贪心算法。

后剪枝:先创建完整的决策树,然后再尝试消除多余的节点,也就是采用减枝的方法。

总结:决策树的优缺点

优点:

易于理解和解释,甚至比线性回归更直观;

与人类做决策思考的思维习惯契合;

模型可以通过树的形式进行可视化展示;

可以直接处理非数值型数据,不需要进行哑变量的转化,甚至可以直接处理含缺失值的数据;

缺点:

处理连续变量不好;

不好处理变量之间存在许多错综复杂的关系,如金融数据分析;

决定分类的因素取决于更多变量的复杂组合时;

可规模性一般。

python画图决策树算法分类_分类算法之决策树(理论篇)相关推荐

  1. Python实现决策树算法和朴素贝叶算法,并根据天气数据集预测是否出游

    天气数据集 该数据集,已有的天气状况.温度.湿度还有风力信息,预测是否适合出去游玩.在算法设计中可以把天气状况.温度.湿度还有风力信息作为算法的输入,是否适合游玩作为输出结果. 代码实现 导入包 im ...

  2. 决策树算法(C4.5算法)

    决策树算法(C4.5算法) 1.1 题目的主要研究内容 组的主要任务描述 熟悉和掌握决策树的分类原理.实质和过程,掌握决策树典型算法(ID3.C4.5.CART)的核心思想和实现过程. (2)自己工作 ...

  3. 分析决策树算法和逻辑回归算法的不同之处

    首先我们导入一组airplan.xlsx数据. 数据表中的age表示年龄.FLIGHT_COUNT表示飞行次数.BASE_POINTS_SUM表示飞行里程.runoff_flag表示流失与否,定义1为 ...

  4. python实现决策树算法sklearn_GitHub - cbyonder/lihang_algorithms: 用python和sklearn两种方法实现李航《统计学习方法》中的算法...

    lihang_algorithms 用python和sklearn实现李航老师的<统计学习方法>中所提到的算法 实验数据:MNIST数据集,这里用kaggle中处理好的数据 官方下载地址: ...

  5. python实现树有多少种方法_教程 | 从头开始:用Python实现决策树算法

    如何计算并评价数据集中地候选分割点(Candidate Split Point) 如何在决策树结构中排分配这些分割点 如何在实际问题中应用这些分类和回归算法 一.概要 本节简要介绍了关于分类及回归树( ...

  6. Python+sklearn决策树算法使用入门

    封面图片:<Python程序设计实验指导书>,董付国编著,清华大学出版社 =========== 在学习决策树算法之前,首先介绍几个相关的基本概念. 决策树算法原理与sklearn实现 简 ...

  7. python机器学习决策树算法

    一.概述: 1.信息熵: 公式:H[x] = -∑p(x)log2p(x) 不确定性越大,信息熵越大 2.决策树评价: 优点:小规模数据集有效 缺点:处理连续变量不好:类别较多时,错误增加的比较快:不 ...

  8. python画图程序没有图_解决python中使用plot画图,图不显示的问题

    解决python中使用plot画图,图不显示的问题 对以下数据画图结果图不显示,修改过程如下 df3 = {'chinese':109, 'American':88, 'German': 66, 'K ...

  9. 机器学习项目实战——10决策树算法之动物分类

    对于决策树的参数可以多次做网格搜索,更加细致的分类,可以使准确率更好. 整体代码: import pandas as pd import numpy as np # pip install missi ...

最新文章

  1. MySQL_update同一张表
  2. 剖析Focal Loss损失函数: 消除类别不平衡+挖掘难分样本 | CSDN博文精选
  3. exchange online share mailbox senditem
  4. 行列式计算的两种方法
  5. Google:狡兔三窟
  6. hadoop 2.7.3 java_java - Hadoop 2.7.3 Java运行时错误 - 找不到core-site.xml - 堆栈内存溢出...
  7. 经典C语言程序100例之二七
  8. (十九)TCPIP面试宝典-进入大厂必备总结(上)
  9. 低版本wordpress运行在PHP5.4上如何关闭warning信息
  10. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(8) - 数据类型转换指令
  11. SQL Server 2012 显式授权示例
  12. Python机器学习全流程项目实战精讲(2018版)
  13. nodejs基础 -- web模块
  14. mysql 有伪表吗_DML和DQL 总结
  15. Mixly米思齐——超声波测距控制LED灯
  16. 适合程序员学习的国外网站推荐
  17. 极速FLV合并器——合并FLV文件的好软件
  18. 大厂Android面试经历(已获头条、百度、OPPO等大厂offer)
  19. 线下活动受阻?打造线上会议方案势在必行
  20. c#如何实现软件授权后才能使用?

热门文章

  1. AFL(American Fuzzy Lop)-afl-fuzz.c
  2. SSH远程免密登录的两种方式
  3. 学习日记-ps文字位置固定,但内容可以修改
  4. 传小米推899元手机 意在阻击盛大?
  5. 常州计算机维修,常州专业笔记本电脑维修中心
  6. 访问虚拟机局域网服务拒绝连接
  7. 这个 17 岁的黑客天才,破解了第一代 iPhone!
  8. #6398. 「THUPC2018」生生不息 / Lives
  9. 庆哥原创 || 这次我们好好交个心!
  10. 计算机双网口怎么共享网络,win7电脑怎么共享上网 两台电脑共享上网操作方法...