1-1 基本流程

决策树是一个有监督分类与回归算法。
决策树的生成只考虑局部最优,相对的,决策树剪枝则考虑全局最优。

一、概念:

决策树:是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果,本质是一颗由多个判断节点组成的树。

二、划分依据:

①熵

物理学上,熵 Entropy 是“混乱” 程度的量度。
系统越有序,熵值越低;系统越混乱或者分散,熵值越高
信息理论
1、当系统的有序状态一致时,数据越集中的地方熵值越小,数据越分散的地方熵值越大。这是从信息的完整性上进行的描述。
2、当数据量一致时,系统越有序,熵值越低;系统越混乱或者分散,熵值越高。这是从信息的有序性上进行的描述。

假如事件A的分类划分是(A1,A2,…,An),每部分发生的概率是(p1,p2,…,pn),那信息熵定义为公式如下:
Ent(A)=−∑k=1npklog2pkEnt(A)=-\sum_{k=1}^np_klog_2p_k Ent(A)=−k=1∑n​pk​log2​pk​
二分法:
如果有32个球队,准确的信息量应该是:
H = -(p1 * logp1 + p2 * logp2 + … + p32 * logp32),其中 p1, …, p32 分
别是这 32 支球队夺冠的概率。当每支球队夺冠概率相等都是 1/32 的时:H = -(32 * 1/32 * log1/32) = 5 每个事件概率相同时,熵最大,这件事越不确定。

②特征选择–信息增益及增益率

信息增益:以某特征划分数据集前后的熵的差值。熵可以表示样本集合的不确定性,熵越大,样本的不确定性就越大。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合D划分效果的好坏。
信息增益 = entroy(前) - entroy(后)
信息增益公式如下:
D:为样本集
Ent(D):整体熵
a:离散型属性
v: 是a属性里可能的取值节点
D^v:第v个分支节点包含了D中所有在属性a上取值为a^v的样本

信息增益越大,熵被消除,不确定性越小,应作为最优特征
Gain(D,a)=Ent(D)−∑v=1vDvDEnt(Dv)Gain(D,a) = Ent(D) - \sum_{v=1}^v\frac{D^v}{D}Ent(D^v) Gain(D,a)=Ent(D)−v=1∑v​DDv​Ent(Dv)
增益率:增益比率度量是用前面的增益度量Gain(S,A)和所分离信息度量SplitInformation(如上例的性别,活跃度等)的比值来共同定义的。

公式如下:
GainRatio(SA,A)=Gain(SA,A)SplitInformation(SA,A)GainRatio(S_A,A)= \frac{Gain(S_A,A)}{SplitInformation(S_A,A)} GainRatio(SA​,A)=SplitInformation(SA​,A)Gain(SA​,A)​
SplitInformation(SA,A)=−∑m∈M∣SAm∣∣SA∣logSAmSASplitInformation(S_A,A) = -\sum_{m\in M}\frac{|S_{Am}|}{|S_A|}log\frac{S_Am}{S_A} SplitInformation(SA​,A)=−m∈M∑​∣SA​∣∣SAm​∣​logSA​SA​m​

例子:
如下图,第一列为论坛号码,第二列为性别,第三列为活跃度,最后一列用户是否流失

其中Positive为正样本( 已流失) , Negative为负样本
( 未流失) , 下面的数值为不同划分下对应的人数。可得到三个熵:
整体熵:
E(S)=−515log2(515)−1015log2(1015)=0.9182E(S) = -\frac{5}{15}log_2(\frac{5}{15}) - \frac{10}{15}log_2(\frac{10}{15}) =0.9182 E(S)=−155​log2​(155​)−1510​log2​(1510​)=0.9182
性别熵:
E(g1)=−38log2(38)−58log2(58)=0.9543E(g_1) = -\frac{3}{8}log_2(\frac{3}{8}) - \frac{5}{8}log_2(\frac{5}{8}) =0.9543 E(g1​)=−83​log2​(83​)−85​log2​(85​)=0.9543
E(g2)=−27log2(27)−57log2(57)=0.8631E(g_2) = -\frac{2}{7}log_2(\frac{2}{7}) - \frac{5}{7}log_2(\frac{5}{7}) =0.8631 E(g2​)=−72​log2​(72​)−75​log2​(75​)=0.8631
性别信息增益:
IGain(S,g)=E(s)−815E(g1)−715E(g2)=0.0064IGain(S,g) =E(s) -\frac{8}{15}E(g_1) - \frac{7}{15}E(g_2) =0.0064 IGain(S,g)=E(s)−158​E(g1​)−157​E(g2​)=0.0064
活跃度熵:
E(a1) = 0
E(a2) = 0.7219
E(a3) = 0

