第四章 决策树

基本流程

决策树是一种常用的机器学习方法,过程类似于树状结构每一层通过对属性进行决策来进行分类。

结构主要有:根节点(初始的所有数据集),内部节点(初步决策结果),叶节点(最终决策结果),路径(判定决策过程)。

决策树学习基本算法:

输入:训练集D,属性集A={a1,a2,...,ad}
过程:函数TreeGenerate(D,A)
  生成节点node:
  if D中样本全属于统一类别C then
    将node标记为C类叶节点;return
  end if 
  if A=空集 or D中样本在A上取值相同 then
    将node标记为叶节点,类别标记为D中最多的类;return
  end if
  从A中选择最优划分属性a*;
  for a* 的每一个取值a*v do
    为node生成一个分支;另Dv表示D在a*上取值为a*v的样本子集;
    if Dv为空 then
      将分支节点标记为叶节点,类别标记为D中最多的类;return
    else
      以TreeGenerate(Dv,A\{a*})为分支节点
    end if
  end for
输出:以node为根节点的一颗决策树

这个是一个递归过程,其中有三种情况导致递归返回:

  • 当前节点所有样本属于同一类,不用再划分
  • 当前节点属性集空,不能再划分(当前节点的后验分布)
  • 当前节点样本集为空,不能再划分(将父节点的分布当成当前节点的先验分布)

划分选择

什么样的划分属性是最优的?划分后的结点中样本的纯度因该是比划分前高的。因此,引入了信息熵即度量样本集合纯度的指标,样本集合D的信息熵定义为:
Ent(D)=-\sum^{|y|}_{k=1}p_k\log_2p_k
其中p_k为第k类样本所占的比例。信息熵的值越小,D的纯度越高。

当根据某一属性a=\lbrace a^1,a^2,\ldots,a^V\rbrace,对D进行划分后,形成的多个子结点的信息熵就是Ent(D^v)。为了比较前后的信息熵变化,定义信息增益
Gain(D,a)=Ent(D)-\sum^V_{v=1}\frac{|D^v|}{|D|}Ent(D^v)
其中\frac{|D^v|}{|D|}为每个分支点的权重。信息增益越大,就表明通过属性a划分得到的子结点的纯度提升越大。

同时注意到一个问题,信息增益作为度量的时候,对于取值数目多的属性具有偏爱性,比如样本序号(1,2,3,4,5),如果作为一种划分属性,得到的结果纯度达到100\%,但是却不具有对新样本的预测能力。因此引入增益率:
Gain_ratio(D,a)=\frac{Gain(D,a)}{IV(a)}
其中:
IV(a)=-\sum^V_{v=1}\frac{|D^v|}{|D|}\log_2\frac{|D^v|}{|D|}
但是,增益率对于取值数目少的属性具有偏爱性,因此长使用一种启发式:先挑选信息增益高于平均水平的属性,然后在选取增益率最高的属性。

