决策树
来源:互联网 发布:数据资产管理2017 编辑:程序博客网 时间:2024/06/15 09:32
决策树是一种基本的分类和回归方法,本文主要讨论用于分类的决策树,在分类问题中,表示基于特征对实例进行分类的过程。决策树可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布,学习时,利用训练数据,根据损失函数最小化原则建立决策树,决策树学习主要包括3个步骤:特征选择,决策树的生成和决策树的修剪。
1.特征选择
特征选择在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习的效率。如果利用一个特征进行分类的结果与随机分类的结果没有很大的差别,那么这个特征是没有分类能力的,经验上这个特征是可以舍弃的,所以要对特征的分类能力进行测量以表明其分类能力,通常特征选择的准则是信息增益或信息增益比。
1.1信息增益
在此之前给出熵和条件熵的定义:
设X是一个取得有限值的离散随机变量,其概率分布
则随机变量X的熵定义为
设有随机变量(X,Y),其联合概率分布为
信息增益:特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A在给定条件下D的经验条件熵之差,表示得知特征X的信息而使类Y的信息的不确定性减少的程度,即
求以下各特征的信息增益:
由于
然后计算H(speed|speed limit)=
so,g(D,A)=H(speed)-H(speed|speed limit)=1-0=1
所以特征speed limit可以将数据集完全分开,决策树完成。
1.2 信息增益比
以信息增益作为划分训练数据集的特征,存在偏向于选取值较多的特征,使用信息增益比对此校正。
2.决策树的生成
2.1 ID3算法
ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归地构建决策树。具体为从根节点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值构建子节点;再对子节点递归的调用以上方法,构建决策树。ID3相当于用极大似然法进行概率模型的选择。
ID3算法
输入:训练数据集D,特征集A,阈值
输出:决策树T。
1. 若D中的所有实例属于同一个类
2. 若A为空,则T为单节点树,并将D中实例最大的类
3. 否则,计算A中所有特征对D的信息增益,选择信息增益最大的特征
4. 如果
5. 否则,对
6. 对第i个子节点,以
2.2 C4.5的生成算法
c4.5算法对ID3算法进行了改进,在c4.5的生成过程中,用信息增益比来代替信息增益,其余都是一样。
ID3算法
输入:训练数据集D,特征集A,阈值
输出:决策树T。
1. 若D中的所有实例属于同一个类
2. 若A为空,则T为单节点树,并将D中实例最大的类
3. 否则,计算A中所有特征对D的信息增益比,选择信息增益比最大的特征
4. 如果
5. 否则,对
6. 对第i个子节点,以
3.决策树的剪枝
决策树生成算法递归的产生决策树,这样产生的决策树往往对分类数据很准确,但对未知的测试数据的分类确没有那么准确,即出现过拟合现象。过拟合的原因在于学习时过多的考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树,解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化。
在决策树学习中将已生成的树进行简化的过程叫做剪枝,具体的,剪枝从已生成的树上裁掉一些子树或叶节点,并将其根节点或父节点作为新的叶节点,从而简化分类树模型。
决策树的剪枝往往通过极小化决策树整体损失函数或代价函数来实现。设树T的叶节点个数为|T|,t是树T的叶节点,该叶节点有
其中经验熵为
剪枝,就是当
树的剪枝算法
输入:生成算法形成的整个树T,参数
输出:修剪后的子树
- 计算每个节点的经验熵
- 递归的从树的叶节点向上回缩,设一组叶节点回缩到其父节点之前与之后的整体书分别为
TB 与TA ,其对应的损失函数分别为Cα(TB) 和Cα(TA) ,如果则进行剪枝,即父节点变成新的叶节点$Cα(TA)$<=$Cα(TB) - 返回(2),直到不能继续为止,得到损失函数最小的子树
Tα 。
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- 决策树
- wireshark在mac上使用时到遇到:no interface can be used for capturing in this system with the current configur
- 修改MySQL用户的权限
- VS+opencv鼠标移动图片
- jquery函数写法和js比较
- SparseArray替代HashMap来提高性能
- 决策树
- Android 调节屏幕亮度
- 字典排序
- Java并发编程:阻塞队列
- jquery原生操作和链式操作
- 透明度设置技巧
- UVA11426
- ajax 下载问题
- HDU 1087 Super Jumping! Jumping! Jumping![动态规划——最大递增子序列]