活跃度信息增益:
IGain(S,g)=E(s)−615E(a1)−515E(a2)−415E(a3)=0.6776IGain(S,g) =E(s) -\frac{6}{15}E(a_1) - \frac{5}{15}E(a_2)- \frac{4}{15}E(a_3) =0.6776 IGain(S,g)=E(s)−156​E(a1​)−155​E(a2​)−154​E(a3​)=0.6776
活跃度的信息增益比性别的信息增益大,也就是说,活跃度对用户流失的影响比性别大。
在做特征选择或者数据分析的时候, 我们应该重点考察活跃度这个指标。

③基尼值和基尼指数

基尼值Gini(D):从数据集D中随机抽取两个样本,起类别标记不一致的概率,故,Gini
(D)值越小,数据集D的纯度越高。
基尼系数公式如下:
Gini(D)=1−∑k=1∣y∣pk2Gini(D) = 1-\sum_{k=1}^{|y|}p_k^2 Gini(D)=1−k=1∑∣y∣​pk2​
基尼指数Gini_index(D):一般,选择使划分后基尼系数最小的属性作为最优化分属性
基尼指数公式如下:
Gini_index(D,a)=∑v=1v∣Dv∣∣D∣Gini(Dv)Gini\_index(D,a) = \sum_{v=1}^v\frac{|D^v|}{|D|}Gini(D^v) Gini_index(D,a)=v=1∑v​∣D∣∣Dv∣​Gini(Dv)
基尼增益:
Gini(D,a)=Gini(D)−∑v=1v∣Dv∣∣D∣Gini(Dv)Gini(D,a) = Gini(D) - \sum_{v=1}^v\frac{|D^v|}{|D|}Gini(D^v) Gini(D,a)=Gini(D)−v=1∑v​∣D∣∣Dv∣​Gini(Dv)
例题:

总结如下:

类型 拖欠 不拖欠 汇总
整体 3 7 10
有房 0 3 3
没房 3 4 7
单身 2 2 4
结婚 0 4 4
离婚 1 1 2

1,对数据集非类标号属性{是否有房,婚姻状况,年收入}分别计算它们的Gini系数增益,取Gini系数增益值最大的属性作为决策树的根节点属性。

2、根节点的Gini系数为:
Gini(是否拖欠贷款)
Gini(D)=1−(310)2−(710)2=0.42Gini(D)=1-(\frac{3}{10})^2-(\frac{7}{10})^2=0.42 Gini(D)=1−(103​)2−(107​)2=0.42
3, 当根据是否有房来进行划分时, Gini系数增益计算过程为 :
Gini(左子节点)=
Gini(y)=1−(03)2−(33)2=0Gini(y)=1-(\frac{0}{3})^2-(\frac{3}{3})^2=0 Gini(y)=1−(30​)2−(33​)2=0
Gini(右子节点)=
Gini(n)=1−(37)2−(47)2=0.4898Gini(n)=1-(\frac{3}{7})^2-(\frac{4}{7})^2=0.4898 Gini(n)=1−(73​)2−(74​)2=0.4898
{ 是否有房}=
Gini(D)−310Gini(y)−710Gini(n)=0.42−310∗0−710∗0.4898=0.077Gini(D)-\frac{3}{10}Gini(y)-\frac{7}{10}Gini(n)=0.42-\frac{3}{10}*0-\frac{7}{10}*0.4898=0.077 Gini(D)−103​Gini(y)−107​Gini(n)=0.42−103​∗0−107​∗0.4898=0.077
4, 若按婚姻状况属性来划分, 属性婚姻状况有三个可能的取值{married,
single, divorced}, 分别计算划分后的Gini系数增益。
分组为{married} | {single,divorced}时

类型 拖欠 不拖欠 汇总
整体 3 7 10
有房 0 3 3
没房 3 4 7
结婚 0 4 4
单身,离婚 3 3 6

{ 婚姻状况}=
0.42−410∗0−610∗[1−(36)2−(36)2]=0.120.42-\frac{4}{10}*0-\frac{6}{10}*[1-(\frac{3}{6})^2-(\frac{3}{6})^2] = 0.12 0.42−104​∗0−106​∗[1−(63​)2−(63​)2]=0.12
当分组为{single} | {married,divorced}时

