机器学习之决策树简介
Posted 未央夜色
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习之决策树简介相关的知识,希望对你有一定的参考价值。
综述
- 一种非常常用的机器学习算法,属于监督学习,可以用于分类和回归。
- 每个内部节点表示在一个属性上的测试,每个分支代表当前测试的输出。每个叶节点代表类别。
- 根据属性的值分类。得到的新节点是根据属性分后的实例
- 当新节点内,所有的实例都是同一个标记的时候,停止分类
- 自顶向下,基本思想是以信息熵为度量,构造一棵熵值下降最快的树,直到熵的值最终为0。
- 可能是最常使用的数据挖掘算法,主要有ID3,X4.5,CART
- 可能会过度预测,看情况进行剪枝
算法构造
流程图的树结构,对属性测试,判断,然后输出。
判断生成的子节点是否满足停止分割的条件。
节点:属性
分支:根据属性的值的情况,决定分支的个数。
算法流程
决策树本质是个递归过程。判属性–>创分支–>选属性–>递归结束条件。
用伪代码总结执行步骤如下
伪代码:
if 符合结束条件 return 类标签
else
计算/寻找最适合的特征
划分分支
创建新子集
for 每个子集
调用本段代码并增加返回结果到分直接点中
return 分支节点
这里需要注意递归结束条件的判定。西瓜书上写的有点乱,我就以我自己的理解总结一下这些条件
样本/属性情况 | 属性取值 | 操作 |
---|---|---|
有样本有属性 | 样本不全是同一类 | 继续执行算法 |
有样本无属性 | 样本都是同一类 | 结束算法 |
有样本无属性 | 样本不全是同一类 | 多数表决 |
无样本有属性 | 根据父节点情况判断 | 由父节点判断 |
无样本无属性 | None | None |
在算法的构造过程中,选择最优特征至关重要
我们处理数据集的最大原则是将混乱的数据变得有序,所以,在选择属性/节点的时候,选择能把数据冷静下来的属性。
这里我们为了衡量混乱程的,引入熵的概念。
熵:衡量信息大小的概念。一条信息含有信息量的大小,跟他的不确定性直接相关。
信息的度量=不确定性的多少。变量的不确定性越大,熵越大。
节点的选择
ID3算法
如上述,为了使信息混乱程度尽快降低,在选择属性的时候,总是要选择具有最大混乱程度的属性,这样才能尽快降低混乱程度。
用信息增益来衡量降低混乱程度的能力。划分数据集的最大原则是让数据变得更加有序
熵的计算如下公式:
信息增益 = 系统熵 - 条件熵
整个系统的熵定义为:
条件熵:
假如使用属性A进行分类,计算每个A可能取值的信息熵。计算公式和系统熵类似。最后分别乘以取得的概率,并求和
特征t的信息增益 = 该节点内总的熵 - 特征t给定条件下的经验条件的熵。
遍历当前节点的所有特征,并选择信息增益最大的特征作为当前的分裂特征。
信息增益法,对于属性可取值数目较多的属性,比较偏好
C4.5算法
是在ID3算法上的改进,用信息增益率来衡量。
信息增益率:
信息增益和他的条件熵的比值
这个算法对于属性取值可能较少的属性,比较偏好
CART算法
从数据集中随机抽取两个样本,计算相同/不同的概率。
集中反映了集合的纯度。类似经济学上的基尼系数。
基尼系数越高,两极分化(不纯)越高
基尼系数越低,总体一致性越高。
gini系数:随机抽取两个样本,其类别标记不一样的概率。
1 - sum(p**2)
决策树的优化
决策树非常强大,如果不加限制的运行,甚至可以分到非常的细化,导致过拟合,泛化能力降低。解决这个问题的方法是剪枝和随机森林。
剪枝处理
过度拟合问题。决策树的分支过多。该模型变得过度针对于某一类数据,这时候需要对决策树进行剪枝处理
预剪枝
在决策树生成的过程中,对节点进行估计,如果当前节点的划分不能提高决策树的泛化能力,就停止剪枝。
通过验证集中的数据准确率,评价是否能带来准确率的提升。
许多的叶节点没有展开,可能出现欠拟合的风险。后剪枝
先从训练集中生成一颗完整的决策树,自底向上对非叶节点考察,如果把当前节点替换为叶子节点能带来决策树泛化性能提升,就把当前节点替换为叶节点。
挨个考察非叶节点,将其替换为叶节点,比较验证精度,如果有提升,就直接替换成叶节点,继续判断下一非叶节点
开销更大,但是效果比较好
评价
决策树最大的优点是可以很轻易的对一个受训模型解释。
- 计算简单,便于理解,中间值缺失不敏感
- 过拟合,需要优化/剪枝处理
- 使用标称和数值型
进阶
随机森林见后续博文
简介熵
熵,是用来衡量一个系统混乱程度的指标,熵越大越混乱。
定义熵的公式如所示,但是如何理解呢?
通俗一点:
- 概率越小的事情,熵越大
- 概率越大的事情,熵越小
比如:
今天太阳从东边出来了,这个事件并没有什么稀奇的,概率百分百,熵非常小
今天月亮居然是红色的!这个事情就很有搞头了,概率即低的事件,信息量很大
两个不相关事件发生,他们所包含的信息量:
h = h1 + h2
这两个事件发生的概率:
p = p1 * p2
所以h和p之间的关系一定是对数关系
h = -log(p)
熵衡量的是一个系统内所以的信息,:
H = -sum(p*log(p))
以上是关于机器学习之决策树简介的主要内容,如果未能解决你的问题,请参考以下文章