决策树(ID3 & C4.5 & CART)

一. 导语:

决策树(Decision Tree)的思想是贪心(最优化分)分治(子树划分)。构建决策树的目的是:随着划分过程的进行,使得决策树分支结点所包含的样本尽可能属于同一类别,即使得分类更准确。

决策树还是比较基础的分类算法,这篇文章主要用于记录自己的学习过程。文中尽量减少了数学公式,由于LaTeX公式导入有点问题,所以本文的公式都用的是在word中编辑后截图帖进来的,文字中有些数字的上下标采用的html标签,但是我发现在客户端是看可能加载不了。特意说明一下

<sub></sub>代表的是下标,<sup></sup>代表的是上标
决策树知识结构

二. 算法流程:

Input:  训练集D={(x1, y1), (x2, y2), ..., (xm, ym)};
        属性集A={a1, a2, ..., ad}.
Output: 以node为根节点的一个决策树

Process:
## 通过给定样本集D和属性集A构建决策树
TreeGenerate(D, A){
    1: 生成结点node;
    2: if D 中样本全属于同一类别C then
    3:      将node标记为 C类 叶节点; return
    4: end if
    5: if A = ∅ OR D中样本在A上取值相同 then
    6:      将node标记为叶节点,其类别标记为D中样本数最多的类; return 
    7: end if
    8: 从 A 中选择最优化分属性 a*
    9: for a* 的每一值a[i] do
   10:      为node生成一个分支; 令Dv表示D中在 a* 上取值为 a[i] 的样本子集;
   11:      if Dv is empty then
   12:          将分支结点标记为叶节点,其类别为D中样本最多的类; return
   13:      else
   14:          以 TreeGenerate(Dv, A\{a*}) 为分支结点;
   15:      end if
   16: end for
}
决策树采用递归的方式建立,从算法伪代码可知3、6、12行可导致递归返回。
  1. 当前节点包含的样本属于同一类别,无需划分
  2. 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分
  3. 当前结点包含的样本集合为空,不能划分

三. 划分选择

从伪代码中可以看到,决策树的关键在于伪代码第8行,即选择能产生最优划分的属性a*。那么我们应该以什么准则来度量“划分最优”?

3.1 信息熵

熵(entropy)是表示随机变量不确定性的度量,设D是一个取有限个值的离散随机变量,其概率分布为P(X=xk) = pk, k = 1,2,3...,n,则随机变量D的熵定义为:


其中,若pk=0,则定义0log0 = 0,式中log的底数通常以2为底或e为底,这时它们的单位分别为比特(bit)或纳特(nat)。

在机器学习任务中,信息熵是度量样本集合纯度的指标。上式对应的意义为:对应当前样本集合D中第k类样本所占的比例为pk(k=1,2,3...|y|)。Ent(D)值越小,则D的纯度越高,也可以说D中样本的确定性越高。

3.2 信息增益

假定离散属性a有V个可能取值{a1,a2,a3,...,aV},若使用a对样本D进行划分,则会产生V个分支节点,其中第v个分支结点包含了D中所有在属性a上取值为av的样本,记为Dv。信息增益就是通过度量不同分支结点所包含的样本数不同,给分支结点赋予权重|Dv|/|D|,即样本数越多的分支结点影响越大,于是信息增益(information gain)定义如下:

一般来说,信息增益越大说明使用属性a进行划分所获得的“纯度提升”越大,因此我们可以用信息增益作为一种属性划分的选择。(选择属性a进行划分后,将不再作为候选的划分属性,即每个属性参与划分后就将其从候选集中移除)

著名的ID3决策树就是采用信息增益作为最优划分选择。事实上,信息增益准则对可取值数目较多的属性有所偏好,这种偏好可能带来不良影响。

3.3 增益率

为减少信息增益准则的偏好影响,因此提出了使用“增益率”来选择最优化分。C4.5决策树就是采用这种方式来确定最优划分。增益率(gain ratio)定义为:

其中IV称为属性a的“固有值”
属性a的可能取值数目越多,则IV(a)的值越大,这样通过引入约束项,可以从一定程度上削弱“对取值多的属性”的偏好,但是同时增益率准则对可取值数目较少的属性有所偏好(是不是很尴尬)

3.4 基尼指数

CART决策树使用“基尼指数”(Gini index)来选择划分属性,数据集D的纯度可以用基尼值来度量:

直观上的理解为,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此,Gini(D)越小,则数据集D纯度越高。于是产生了基尼指数(Gini index):

于是可以选择使得基尼指数最小的属性作为最优化分属性。

四. 剪枝处理

剪枝(pruning)是解决决策树过拟合的主要手段,通过剪枝可以大大提升决策树的泛化能力。通常,剪枝处理可分为:预剪枝后剪枝

预剪枝:通过启发式方法,在生成决策树过程中对划分进行预测,若当前结点的划分不能对决策树泛化性能提升,则停止划分,并将其标记为叶节点
后剪枝:对已有的决策树,自底向上的对非叶结点进行考察,若该结点对应的子树替换为叶结点能提升决策树的泛化能力,则将改子树替换为叶结点

对于后剪枝策略,可以通过极小化决策树整体的损失函数(Cost function)来实现。设树T的叶节点个数为|T|,t是树T的叶结点,该叶节点有Nt个样本点,其中k类的样本点有Ntk个,k=1,2,...,K,Ht(T)为叶结点t上的经验熵,α≥0为参数,则决策树学习的损失函数可以定义为:


其中经验熵Ht(T)为:

令C(T)表示模型对训练数据预测误差,即模型与训练数据的拟合程度,|T|表示模型的复杂度,参数α≥0调节二者关系。
模型对训练数据预测误差

这时损失函数变为:

较大的α促使树的结构更简单,较小的α促使树的结构更复杂,α=0意味着不考虑树的复杂度(α|T|就是正则项,加入约束,使得模型简单,避免过拟合)。

Input: 生成算法产生的整个决策树T,参数α
Output: 剪枝后的子树T’

Process:
1: 计算每个结点的经验熵
2: 递归地从树的叶结点向上回缩(参考下图)
    设一组叶结点回缩到父结点之前与之后的整体树分别为T1于T2,
    其对应的损失函数值分别为Cα(T1)和Cα(T2),
    if Cα(T1)≤Cα(T2) then
      进行剪枝(pruning)
    end if
3: 返回第2步,直至不能继续为止,得到损失函数最小的子树T’

由于是自底向上的剪枝,因此可以用动态规划(DP)实现。实际对于CART决策树还有专门针对决策树的剪枝算法,下次再补充。

文中可能会有错误,欢迎大家指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 决策树理论在决策树理论中,有这样一句话,“用较少的东西,照样可以做很好的事情。越是小的决策树,越优于大的决策树”。...
    制杖灶灶阅读 5,840评论 0 25
  • 博客园:http://www.cnblogs.com/wxquare/p/5379970.html ID3(多叉树...
    闫阿佳阅读 1,998评论 0 0
  • 积跬步以致千里,积怠惰以致深渊 注:本篇文章在整理时主要参考了 周志华 的《机器学习》。 主要内容 决策树是机器学...
    指尖上的魔术师阅读 1,383评论 0 5
  • (图片来源网络) 1. 章节主要内容 决策树是机器学习的一类常见算法,其核心思想是通过构建一个树状模型来对新样本进...
    闪电随笔阅读 5,239评论 3 14
  • 决策树是机器学习中非常经典的一类学习算法,它通过树的结构,利用树的分支来表示对样本特征的判断规则,从树的叶子节点所...
    arrnos阅读 5,801评论 0 3