类型 拖欠 不拖欠 汇总
整体 3 7 10
有房 0 3 3
没房 3 4 7
单身 2 2 4
离婚,结婚 1 5 6

{ 婚姻状况}=
0.42−410∗0.5−610∗[1−(16)2−(56)2]=0.0530.42-\frac{4}{10}*0.5-\frac{6}{10}*[1-(\frac{1}{6})^2-(\frac{5}{6})^2] = 0.053 0.42−104​∗0.5−106​∗[1−(61​)2−(65​)2]=0.053
当分组为{divorced} | {single,married}时

类型 拖欠 不拖欠 汇总
整体 3 7 10
有房 0 3 3
没房 3 4 7
离婚 1 1 2
单身,结婚 2 6 8

{ 婚姻状况}= 0.42−210∗0.5−810∗[1−(28)2−(68)2]=0.0530.42-\frac{2}{10}*0.5-\frac{8}{10}*[1-(\frac{2}{8})^2-(\frac{6}{8})^2] = 0.0530.42−102​∗0.5−108​∗[1−(82​)2−(86​)2]=0.053
对比计算结果,根据婚姻状况属性来划分根节点时取Gini系数增益最大的分组作为划分结果即
{married} | {single,divorced}

小结:
决策树的生成:通常使用信息增益最大,信息增益比最大和基尼指数最小作为最优特征,从根节点开始,递归的产生决策树。相当于用信息增益或其他准则不断地选取局部最优的特征,或将训练集分割为能够基本正确分了的子集

一,决策树构建的基本步骤如下:

  1. 开始讲所有记录看作一个节点
  2. 遍历每个变量的每一种分割方式,找到最好的分割点
  3. 分割成两个节点N1和N2
  4. 对N1和N2分别继续执行2-3步,直到每个节点足够“纯”为止。
    [Source]https://www.cnblogs.com/bourneli/archive/2013/03/15/2961568.html

二,决策树的变量可以有两种:
1) 数字型(Numeric):变量类型是整数或浮点数,如前面例子中的“年收入”。用“>=”,
“>”,“<”或“<=”作为分割条件(排序后,利用已有的分割情况,可以优化分割算法的时间复杂度)。
2) 名称型(Nominal):类似编程语言中的枚举类型,变量只能重有限的选项中选取,比如前面例子中的“婚姻情况”,只能是“单身”,“已婚”或“离婚”,使用“=”来分割。

三,如何评估分割点的好坏?
如果一个分割点可以将当前的所有节点分为两类,使得每一类都很“纯”,也就是同一类的记录较多,那么就是一个好分割点。
比如上面的例子,“拥有房产”,可以将记录分成了两类,“是”的节点全部都可以偿还债务,非常
“纯”;“否”的节点,可以偿还贷款和无法偿还贷款的人都有,不是很“纯”,但是两个节点加起来的纯度之和与原始节点的纯度之差最大,所以按照这种方法分割。构建决策树采用贪心算法,只考虑当前纯度差最大的情况作为分割点。

常见的决策树类型:

1-2 常见决策树类型及剪枝

1为什么要剪枝

  • 随着树的增长, 在训练样集上的精度是单调上升的,然而在独立的测试样例上测出的精度先上升后下降。
  • 原因1: 噪声、 样本冲突, 即错误的样本数据。
  • 原因2: 特征即属性不能完全作为分类标准。
  • 原因3: 巧合的规律性, 数据量不够大。

2常用的剪枝方法

1.1 预剪枝:
(1)每一个结点所包含的最小样本数目,例如10,则该结点总样本数小于10时,则不
再分;
(2)指定树的高度或者深度,例如树的最大深度为4;
(3)指定结点的熵小于某个值,不再划分。随着树的增长, 在训练样集上的精度是调上升的, 然而在独立的测试样例上测出的精度先上升后下降。

1.2 后剪枝:
后剪枝,在已生成过拟合决策树上进行剪枝,可以得到简化版的剪枝决策树。
主要有四种:
(1)REP-错误率降低剪枝
(2)PEP-悲观剪枝
(3)CCP-代价复杂度剪枝
(4)MEP-最小错误剪枝

结论:
决策树的剪枝,由于生成的决策树存在过拟合问题,需要对它进行剪枝,以简化学到的决策树。决策树的剪枝,往往从已生成的树上剪掉一些叶节点或叶节点以上的子树,并将其父节点或根节点作为新的叶节点,从而简化生成的决策树模型。

ID3不能剪枝
C4.5和CRAT都可以剪枝

