决策树
来源:互联网 发布:电信4g网络模式 编辑:程序博客网 时间:2024/06/11 00:41
最近学习了一下决策树,根据自己的理解记录下来。(主要参考来自统计学习这本书,这本书很好),btw:不是做广告
首先说一下,什么是决策树?
决策书(decision tree)是一种基本的分类和回归方法,我们这里主要讨论分类决策树。在分类问题中,表示基于特征对实例进行分类的过程。
其优点是:决策树模型具有可读性,分类速度快。
学习时:利用训练数据,根据损失函数(这是什么?下面会说到)最小化的原则建立决策树模型。
预测时:对新的数据,利用决策树模型进行分类。
Ps:就是利用一些训练顺据训练出一个决策书模型,让后找一个测试数据对这个模型进行测试,看看那这些测试数据中的数据分别属于哪一类。应该是一个非监督的学习吧(个人理解)。
下面就开始说,他是怎么学习这个决策树模型的???
决策树学习通常包括3个步骤:特征选择。决策树的生成、和决策树的剪枝。
首先说第一个:特征选择。
要知道,目前我们有的是训练数据,那么我们怎么根据训练数据来选择特征呢?
当然我们要选择对训练数据有分类能力的特征。这样可以提高决策树学习的效率。
但是这个特征怎么来选择呢?我们选择哪个特征更好些呢?
比如说下表中的天气特征和温度特征都分别有各自的取值。那么我们选择那个特征呢?
我们选择温度特征好,还是选择天气特征好呢?我们通常选择的准则是信息增益或者信息增益比。
那么问题又来了,什么是信息增益呢?我们又怎么根据训练数据来求信息增益呢?
首先说第一个问题:信息增益(information gain)就是表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。
一棵树中内部节点表示一个特征或属性,叶子结点表示一个类。
如果这个表达的不是很直观,举个例子。
天气
温度
湿度
风速
活动
晴
炎热
高
弱
取消
晴
炎热
高
强
取消
阴
炎热
高
弱
进行
雨
适中
高
弱
进行
雨
寒冷
正常
弱
进行
雨
寒冷
正常
强
取消
阴
寒冷
正常
强
进行
晴
适中
高
弱
取消
晴
寒冷
正常
弱
进行
雨
适中
正常
弱
进行
晴
适中
正常
强
进行
阴
适中
高
强
进行
阴
炎热
正常
弱
进行
雨
适中
高
强
取消
上表中,天气、温度、湿度、风速都是特征,而活动进行与否是两类。这就很容易懂了吧。
下面回答第二个问题?怎么求信息增益呢?
当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时。所对应的熵与条件熵分别称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy)
特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)只差,即:
g(D,A)= H(D) - H(D|A)
下面介绍熵和条件熵:
熵:
香农对熵的定义:信源含有的信息量是信源发出的所有可能消息的平均不确定性,香农把信源所含有的信息量称为信息熵,是指每个符号所含信息量的统计平均值。
在信息论和概率统计中,熵(entropy)是表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为
随机变量X的熵定义为:
在上式中,对数以2为底或以e为底(自然对数),这时熵的单位分别为比特或纳特。由定义可知,熵只依赖于X的分布,而与X的取值无关,所以也可将X的熵记作H(p),即:
条件熵:
设有随机变量(X,Y),其联合概率分布为:
条件熵 表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵(conditional entropy) ,定义为X给定条件下Y的条件概率分布的熵对X的数学期望 。
这里这么讲好像很抽象,大家也不知道怎么用,下面讲一个例子:
(这是书上的一个例子,可以保证正确性。为了偷懒,我就直接整过来了,来自《统计学习方法》)
下面就要说说步骤2:决策数的生成
ID3生成算法和C4.5生成算法,都是决策树学习的经典算法。
ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归的构建决策树。
具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;在对子节点递归的调用以上方法,构建决策树,直到所有的信息增益均很小或没有特真可以选择为止。最后得到一个决策树。
同样,举例说明:
ID3算法只有树的生成,所以该算法生成的树容易产生过拟合。
什么是过拟合:
³ 对于一个假设,当存在其他的假设对训练样例的拟合比它差,但事实上在实例的整个分布上表现得却更好时,我们说这个假设过度拟合训练样例
³ 定义:给定一个假设空间H,一个假设hÎH,如果存在其他的假设h’ÎH,使得在训练样例上h的错误率比h’小,但在整个实例分布上h’的错误率比h小,那么就说假设h过度拟合训练数据。
产生过拟合的原因:
³ 一种可能原因是训练样例含有随机错误或噪声
³ 当训练数据没有噪声时,过度拟合也有可能发生,特别是当少量的样例被关联到叶子节点时,很可能出现巧合的规律性,使得一些属性恰巧可以很好地分割样例,但却与实际的目标函数并无关系。
我的理解是:由于如果这样分下去的话,树太深的话,因为分的太细,很容易造成过拟合(不知道这样理解对不对)。也就是在学习的时候过多的考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。而解决这个问题的办法是下面要说的步骤三。
步骤三:对决策树进行剪枝
至于为什么要进行剪枝,上面已经提到了。下面要解决的就是什么是剪枝和怎么剪枝了。
什么是剪枝:将已经生成的树进行简化的过程称为剪枝(pruning)。
怎么剪枝:
² 修剪步骤
³ 删除以此节点为根的子树,使它成为叶结点
³ 把和该节点关联的训练样例的最常见分类赋给它
³ 反复修剪节点,每次总是选取那些删除后可以最大提高决策树在验证集合上的精度的节点
² 继续修剪,直到进一步的修剪是有害的为止
² 数据分成3个子集
³ 训练样例,形成决策树
³ 验证样例,修剪决策树
³ 测试样例,精度的无偏估计
² 如果有大量的数据可供使用,那么使用分离的数据集合来引导修剪
(btw:对于这一步没有进行深入探讨,对于损失函数理解的也不深,见谅。有时间在补上)
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- LeetCode 015 3Sum
- python 包管理系统
- 帮你理解网关、ARP、IP、MAC、路由
- Installing Python 2.7.5 on Ubuntu
- 【STL】算法 — sort
- 决策树
- [Unity3D]面试题集锦
- Linux下实时查看Tomcat运行状况
- [转]Berkeley DB简介及安装使用
- linux下IPTABLES配置详解
- Java实现数字转化成字符串左边自动补零方法(流水号)
- oracle最常用简单函数
- epoll使用详解(精髓)
- android Notification深入