决策树



作者:Gauss


知乎:通俗易懂讲解决策树算法系列第一讲:决策树模型基本概念及如何构建
通俗易懂讲解决策树算法系列第二讲:ID3、C4.5和CART算法详解
通俗易懂讲解决策树算法系列第三讲:GBDT算法在回归任务中的应用

ShowMeAI:图解机器学习 | LightGBM模型详解


1 决策树构造

1.1 信息熵&信息增益

信息熵

?组数据中不确定性越?(纯度越低),熵值(entrophy)越?。 数据集中第K类样本所占的?例为\(p_k\), 则总样本的信息熵定义为:

\[Ent(D) = -\sum_{k=1}^K p_k \log_2 p_k \]

信息增益

?较各特征的信息增益,即原系统熵和引?特征分?后的系统熵的差值,信息增益越多,根节点的选择越有效。

\[Gain(D,a) = Ent(D) - \sum_{v=1}^V \frac{|D^v|}{|D|} Ent(D^v) \]

\(a\)是数据集\(D\)上的某一特征,共有\(\{a^1,...,a^V\},V\)种取值,每种取值\(v\)对应样本集\(D^v\)

这个公式可以理解为在属性\(a\)的取值已知后数据集\(D\)中类别\(k\)的不确定性减?的程度。

ID3:基于信息增益的属性划分,从根节点开始,对结点计算所有可能的特征的信息增益,选择信息增益最?的特征作为根节点的特征,由该特征的不同取值建??结点,再对?结点递归调?以上?法,构建决策树,直到所有特征的信息增益均很?或者没有特征可以选择为?。

信息增益率

信息增益对于可取值数?较多的特征有所偏好,因此引?信息增益率(gain ratio)。

?先定义特征\(a\)的固有值IV(Intrinsic Value),取值越多,IV越大。

\[IV(a) = -\sum_{v=1}^V \frac{|D^v|}{|D|} \log_2 \frac{|D^v|}{|D|} \\ GainRatio(D,a) = \frac{Gain(D,a)}{IV(a)} \]

C4.5:基于以上划分准则。且由于信息增益率对于可取值数?较少的特征有所偏好,C4.5是基于信息增益+信息增益率的属性划分:先从候选划分属性中找出信息增益?于平均?平的属性,再从中选择信息增益率最?的。

1.2 基尼指数

Gini Index。GI反应了数据集中随机抽取两个样本其标记值不?致的概率。Gini越?,数据集的纯度越?。

\[Gini(D) = \sum_{k=1}^K \sum_{k' \neq k} p_k p_{k'} = 1-\sum_{k=1}^K p_k^2 \]

属性\(a\)的基尼指数定义为:

\[Gini\_Index (D,a) = \sum_{v}^V \frac{|D^v|}{|D|} Gini(D^v) \]

相?于信息增益,GI没有使?对数运算和

CART:对于分类决策树,使?基尼指数最?化原则进?特征选择,?成?叉树。

1.3 决策树生成流程

输入:训练数据集\(D\),特征集\(A\),信息增益阈值\(\epsilon\)

输出:决策树\(T\)

  1. \(D\)中所有有实例属于同?类\(C_k\),则\(T\)为单结点树,并将类\(C_k\)作为该结点的类标记,返回\(T\)
  2. \(A = \emptyset\),则\(T\)为单结点树,并将\(D\)中实例数最?的类\(C_k\)作为该结点的类标记,返回\(T\)
  3. 否则,计算\(A\)中各特征对\(D\)的信息增益/信息增益率/基尼指数,选择信息增益最?/基尼指数最?的特征\(A_g\)
  4. 如果\(A_g\)的信息增益?于阈值\(\epsilon\),则置\(T\)为单结点树,并将\(D\)中实例数最?的类\(C_k\)作为该结点的类标记,返回\(T\)
  5. 否则,对\(A_g\)的每?可能值\(a_i\),将\(D\)分割为若??空?集\(D_i\),将\(D_i\)中实例数最?的类作为标记,构建?节点,由节点及其?节点构成树\(T\),返回\(T\)
  6. 对第i个?结点,以\(D_i\)为训练集,以\(A-A_g\)为特征集,递归地调?步1~步5得到?树\(T_i\),返回\(T_i\)

2 剪枝

pruning

2.1 预剪枝

pre-pruning

在决策树?成的过程中,对每个Node在进?步划分之前进?估计,若当前结点的划分不能带来决策树泛化性的提升(结点划分后验证集精度变低),就停?划分,将此标记为叶结点。

优点:很好解决过拟合,还降减少了决策树的训练时间开销和测试时间开销。

缺点:失去了后续划分的性能提升可能,导致?拟合

2.2 后剪枝

post-pruning

在?成了完整的决策树后从叶?结点逐层向上计算验证集精度。如果剪枝后的验证集精度?于剪枝前的验证集精度,则执?剪枝操作。

优点&缺点:?拟合?险很?,但是训练的开销较?。

2.3 CART剪枝

CART采?后剪枝法,即先?成决策树,然后产?所有剪枝后的CART树,然后使?交叉验证检验剪枝的效

果,选择泛化能?最好的剪枝策略。

步骤:?先从?成算法产?的决策树\(T_0\)底端开始不断剪枝,直到\(T_0\)的根结点,形成?个?树序列\(\{T_0,...,T_n\}\)。然后通过交叉验证法在独?的验证数据集上对?树序列进?预测,从中选择最优的?树。

定义?树的损失函数:

\[C_\alpha(T) = C(T)+ \alpha |T| \]

\(T\)为任意树,\(C(T)\)为对训练数据的预测误差(如基尼指数), \(|T|\)为?树的叶结点个数,$\alpha \geq 0 $为参数衡量训练数据的拟合程度与模型的复杂度, $C_\alpha(T) \(是\)T$的整体损失。