机器学习之决策树算法详解相关推荐

  1. 写给小白的机器学习之决策树算法详解(附实战源码)

    这里是实战源码,里面算法参数解释和数据可视化详解 GitHub慢的话看码云 具体ppt也已上传至csdn和GitHub 可以做分类树和回归树 现在是一个多分类任务 PPT讲解 强壮性是对若有缺失值等其 ...

  2. 【机器学习】Decision Tree 决策树算法详解 + Python代码实战

    文章目录 一.直观理解决策树 二.熵的作用 三.信息增益 四.决策树构造实例 4.1 问题描述 4.2 根节点构造 五.信息增益率和GINI系数 5.1 信息增益存在的问题 5.2 信息增益率 5.3 ...

  3. 决策树算法详解(1)

    使用决策树解决分类问题,例如 年龄在30为分界点第一次选择,第二个决策点是长相,第三个决策点是收入,在收入中等的时候还考虑是否是公务员,这就是一颗决策树 引入熵和基尼系数两个概念 熵其实就是混乱度,混 ...

  4. 决策树算法详解(3)

    from sklearn.tree import DecisionTreeClassifier # 1.criterion gini or entropy# 2.splitter best or ra ...

  5. 决策树算法详解(2)

    Python决策树原生版参考 #encoding:utf-8 import mathdef createDataSet():#训练数据集dataSet=[['young','myope','no',' ...

  6. python决策树实例_Python机器学习之决策树算法实例详解

    本文实例讲述了Python机器学习之决策树算法.分享给大家供大家参考,具体如下: 决策树学习是应用最广泛的归纳推理算法之一,是一种逼近离散值目标函数的方法,在这种方法中学习到的函数被表示为一棵决策树. ...

  7. 【机器学习基本理论】详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解

    [机器学习基本理论]详解最大似然估计(MLE).最大后验概率估计(MAP),以及贝叶斯公式的理解 https://mp.weixin.qq.com/s/6H0gmMWvTExySMraroLVlQ 最 ...

  8. 【机器学习基本理论】详解最大后验概率估计(MAP)的理解

    [机器学习基本理论]详解最大后验概率估计(MAP)的理解 https://mp.weixin.qq.com/s/dQxN46wEbFrpvV369uOHdA 最大似然估计(Maximum likeli ...

  9. 基于spark mllib_Spark高级分析指南 | 机器学习和分析流程详解(下)

    - 点击上方"中国统计网"订阅我吧!- 我们在Spark高级分析指南 | 机器学习和分析流程详解(上)快速介绍了一下不同的高级分析应用和用力,从推荐到回归.但这只是实际高级分析过程 ...

最新文章

  1. 自动驾驶技术的终局,可能将无限期推迟来到
  2. TIOBE 1 月编程语言:Python 摘得 2020 年度编程语言!
  3. kafka设计与原理
  4. 遍历——PowerShell三分钟(十)
  5. Android开发神器:OkHttp框架源码解析
  6. vim 指定plugin 安装位置
  7. C#(.Net) 连接 ORACLE数据库
  8. 干货 | 应用性能提升 70%,探究 mPaaS 全链路压测的实现原理和实施路径
  9. Linux 系统管理员工具集
  10. linux中查看文件指定行的数据
  11. 如何使用HTTP压缩优化服务器
  12. php中嵌套html代码和html代码中嵌套php方式
  13. post-commit hook failed (exit code 255) with no output 解决方案
  14. oracle表分析效果怎么看,Oracle 索引与表分析几种方法
  15. jzoj3771. 【NOI2015模拟8.15】小 Z 的烦恼
  16. Python 文件处理命令
  17. java线程同步: synchronized详解(转)
  18. Eplan 2.7 ”没有可用加密狗“问题
  19. scipy--统计检验
  20. 学校计算机桌子尺寸,电脑书桌尺寸多少合适?看完解决所有困惑!

热门文章

  1. 【Java笔记+踩坑】SpringBoot——基础
  2. oracle网络认证,Oracle网络应用开发人员认证简介
  3. Mysql查询本月和上个月的数据
  4. 《0day安全:软件漏洞分析技术》学习笔记·1(需要补充节部分)
  5. MEM/MBA 复试准备(05-01) 英语听力英语面试常见问题01-05
  6. 山东省教育厅关于原民办代课教师调…
  7. 华为手机android测试工程师,【华为招聘】华为应用市场招聘Java,android及测试工程师...
  8. 微信公众号开发之回复消息的模板
  9. 刷题day65:整数拆分
  10. 【实时数仓】热度关键词接口、项目整体部署流程