CART决策树是一种著名的决策树学习算法,分类和回归任务都可用。它使用“基尼指数”来选择划分属性。D的基尼值度量为:
Gini(D)=\sum^{|y|}{k=1}\sum_{k' \not= k}p_kp'_k
=1-\sum^{|y|}_{k=1}p_k^2
指从D中随机抽取两个样本不同类的概率,越小,D的纯度越高。
属性a的基尼指数定义为:
Gini_index(D,a)=\sum_{v=1}^V \frac{|D^v|}{|D|}Gini(D^v)
使得划分后基尼指数最小的属性为最优属性。

剪枝处理

剪枝指对决策树进行枝干的修剪,为了应对过拟合现象。分为以下两种:

  • 预剪枝
    预剪枝是在决策树形成的过程中,根据结点划分是否提升决策树整体的泛化性能来决定。这种方法计算量比较小,但是因为其贪婪特性,可能导致欠拟合(一些后续划分提升泛化性能的枝,会因为初始划分不能提升泛化性能而扼杀)。
  • 后剪枝
    后剪枝是在决策树形成后,自下而上,根据非叶结点替换为叶节点是否提高决策树泛化性能来决定是否替换。这种方法计算量比较大,但是不会欠拟合,而且多数情况比预剪枝的泛化性能要强。

连续与缺失值

  • 连续值处理
    对于给定的数据集D,连续属性a=\lbrace a^1,a^2, \dots,a^n\rbrace,并不能像离散指那样直接按照取值进行划分。因此,将连续属性的所有取值进行,从小到大的排序,然后a^i,a^{i+1}之间任意的取值划分效果相同,所以候选划分点集合为:
    T_a=\lbrace \frac{a^i+a^{i+1}}2|1\leq i \leq n-1\rbrace
    然后就可以按照离散属性值一样来考察这些划分点,选取最优划分点。例如:
    Gain(D,a)=max_{t \in T_a} Gain(D,a,t)
    =max_{t \in T_a} Ent(D)-\sum_{\lambda \in \lbrace -,+\rbrace}\frac{|D^{\lambda}_t|}{|D|}Ent{D_t^\lambda}
    注意,与离散值不同的是,连续属性在划分后的后代结点还可继续划分。
  • 缺失值处理
    给定数据集D,缺失属性aD'表示属性a上没有缺失值的样本子集,D'^v表示D'在属性a上不同取值的样本子集,D'_k表示D'中的第几类样本。
    问题主要是在存在属性值缺失的情况下,选择划分属性,并且进行划分。先要进行准备工作:
    首先,每个样本初始化权重w_x(取值1),然后定义:
    \rho=\frac{\sum_{x \in D'}w_x}{\sum_{x \in D}w_x}
    p'^k=\frac{\sum_{x \in D'_k}w_x}{\sum_{x \in D'}w_x}
    r'_v=\frac{\sum_{x \in D'^v}w_x}{\sum_{x \in D'}w_x}
    根据这些式子就可以将信息增益推广:
    Gain(D,a)=\rho \times Gain(D',a)
    =\rho \times(Ent(D')-\sum^V_{v=1}r'_vEnt(D'^v))
    其中:
    Ent(D')=-\sum_{k=1}^{|y|}p'_k \log_2 p'_k
    划分的过程中,样本在属性a上的取值已知,直接划分对应的子结点,权重保持w_x,如果未知,同时划入所有子结点,权重调整为r'_v \cdot x_x

多变量决策树

多变量决策树在划分的时候不再是针对一个属性,而是针对多个属性的组合。

我们把每个属性看做一个坐标轴,d个属性的样本就对应了d维空间中的一个点,分类就相当与寻找一个边界将点划分开。决策树的划分有个特点就是,形成的划分界面是多段与坐标轴平行的线段组成(单每层单属性划分)。每一段对应了某个属性的取值,解释性强,但是运算量比较大。因此想要通过平滑的斜线来代替这些线段,这样可以简化模型,同时达到分类效果,即每次划分采用多属性的组合:
\sum^d_{i-1}w_ia_i=t
其中w_i为属性a_i的权重,t代表线性分类器,w_it都可以在该结点对应样本集和属性集上学得。

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

推荐阅读更多精彩内容

  • (图片来源网络) 1. 章节主要内容 决策树是机器学习的一类常见算法,其核心思想是通过构建一个树状模型来对新样本进...
    闪电随笔阅读 5,239评论 3 14
  • 积跬步以致千里,积怠惰以致深渊 注:本篇文章在整理时主要参考了 周志华 的《机器学习》。 主要内容 决策树是机器学...
    指尖上的魔术师阅读 1,385评论 0 5
  • [TOC] 分类基本概念、决策树与模型评估 基本概念 分类:确定对象属于哪个预定义的目标类(目标类的总体是已知的)...
    hyfine阅读 3,086评论 0 0
  • 第 3 章 决策树 [TOC] 本章内容 决策树简介 在数据集中度量一致性 使用递归构造决策树 使用 Matplo...
    凉秋_不见春暖阅读 1,643评论 1 3
  • 分层的目的其实是为了当程序某一层变动时,对其他层么有影响,这样程序就不是一坨当有改动时就会很小, 其中观察者模式就...
    freezml阅读 361评论 0 0