决策树(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 => 确定性事件没有什么有价值的东西(足够确定,不混乱)

,表示数据属于第类出现的概率

例子 摘自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)


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)

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

你可能感兴趣的:(决策树(Decision Tree))