决策树

决策树(Decision Tree)

定义:

  • 决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

  • 参考示例:

    女儿:多大年纪了?
    母亲:26。
    女儿:长的帅不帅?
    母亲:挺帅的。
    女儿:收入高不?
    母亲:不算很高,中等情况。
    女儿:是公务员不?
    母亲:是,在税务局上班呢。
    女儿:那好,我去见见。

graph TD

A((年龄)) --> |<=30| C((长相))

A((年龄)) --> |>30| B((不见))

C --> |帅或中等|E((收入))

C --> |丑|D((不见))

E --> |高|F((见))

E --> |中等|G((公务员))

E --> |低|H((不见))

G --> |不是|I((不见))

G --> |是|J((见))

  • 上面是一个简单的决策树示例,可以看出决策树比较直观,容易让人理解
决策树的构造
  • 不同于贝叶斯算法,决策树的构造过程不依赖领域知识,它使用属性选择度量来选择将元组最好地划分成不同的类的属性。所谓决策树的构造就是进行属性选择度量确定各个特征属性之间的拓扑结构。

  • 构造决策树的关键步骤是分裂属性。所谓分裂属性就是在某个节点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂子集尽可能地“纯”。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别。分裂属性分为三种不同的情况:

  • 1、属性是离散值且不要求生成二叉决策树。此时用属性的每一个划分作为一个分支。

  • 2、属性是离散值且要求生成二叉决策树。此时使用属性划分的一个子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支。

  • 3、属性是连续值。此时确定一个值作为分裂点split_point,按照>split_point和<=split_point生成两个分支。

  • 构造决策树的关键性内容是进行属性选择度量,属性选择度量是一种选择分裂准则,是将给定的类标记的训练集合的数据划分D“最好”地分成个体类的启发式方法,它决定了拓扑结构及分裂点split_point的选择。

  • 属性选择度量算法有很多,一般使用自顶向下递归分治法,并采用不回溯的贪心策略。这里介绍ID3和C4.5两种常用算法。

  • 信息增益

  • 定义:划分信息之前、之后发生的变化叫做信息增益

  • 度量方式:香农熵、熵(entropy)

  • 公式:$H(D)=-\sum_{i=1}^mp_ilog_2(p_i)$

  • $p_i$表示第i个类别在整个训练集中出现的概率,可以用属于此类别元素的数量除以训练元组元素总数量作为估计

ID3算法
  • 从信息论知识中我们直到,期望信息越小,信息增益越大,从而纯度越高。

  • 以信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂。

ID4.5算法
  • ID3算法存在一个问题,就是偏向于多值属性,例如,如果存在唯一标识属性ID,则ID3会选择它作为分裂属性,这样虽然使得划分充分纯净,但这种划分对分类几乎毫无用处。

  • ID3的后继算法C4.5使用增益率(gain ratio)的信息增益扩充,试图克服这个偏倚。

补充说明

  • 如果属性用完了怎么办

在决策树构造过程中可能会出现这种情况:所有属性都作为分裂属性用光了,但有的子集还不是纯净集,即集合内的元素不属于同一类别。在这种情况下,由于没有更多信息可以使用了,一般对这些子集进行“多数表决”,即使用此子集中出现次数最多的类别作为此节点类别,然后将此节点作为叶子节点。

  • 关于剪枝

  • 在实际构造决策树时,通常要进行剪枝,这时为了处理由于数据中的噪声和离群点导致的过分拟合问题。剪枝有两种:

  • 先剪枝——在构造过程中,当某个节点满足剪枝条件,则直接停止此分支的构造。

  • 后剪枝——先构造完成完整的决策树,再通过某些条件遍历树进行剪枝。

  • 关于剪枝的具体算法这里不再详述,有兴趣的可以参考相关文献。

参考

  • 算法杂货铺——分类算法之决策树(Decision tree)

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