3. 决策树拓展

3.1 连续变量处理

C4.5连续属性离散化

给定样本集\(D\)和属性\(a\),假定\(a\)\(D\)上出现了\(V\)个不同的取值\(a^1,...,a^V\),从小到大排序,基于划分点\(t\)分为两个子集\(D^+\)\(D^-\),对于连续属性\(a\),我们可以考察包含\(n-1\)个元素的候选划分点集合:

\[T_a = \{\frac{a_1 + a_{i+1}}{2}| 1 \leq i \leq n-1\} \]

把区间的中位点作为候选划分点,对于每?个分割点计算信息增益。 其中\(Gain(D,a,t)\)?是样本集基于\(t\)点进?划分后的信息增益。

\[Gain(D,a) = \max_{t \in T_a} Gain(D,a,t) = \max_{t \in T_a} Ent(D) - \sum_{\lambda \in \{-,+\}} \frac{|D_t^\lambda|}{|D|} Ent(D_t^\lambda) \]

3.2 缺失值处理

(1)如何在属性值缺失的情况下进?划分属性选择?

(2)给定划分属性,若样本在该属性上的值缺失,如何对样本进?划分?

C4.5的缺失值处理

给定训练集\(D\)和属性\(a\),令\(\tilde{D}\)表示\(D\)中在属性\(a\)上没有缺失值的样本?集。假定\(a\)\(D\)上出现了\(V\)个不同的取值\(a^1,...,a^V\)\(\tilde{D}^v\)\(\tilde{D}\)在属性\(a\)上取值为\(a^v\)的样本?集,\(\tilde{D}_k\)表示\(\tilde{D}\)中属于第\(k\)类的样本?集。 假定给每?个样本赋予?个权重\(w_x\)?(在决策树开始学习阶段,各样本的权重初始化为1),并定义:

  • \(\rho = \frac{\sum_{x \in \tilde{D}}w_x}{\sum_{x \in D} w_x}\):属性\(a\)上?缺失值样本所占的?例
  • \(\tilde{p}_k= \frac{\sum_{x \in \tilde{D}_k}w_x}{\sum_{x \in D} w_x}(1 \leq k \leq |\mathcal{Y}|)\):?缺失值样本中第\(k\)类所占的?例
  • \(\tilde{r}_v= \frac{\sum_{x \in \tilde{D}^v}w_x}{\sum_{x \in D} w_x}(1 \leq v \leq V)\):?缺失值样本中属性\(a\)上取值为\(a^v\)占的?例
  • \(Ent(\tilde{D}) = -\sum_{k=1}^{|\mathcal{Y}|} \tilde{p}_k \log_2 \tilde{p}_k\): 没有缺失值的样本?集的信息熵
  • \(Gain(D,a) = \rho \times Gain(\tilde{D},a) = \rho \times (Ent(\tilde{D})-\sum_{v=1}^V \tilde{r}_v Ent(\tilde{D}^v))\):新信息增益

针对(2):在划分时,

若样本的划分属性已知,则将划分与其取值对应的?结点,并且样本权值保持不变;

若样本的划分属性未知,则将同时划?所有的?结点,且样本权值在与属性值对应的?结点中调整为\(\tilde{r}_v \times w_x\)

3.3 回归树:CART

且输出变量是连续变量。如何使?决策树进?回归?

给定训练数据集\(D = \{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}\)。?个回归树对应着输?(特征)空间的?个划分以及在划分单元上的输出值。假设已经将输?空间划分为\(M\)个单元\(R_1,...,R_M\), 并且在每个单元上有?个固定的输出值\(c_m\),于是期望得到的回归树模型表示为

\[f(x) = \sum_{m=1}^M c_m I(x \in R_m) \]

?成过程如下:

选择第\(j\)个变量\(x^{(j)}\)和取值\(s\)作为切分变量(splitting variable)和切分点(splitting point), 并定义两个区域

\[R_{1}(j,s) = \{x|x^{(j)} \leq s\} , R_2(j,s) = \{x| x^{(j)} >s\} \]

然后寻找最优切分变量和最优切分点。具体地,求解

\[\min_{j,s} \bigg[ \min_{c_1} \sum_{x_i \in R_1 (j,s)} (y_i-c_1)^2 + \min_{c_2} \sum_{x_i \in R_2(j,s)}(y_i - c_2)^2 \bigg] \]

对固定输?变量\(j\)可以找到最优切分点\(s\)

\[\hat{c}_1 = avg(y_i|x_i \in R_1(j,s)) ,\hat{c}_2 = ave(y_i|x_i \in R_2(j,s)) \]

遍历所有输?变量,找到最优的切分变量,构成?对\((j,s)\)。依此将输?空间划分为两个区域,接着对每个区域执?同样的划分过程,直到满?停?条件。

当输?空间的划分确定时,可以?均?差(Mean Square Error): \(\sum_{x_i \in R_m}(y_i - f(x_i))^2\)来表示回归树。对于训练数据的预测误差,?MSE最?的原则求解每个单元上的最优输出。单元\(R_m\)上的\(c_m\)的最优值\(\hat{c}_m\)\(R_m\)上的所有输?实例\(x_i\)对应的输出\(y_i\)的均值,即

\[\hat{c}_m = ave(y_i | x_i \in R_m) \]

那么,就得到了我们期望找到的回归树\(f(x) = \sum_{m=1}^M c_m I,(x \in R_m)\)

2 总结

算法 适用 树结构 分裂准则 连续值处理 缺失值处理 剪枝
ID3 分类 多叉树 信息增益 不支持 不支持 不支持
C4.5 分类 多叉树 信息增益率 支持 支持 支持
CART 分类回归 二叉树 基尼指数、均方差 支持 支持 支持