西瓜书+南瓜书 第4章 决策树

142 阅读2分钟

1. 决策树基本概念

决策树是一种基于树状结构进行决策的分类和回归模型。通过对数据进行属性测试,将样本分成不同的类别,最终形成叶子节点。每个非叶节点表示一个属性测试,每个叶子节点表示一个分类结果。

2. 决策树的构造

决策树的构造是一个递归过程,分为以下几个步骤:

  • 根节点:选择一个最优属性作为根节点。
  • 属性选择:对于每个内部节点,选择一个最优属性进行测试。
  • 递归划分:对选定属性的每个可能结果,递归地构建子树。
  • 停止条件:当满足以下任一条件时停止:
    • 当前节点包含的样本全属于同一类别。
    • 当前属性集为空或所有样本在所有属性上取值相同。
    • 当前节点包含的样本集合为空。

选择划分属性的目标是使得子节点尽可能纯,即同类样本尽可能多。 常用的决策树算法有ID3、C4.5和CART。

2.1 ID3算法

ID3算法通过信息增益选择划分属性。信息增益基于信息熵计算:

Entropy(D)=k=1ypklog2(pk)Entropy(D) = - \sum_{k=1}^{|y|} p_k \log_2(p_k)

其中,pkp_k 表示第 kk 类样本在数据集 DD 中的概率。

信息增益定义为划分前后的信息熵差值:

Gain(D,a)=Entropy(D)vValues(a)DvDEntropy(Dv)Gain(D, a) = Entropy(D) - \sum_{v \in Values(a)} \frac{|D_v|}{|D|} Entropy(D_v)

其中, DvD_v 是在属性 aa 上取值为 vv 的子集, Values(a)Values(a) 是属性 aa 的所有可能取值。

2.2 C4.5算法

C4.5算法通过增益率选择划分属性,以避免偏向于取值较多的属性。增益率定义为:

Gain_ratio(D,a)=Gain(D,a)Split_info(D,a)Gain\_ratio(D, a) = \frac{Gain(D, a)}{Split\_info(D, a)}

其中, Split_info(D,a)Split\_info(D, a) 定义为:

Split_info(D,a)=vValues(a)DvDlog2(DvD)Split\_info(D, a) = - \sum_{v \in Values(a)} \frac{|D_v|}{|D|} \log_2 \left( \frac{|D_v|}{|D|} \right)

2.3 CART算法

CART决策树使用基尼指数来选择划分属性,基尼指数反映了随机抽取两个样本类别不一致的概率:

Gini(D)=1k=1ypk2Gini(D) = 1 - \sum_{k=1}^{|y|} p_k^2

属性 aa 的基尼指数为:

Gini_index(D,a)=vValues(a)DvDGini(Dv)Gini\_index(D, a) = \sum_{v \in Values(a)} \frac{|D_v|}{|D|} Gini(D_v)

3. 剪枝处理

决策树容易出现过拟合现象,通过剪枝可以缓解这种情况。剪枝策略包括预剪枝和后剪枝。

3.1 预剪枝

在构造过程中评估节点是否需要分支,如果分支对模型性能没有提升,则不进行分支。

3.2 后剪枝

构造完整决策树后,从底向上评估分支的必要性,如果分支对模型性能没有提升,则剪掉该分支。

4. 连续值与缺失值处理

4.1 连续值处理

对连续值属性进行离散化处理,常用的方法是二分法,选择最优划分点进行划分。

4.2 缺失值处理

对缺失值的处理方法包括:

  1. 通过样本子集计算信息增益。
  2. 将样本按权重划分到各个分支中。

参考文献: