4. Decision Tree
一般的,一颗决策树包含一个根结点、若干内部结点和若干叶结点;叶节点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集。从根结点到每个叶子结点的路径对应了一个判定测试序列。决策树学习的目的是为了产生一颗泛化能力强,即处理位见示例能力强的决策树,其基本流程遵循简单且直观的“分而支之”策略:

在决策树算法中,有3种情况会导致递归返回:
- 当前节点包含的样本属于同一类,无需划分
- 当前节点属性集为空,或是所有样本在所有属性上取值相同,无法划分
- 当前节点包含的样本集合为空,不能划分
划分选择:
1. information gain 信息增益 $a_{\star} = \arg\max\limits_{a\in{A}} Gain(D, a)$
information entropy信息熵是度量样本集合纯度最常用的指标。假定当前样本集合$D$中第$k$类样本所占比例为$p_k(k=1,2,...,\lvert{y}\rvert)$,则$D$的information entropy是
$Ent(D) = - \sum_{k=1}^{\lvert{y}\rvert}p_klog_2^{p_k}$
$Ent(D)$的值越小,则$D$的纯度越高
那么对于$D$的各个结点$D_v$,我们可以算出$D_v$的information entropy,再考虑到不同的分支结点所包含的样本数不均匀,给分支赋予权重$\frac{\lvert{D_v}\rvert}{\lvert{D}\rvert}$,这样得到information gain:
$Gain(D,a_{\star}) = Ent(D) - \sum_{v=1}^{V} \frac{\lvert{D_v}\rvert}{\lvert{D}\rvert}Ent(D_v)$
一般来说 infoermation gain 越大,意味着使用属性$a$ 来进行划分所得“纯度提升”越大。这种分裂方式对于可取值数目较多的属性有所偏好。
2. gain ratio 增益比 $a_{\star} = \arg\max\limits_{a\in{A}} Gain\_ratio(D, a)$
$Gain\_ratio(D, a) = \frac{ Gain(D, a)}{IV(a)}$
$IV(a) = - \sum_{v=1}^{V} \frac{\lvert{D_v}\rvert}{\lvert{D}\rvert}log_2{\frac{\lvert{D_v}\rvert}{\lvert{D}\rvert}}$
需要注意的是:实际使用gain ratio时:先从候选划分属性中找到信息增益高于平均水平的属性,再从中选择增益比最高的。这种分裂方式对可取值数目较少的属性有所偏好.
3. CART Gini index基尼指数 $a_{\star} = \arg\min\limits_{a\in{A}} Gini\_index\_ratio(D, a)$
$Gini(D) = \sum_{k=1}^{\lvert{y}\rvert} \sum_{k^{,}\neq{k}}p_kp_{k^{,}} = 1-\sum_{k=1}^{\lvert{y}\rvert}p_k^2$
$Gini\_index(D,a) = \sum_{v=1}^{V} \frac{\lvert{D_v}\rvert}{D}Gini(D_v)$
CART与传统DT相比,分裂中只有两个结点。
4. Decision Tree的更多相关文章
- Spark MLlib - Decision Tree源码分析
http://spark.apache.org/docs/latest/mllib-decision-tree.html 以决策树作为开始,因为简单,而且也比较容易用到,当前的boosting或ran ...
- 决策树Decision Tree 及实现
Decision Tree 及实现 标签: 决策树熵信息增益分类有监督 2014-03-17 12:12 15010人阅读 评论(41) 收藏 举报 分类: Data Mining(25) Pyt ...
- Gradient Boosting Decision Tree学习
Gradient Boosting Decision Tree,即梯度提升树,简称GBDT,也叫GBRT(Gradient Boosting Regression Tree),也称为Multiple ...
- 使用Decision Tree对MNIST数据集进行实验
使用的Decision Tree中,对MNIST中的灰度值进行了0/1处理,方便来进行分类和计算熵. 使用较少的测试数据测试了在对灰度值进行多分类的情况下,分类结果的正确率如何.实验结果如下. #Te ...
- Sklearn库例子1:Sklearn库中AdaBoost和Decision Tree运行结果的比较
DisCrete Versus Real AdaBoost 关于Discrete 和Real AdaBoost 可以参考博客:http://www.cnblogs.com/jcchen1987/p/4 ...
- 用于分类的决策树(Decision Tree)-ID3 C4.5
决策树(Decision Tree)是一种基本的分类与回归方法(ID3.C4.5和基于 Gini 的 CART 可用于分类,CART还可用于回归).决策树在分类过程中,表示的是基于特征对实例进行划分, ...
- OpenCV码源笔记——Decision Tree决策树
来自OpenCV2.3.1 sample/c/mushroom.cpp 1.首先读入agaricus-lepiota.data的训练样本. 样本中第一项是e或p代表有毒或无毒的标志位:其他是特征,可以 ...
- GBDT(Gradient Boosting Decision Tree)算法&协同过滤算法
GBDT(Gradient Boosting Decision Tree)算法参考:http://blog.csdn.net/dark_scope/article/details/24863289 理 ...
- Gradient Boost Decision Tree(&Treelink)
http://www.cnblogs.com/joneswood/archive/2012/03/04/2379615.html 1. 什么是Treelink Treelink是阿里集团内部 ...
- (转)Decision Tree
Decision Tree:Analysis 大家有没有玩过猜猜看(Twenty Questions)的游戏?我在心里想一件物体,你可以用一些问题来确定我心里想的这个物体:如是不是植物?是否会飞?能游 ...
随机推荐
- Json---使用Jsoncpp解析与写入
上述Json解析使用的是Jsoncpp,要使用Jsoncpp,得做如下几步的配置: 1.首先从http://sourceforge.net/projects/jsoncpp/下载,压缩包大约105k. ...
- 统一配置管理-百度disconf
之前一直采用properties文件管理配置信息,若是集群则每个机器上都要拷贝一份,每次修改也需要依次修改.一直在寻找统一修改,实时生效,方便修改,分环境分系统的配置管理,自己也在整理设计,若找不到合 ...
- 取两个DataTable的交集,删除重复数据
/// <summary> /// 取两个DataTable的交集,删除重复数据 /// </summary> /// <param name="sourceD ...
- iOS NSOperation 封装 通知实现界面更新
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface MYOperation : NSOpe ...
- jquery 使用需要注意
jquery选择器,层选择器等多个选择器,jquery生成对象,jquery遍历对象, jquery ajax调用不要进行方法封装返回值方式调用,会取不到值. jquery使用要注意很多细节点才能将其 ...
- 【转】oracle 中随机取一条记录的两种方法
oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...
- Kinect的那些事儿
Kinect结合Unity3d跑酷游戏体感Demo 今天收拾东西,在柜子的翻出了一台崭新的Kinect,说起来真是惭愧,大学毕业那会儿,慈老师(和名字一位慈祥的好老师,也是我的毕业设计指导老师)赞 助 ...
- Java直接(堆外)内存使用详解
本篇主要讲解如何使用直接内存(堆外内存),并按照下面的步骤进行说明: 相关背景-->读写操作-->关键属性-->读写实践-->扩展-->参考说明 希望对想使用直接内存的朋 ...
- python练习
创建一个简单的姓名和编号系统,让用户输入一组人的姓名和编号,实现提供按照编号或姓名排序输出的功能. nums = [] names = [] Afternums = [] Afternames = [ ...
- Linux下redis的安装
第一部分:安装redis 希望将redis安装到此目录 /usr/local/redis 希望将安装包下载到此目录 /usr/local/src 那么安装过程指令如下: $ mkdir /usr/lo ...