决策树(Decision Tree)

参考资料:
《西瓜书》 p73-p95
《百面机器学习》 p80-89
《统计学习方法》 p55-p75
《机器学习_ 学习笔记 (all in one)V0.96》 p622-p650
《Decision Tree - Super Attributes》http://www.saedsayad.com/decision_tree_super.htm
决策树算法原理(上) https://www.cnblogs.com/pinard/p/6050306.html
决策树算法原理(下) https://www.cnblogs.com/pinard/p/6053344.html
StatQuest: Decision Trees: https://www.youtube.com/watch?v=7VeUPuFGJHk

关键词

无参、监督学习、分类、回归、ID3、C4.5、CART

基本概念

  • 定义:
    决策树就是一棵树,它以树的形式来构建分类或者回归模型,其思想在于分而治之,通过遵循树中从根(开始)到叶节点的决策来预测目标变量的值或对其进行分类。

  • 术语:
    根结点、内部节点、叶节点

一棵树.png
  • 决策树学到的是什么:
    if-then规则集,根结点到叶节点的每一条路径为一条规则,路径中分支的特征反映其规则的条件,规则之间互斥且完备

  • 如何构造一颗决策树:(摘自Jim Liang笔记)
    Strategy: top-down Recursive divide-and-conquer fashion

    1. First: select attribute for the root node
      Create a branch for each possible attribute value
    2. Then: split instances into subsets
      One for each branch extending from the node
    3. Finally: repeat recursively for each branch, using only instances that reach the branch

    Stop if all instances have the same class

  • 决策树构建的关键问题
    决策树生成和决策树剪枝

决策树生成

决策树生成主要需要考虑的就是特征选择问题和何时停止树木构建的问题。

  • 何时停的问题,比较容易解决,就是看被分到同一个分支下的子集之间的类别是否完全统一,若已经统一,则可以停止继续划分,若还是有不同的类,则对该子集继续选择特征生成树枝。
    when to terminate:
    (1) hit a pure class
    (2) run out of attributes (另一种情况)

  • 特征选择,不同的算法有不同的准则。三种主要算法(ID3, C4.5, CART)对应不同的启发策略

ID3, C4.5, CART尽管使用不同的启发策略,但是其使用的思想还是一样的(CART的的纯度思想类似于信息墒),这个思想就是信息论里面的墒思想。

墒(Entropy): 衡量事物的不确定性指数,a measure of disorder or uncertainty

信息墒(Information entropy):消息中包含的信息的平均量,可以理解为某条数据包含多少信息内容,the average amount of information produced by a stochastic source of data. Generally, information entropy is the average amount of information conveyed by an event

小概率事件包含的信息墒比大概率事件包含的信息墒多 More uncertainty, more entropy!
直观理解举例: Event e ~ I(e) is its entropy if P(e)=1 I(e) = 0 => 确定性事件没有什么有价值的东西(足够确定,不混乱)

\text { Entropy }=-\sum_{i=1}^{n} p_{i} \log _{2} p_{i}

p_{i} = P(X=x_{i}) ,表示数据属于第i类出现的概率

例子 摘自Jim Liang笔记 .png

抛硬币例子: I(x) = -0.5 * log0.5 - 0.5 * log0.5= 1

使用墒作为准则.png

ID3:

昆兰大神用信息论中的熵来度量决策树的决策选择过程

信息增益(Information Gain)
Information Gain = Entropy(before) - Entropy(after)

简单的理解来说,信息增益就是通过得到了数据的一部分特征信息后导致原有数据混乱程度的降低,在决策树里面可以使用这样一个衡量指数作为寻找最优特征的启发准则。

Constructing a decision tree is all about finding attribute that returns the highest information gain

个人觉得书籍里说的关于经验条件墒之类的太过于抽象,其实主要的思想就是如下:

information Gain 摘自Jim Liang笔记.png
to be continued.png

所以ID3算法的核心思想就是通过信息增益来寻找最优的特征,
可以从第一步开始通过计算原始数据的墒作为初始信息墒,通过计算根据每个特征得到的数据集合的墒,查看哪一个特征导致的信息增益最大,依据此作为根结点的确定,后续根据相同的准则来完成决策树的生长。

决策树实现(ID3):
1.判断样本是否为同一类输出Di,如果是则返回单节点树T,标记类别为Di  --- 停止的条件1
2.判断特征是否为空,如果是则返回单节点树T,标记类别为样本中输出类别D实例数最多的类别 -- 停止的条件2
3.计算样本中各个特征的信息增益,选择最大的特征作为条件,按照其特征不同的取值将对应的样本分成不同的类别,每一个类别为一个分支
4.对于所有的分支,递归调用1-3步,得到子树
  • ID3存在问题:
    1. 连续特征无法适用
    2. 特征取值偏好(相同条件下,优先选取特征值多的特征)
    3. 缺失值的情况无法处理
    4. 过拟合问题

C4.5:

  • 由来:解决ID3存在的4个问题
连续特征问题解决:

C4.5决策树算法[Quinlan,1993]采用的二分法(bi-partition)机制来处理连续属性。对于连续属性a,首先将n个不同取值进行从小到大排序,选择相邻a属性值的平均值t作为候选划分点,划分点将数据集分为两类,因此有包含n-1个候选划分点的集合,分别计算出每个划分点下的信息增益,选择信息增益最大的点作为该连续特征的二元离散分类点,根据此做到了连续值的离散划分。
(摘自 https://www.zhihu.com/question/63762734/answer/512747829

特征选取偏好问题解决:

信息增益率(Information Gain Ratio)
\text {GainRatio}(A)=\frac{\text {Gain}(A)}{\text {SplitInfo}(A)}

\text {SplitInfo}_{A}(D)=-\sum_{j=1}^{v} \frac{\left|D_{j}\right|}{|D|} \times \log _{2}\left(\frac{\left|D_{j}\right|}{D}\right)
splitting the training data set D into v partitions, corresponding to v outcomes on attribute A

直观计算splitinfo.png
  • ID3特征选取偏好细节:对可取值数目较多的属性有所偏好,例如一个属性有几十个取值,每一个取值只有一个元素,最后表现出来其信息增益很大(信息增益偏向于支持有着许多结果的特征
    The information gain equation, G(T, X) is biased toward attributes that have a large number of values over attributes that have a smaller number of values. These ‘Super Attributes’ will easily be selected as the root, resulting in a broad tree that classifies perfectly but performs poorly on unseen instances.(摘自http://www.saedsayad.com/decision_tree_super.htm

举个例子,对于多值特征(极端情况下,unique id)这时候按照信息增益切分后各个分支都是纯的,熵最小,为0 ,信息增益最大,但是这种切分没有意义
https://www.youtube.com/watch?v=rb1jdBPKzDk

摘自[http://www.saedsayad.com/decision_tree_super.htm] .png

  • 信息增益率的本质
    在信息增益的基础上除以一个惩罚参数,当特征个数较多的时候,惩罚参数较大,信息增益率减少较大,当特征个数较少的时候,惩罚参数较小,信息增益率减少较小

  • 信息增益率带来的问题:
    根据定义不难看出来,信息增益率会偏向取值比较小的特征

  • 权衡:C4.5算法并不是直接选择信息增益率最大的特征作为节点进行属性划分,而是首先从候选划分中选择信息增益高于平均水平的,再从中选择信息增益率最大的(两步操作)。

缺失值问题解决:

未完待续。。。。

过拟合问题解决

剪枝(后续有细节描述)

  • C4.5 依旧存在的不足:
    1. 只适用于分类问题
    2. 熵模型有大量的耗时的对数运算,对于连续值有大量的排序运算
决策树实现(C4.5):
1.判断样本是否为同一类输出Di,如果是则返回单节点树T,标记类别为Di  --- 停止的条件1
2.判断特征是否为空,如果是则返回单节点树T,标记类别为样本中输出类别D实例数最多的类别 -- 停止的条件2
3.计算样本中各个特征的信息增益比,选择最大的特征作为条件,按照其特征不同的取值将对应的样本分成不同的类别,每一个类别为一个分支(这里会有连续特征和缺失问题的处理)
4.对于所有的分支,递归调用1-3步,得到子树

CART:(Classification and Regression Tree)

CART分类树

解决问题:ID3还是C4.5都是基于信息论的熵模型的,其中涉及大量的对数运算。

CART采用Gini指数作为特征选择的策略,Gini(D)越小,数据集D的纯度越高,所以在特征选择的过程中,选取全部累加起来后最小的作为节点,最小化不纯度,和最大化信息增益(ID3,C4.5)正好相反。

基尼指数(Gini index)
\operatorname{Gini}(p)=\sum_{k=1}^{K} p_{k}\left(1-p_{k}\right)=1-\sum_{k=1}^{K} p_{k}^{2}

Gini index example(不知道那个之前在哪个网页看见的,随手截下,侵删).png
  • CART算法仅对特征的值进行二分,而不是多分,因此得到的决策树是一颗二叉树。(目的,1.简化基尼系数的计算,2.建立一个更加优雅的二叉树模型)

CART中连续值的处理:bi-partition + gini index(思想和C4.5相同,但是使用度量方式不一样)

分类决策树实现(CART):
1.判断样本是否为同一类输出Di,如果是则返回单节点树T,标记类别为Di  --- 停止的条件1
2.判断特征是否为空,如果是则返回单节点树T,标记类别为样本中输出类别D实例数最多的类别 -- 停止的条件2
3.计算样本中各个特征的基尼系数(这里会有连续特征和缺失问题的处理)
4.在计算出来的各个特征的各个特征值对数据集D的基尼系数中,选择基尼系数最小的特征A和对应的特征值a。根据这个最优特征和最优特征值,把数据集划分成两部分D1和D2,同时建立当前节点的左右节点,做节点的数据集D为D1,右节点的数据集D为D2.
5.对于所有的分支,递归调用1-4步,得到子树


3.4的解读:有稍许的不同,原因在于CART做的的是二分处理,即使特征有多个值,其也是进行一个二分的处理方式

举个例子:
如果某个特征A被选取建立决策树节点,如果它有A1,A2,A3三种类别,
CART分类树会考虑把A分成
{A1}和{A2,A3} 
{A2}和{A1,A3}
{A3}和{A1,A2}
在这三种情况中找到基尼系数最小的组合,比如{A2}和{A1,A3}
然后建立二叉树节点,一个节点是A2对应的样本,另一个节点是{A1,A3}对应的节点。同时,由于这次没有把特征A的取值完全分开,后面还有机会在子节点继续选择到特征A来划分A1和A3。这和ID3或者C4.5不同,在ID3或者C4.5的一棵子树中,离散特征只会参与一次节点的建立。
https://www.cnblogs.com/pinard/p/6053344.html

CART 回归树

CART回归树和分类树算法比较类似,不同的地方在于最后的输出以及特征选择时候的度量方式。

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