Decision Tree
Decision Tree Hypothesis
- 条件化融合——决策树
- 模仿人类做决策的过程
G ( x ) = ∑ t q t ( x ) g t ( x ) G(\bold x) = \sum_t q_t(\bold x) g_t(\bold x) G(x)=t∑qt(x)gt(x)
- 其中,
- g t ( x ) g_t(\bold x) gt(x)为基本的假设,位于路径 t t t的叶子节点,是一个常数
- q t ( x ) q_t(\bold x) qt(x)为条件,表示 x \bold x x是否在路径 t t t上
- 决策树中包含简单的决策节点
- 路径的视角的定义:
G ( x ) = ∑ t [ [ x on path t ] ] ⋅ leaf t ( x ) G(\bold x) = \sum_t [[\bold x \text{ on path } t]] \cdot \operatorname{leaf}_t(\bold x) G(x)=t∑[[x on path t]]⋅leaft(x)
- 一种递归的定义:
- b ( x ) b(\bold x) b(x)表示当前决策下的哪一个分支
- G c ( x ) G_c(\bold x) Gc(x)表示在当前分支下的子树的决策假设(递归定义)
G ( x ) = ∑ c [ [ b ( x ) = c ] ] ⋅ G c ( x ) G(\bold x) = \sum_c [[b(\bold x) = c]] \cdot G_c(\bold x) G(x)=c∑[[b(x)=c]]⋅Gc(x)
- 优势
- 可解释性强
- 十分的简单
- 训练和预测的效率都比较搞
- 劣势
- 理论保证比较少
- 初学者在处理启发式选择时很难
- 没有代表性的决策树算法
Decision Tree Algorithm
- 由递归定义得到算法(未指明终止条件,否则返回基本假设
g
t
(
x
)
g_t(\bold x)
gt(x))
- 学习分支确定 b ( x ) b(\bold x) b(x)(最小分支误差)
- 按照分支将数据进行分割,得到 D c \mathcal D_c Dc
- 使用 D c \mathcal D_c Dc建立子树
- 返回最终模型: G ( x ) = ∑ c [ [ b ( x ) = c ] ] ⋅ G c ( x ) G(\bold x) = \sum_c [[b(\bold x) = c]] \cdot G_c(\bold x) G(x)=∑c[[b(x)=c]]⋅Gc(x)
- CART:
- 二叉树
- 叶子节点
g
t
(
x
)
g_t(\bold x)
gt(x)是一个常数
- 反应最佳 E i n E_{in} Ein
- 分类:最多的 y n y_n yn
- 回归: y n y_n yn的平均
- 内部决策节点使用决策桩切分
- 通过纯化程度决定分支
- 纯度分析(下述为不纯度):
- 对回归任务,定义误差为 1 N ∑ n ( y n − y ˉ ) 2 \frac 1N \sum_n (y_n - \bar y)^2 N1∑n(yn−yˉ)2,其中 y ˉ \bar y yˉ表示分支内所有 y n y_n yn的平均
- 对分类任务,定义误差为 1 N ∑ n [ [ y n ≠ y ∗ ] ] \frac 1N \sum_n [[y_n \neq y^\ast]] N1∑n[[yn=y∗]],其中 y ∗ y^\ast y∗表示分支内占多数的 y n y_n yn
- 对于分类,上述定义的误差(不纯度)只考虑了占多数的类别,应当考虑所有类别,因此定义Gini系数: 1 − ∑ k ( ∑ n [ [ y n = k ] ] N ) 2 1 - \sum_k \left( \frac {\sum_n[[y_n = k]]}{N}\right)^2 1−∑k(N∑n[[yn=k]])2
- 终止条件
- 不纯度为0——当前分支所有标签都一样
- 所有的样本特征都一样——无法进行决策桩算法
- 上述两种均为被迫中止的情形——完全生成树——依据纯度生成的二叉树,其叶子数目为常数
Decision Tree Heuristics in C&RT
- 易于从二分类扩展为多分类
- 对于完全生成的CART:如果
x
n
\bold x_n
xn都不同,那么必然有
E
i
n
(
G
)
=
0
E_{in}(G) = 0
Ein(G)=0
- 这样就会有非常大的过拟合风险——低阶子树都是根据一些非常小的 D c \mathcal D_c Dc建立的
- 需要一个正则化项,比如限制叶子节点的数量 Ω ( G ) \Omega(G) Ω(G)
- 目标改进:
arg
min
G
E
i
n
(
G
)
+
λ
Ω
(
G
)
\arg\min_G E_{in}(G) + \lambda \Omega(G)
argminGEin(G)+λΩ(G)
- 被剪枝的决策树
- λ \lambda λ的选择——Validation
- 对
G
G
G很难进行枚举
- 首先建立一个完全生成树
- 不断地递归,每一次减去所有可剪去分支中 E i n ( G ) E_in(G) Ein(G)最小的
- 对于数值特征,我们可以直接使用数值的决策桩算法: b ( x ) = [ [ x i ≤ θ ] ] + 1 b(\bold x) = [[x_i \le \theta]] + 1 b(x)=[[xi≤θ]]+1
- 对于类别特征,使用抓门的决策桩算法(子集划分): b ( x ) = [ [ x i ∈ S ] ] + 1 b(\bold x) = [[x_i \in S]] + 1 b(x)=[[xi∈S]]+1
- 包括CART在内的决策树可以很好地处理类别特征
- 如果预测的时候,一些特征值丢失?
- 替代分支,与丢失特征的切割类似
Decision Tree in Action
- 与AdaBoost有很大不同:前者对特征的分割是基于既有分割实现的,后者是对整个样本的不同特征分别考虑和分割
- 优势:
- 人可解释
- 可以轻易处理多类别
- 对类别特征很容易处理
- 出现特征值残缺时,可以使用替代搜索
- 有效的非线性徐连