数学基础
1. 基本流程
- 一棵决策树包含 一个根结点、若干个内部结点和若干个叶结点
- 叶结点对应于决策结果,其他每个结点则对应于一个属性测试
- 每个结点包含的样本集合根据属性测试的结果被划分到子结点中
- 根结点包含样本全集

-
第8行:每次选择一个属性作为划分依据,然后按属性的取值将数据集中的样本进行划分,划分完得到若干子集,接着再对各个子集按照以上流程重新选择某个属性继续递归划分
-
决策树的生成是一个递归过程,3个returnreturnreturn代表递归返回,运行到returnreturnreturn就停止划分
- 行 2-4 :若递归划分过程中某个子集中已经只含有某一类的样本(例如只含好瓜),那么此时划分的目的已经达到了,无需再进行递归划分
- 行 5-7 :
- 递归划分时每次选择一个属性作为划分依据,并且该属性通常不能重复使用(仅针对离散属性),原因是划分后产生的各个子集在该属性上的取值相同。若所有属性均已被用作过划分依据,即 A=∅A = ∅A=∅,此时子集中仍含有不同类样本(例如仍然同时含有好瓜和坏瓜),但是因已无属性可用作划分依据,此时只能少数服从多数,以此子集中样本数最多的类为标记。
- 虽然 A≠∅A \neq ∅A=∅,但是当子集中的样本在属性集合 AAA 上取值都相同时,等价视为 A=∅A = ∅A=∅
- 行 11-12:根据某个属性进行划分时,若该属性多个属性值中的某个属性值不包含任何样本(例如未收集到),因为无样本落入,将其标记为叶结点,其类别标记为训练集 DDD 中样本最多的类,即把全体样本的分布作为当前结点的先验分布。其实就是一种盲猜,既然是盲猜,那么合理的做法就是根据已有数据用频率近似概率的思想假设出现频率最高的便是概率最大的。注意,此分支必须保留,因为测试时,可能会有样本落入该分支。
2. 划分选择
1. 信息増益:ID3
- 信息熵:Ent(D)=−∑k=1∣Y∣pklog2pkEnt(D)=-\sum\limits_{k=1}^{|\mathcal{Y}|}p_k\log_2p_kEnt(D)=−k=1∑∣Y∣pklog2pk
- 其中:假定当前样本集合 DDD 中第 kkk 类样本所占的比例为 pk(p=1,2,...,∣Y∣)p_k(p=1,2,...,|\mathcal{Y}|)pk(p=1,2,...,∣Y∣)
- 约定:若 p=0p =0p=0,则 plog2p=0p\log_2p=0plog2p=0
- 0≤Ent(D)≤log2∣Y∣0\leq Ent(D)\leq \log_2|\mathcal{Y}|0≤Ent(D)≤log2∣Y∣(证明见南瓜书)
- Ent(D)Ent(D)Ent(D) 的值越小,则 DDD 的纯度越高
- 信息增益:Gain(D,a)=Ent(D)−∑v=1V∣Dv∣∣D∣Ent(Dv)Gain(D,a)=Ent(D)-\sum\limits_{v=1}^V\frac{|D^v|}{|D|}Ent(D^v)Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
- 其中:假定离散属性 aaa 有 VVV 个可能的取值 {a1,a2,...,aV}\{a^1,a^2,...,a^V\}{a1,a2,...,aV}
- 若使用 aaa 来对样本集 DDD 进行划分,则会产生 VVV 个分支结点,其中第 vvv 个分支结点包含了 DDD 中所有在属性 aaa 上取值为 ava^vav 的样本,记为 DvD^vDv
- ID3算法:算法第 8 行选择属性a∗=arg maxa∈AGain(D,a)a_*=\argmax\limits_{a\in A} Gain(D,a)a∗=a∈AargmaxGain(D,a)
2. 增益率:C4.5
- 信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,C4.5 决策树算法使用“增益率” (gain ratio)来选择最优划分属性
- 增益率:Gainradio(D,a)=Gain(D,a)IV(a)Gain_radio(D,a)=\frac{Gain(D,a)}{IV(a)}Gainradio(D,a)=IV(a)Gain(D,a)
- 其中:定义属性 aaa 的固有值 IV(a)=−∑v=1V∣Dv∣∣D∣log2∣Dv∣∣D∣IV(a)=-\sum\limits_{v=1}^V\frac{|D^v|}{|D|}\log_2\frac{|D^v|}{|D|}IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
- 属性 aaa 的可能取值数目越多(即 VVV 越大),则 IV(a)IV(a)IV(a) 的值通常会越大
- 增益率准则对可取值数目较少的属性有所偏好,因此,C4.5 算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式: 先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的
3. 基尼指数:CART
- 基尼值:Gini(D)=∑k=1∣Y∣∑k′≠kpkpk′=1−∑k=1∣Y∣pk2Gini(D)=\sum\limits_{k=1}^{|\mathcal{Y}|}\sum\limits_{k'\neq k}p_kp_k'=1-\sum\limits_{k=1}^{|\mathcal{Y}|}p_k^2Gini(D)=k=1∑∣Y∣k′=k∑pkpk′=1−k=1∑∣Y∣pk2
- Gini(D)Gini(D)Gini(D) 反映了从数据集 DDD 中随机抽取两个样本,其类别标记不一致的概率。因此, Gini(D)Gini(D)Gini(D) 越小,则数据集 DDD 的纯度越高
- 属性 aaa 的基尼指数定义:Gini_index(D,a)=∑v=1V∣Dv∣∣D∣Gini(Dv)Gini\_index(D,a)=\sum\limits_{v=1}^V\frac{|D^v|}{|D|}Gini(D^v)Gini_index(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
- a∗=arg mina∈AGain_index(D,a)a_*=\argmin\limits_{a\in A} Gain\_index(D,a)a∗=a∈AargminGain_index(D,a)
- 在构造 CART 决策树时,并不会严格按照此式来选择最优划分属性,主要是因为 CART 决策树是一棵二叉树,如果用上式去选出最优划分属性,无法进一步选出最优划 分属性的最优划分点。常用的 CART 决策树的构造算法如下:
- 考虑每个属性 aaa 的每个可能取值 vvv,将数据集 DDD 分为 a=va = va=v 和 a≠va \neq va=v 两部分来计算基尼指数,即:Gini_index(D,a)=∣Da=v∣∣D∣Gini(Da=v)+∣Da≠v∣∣D∣Gini(Da≠v)Gini\_index(D,a)=\frac{|D^{a=v}|}{|D|}Gini(D^{a=v})+\frac{|D^{a\neq v}|}{|D|}Gini(D^{a\neq v})Gini_index(D,a)=∣D∣∣Da=v∣Gini(Da=v)+∣D∣∣Da=v∣Gini(Da=v)
- 选择基尼指数最小的属性及其对应取值作为最优划分属性和最优划分点
- 重复以上两步,直至满足停止条件
- CART 除了决策树能处理分类问题以外,回归树还可以处理回归问题,CART 回归树的
构造算法见南瓜书
3. 剪枝处理
1. 预剪枝
- 预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点
- 未剪枝決策树:

- 预剪枝决策树:

- 对比可看出,预剪枝使得决策树的很多分支都没有展开,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销。但另一方面,有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高;预剪枝基于“贪心” 本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险
2. 后剪枝
- 后剪枝是先从训练集生成一棵完整的决策树, 然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点
- 后剪枝决策树:

- 对比可看出,后剪枝决策树通常比预剪枝决策树保留了更多的分支。一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预 剪枝决策树,但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上 地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。
4. 连续与缺失值
连续值处理
- 使用连续属性离散化技术,最简单的策略是采用二分法
- 给定样本集 DDD 和连续属性 aaa ,假定 aaa 在 DDD 上出现了 nnn 个不同的取值,将这些值从小到大进行排序,记为 {a1,a2,...,an}\{a^1,a^2,...,a^n\}{a1,a2,...,an} 。
- 基于划分点 ttt 可将 DDD 分为子集 Dt−D_t^-Dt− 和 Dt+D_t^+Dt+ ,其中 Dt−D_t^-Dt− 包含那些在属性 aaa 上取值不大于 ttt 的样本。显然,对相邻的属性取值 aia^iai 与 ai+1a^{i+1}ai+1 来说, ttt 在区间 [ai,ai+1)[a^i,a^{i+1})[ai,ai+1) 中取任意值所产生的划分结果相同。因此,对连续属性 aaa ,我们可考察包含 n−1n-1n−1 个元素的候选划分点集合 Ta={ai+ai+12∣1≤i≤n−1}T_a=\{\frac{a^i+a^{i+1}}{2}|1\leq i\leq n-1 \}Ta={2ai+ai+1∣1≤i≤n−1} ,即把区间 [ai,ai+1)[a^i,a^{i+1})[ai,ai+1) 的中位点作为候选划分点。
- 选取最优的划分点进行样本集合的划分:Gain(D,a)=maxt∈TaGain(D,a,t)=maxt∈TaEnt(D)−∑λ∈{−,+}∣Dtλ∣∣D∣Ent(Dtλ)Gain(D,a)=\max\limits_{t\in T_a}Gain(D,a,t)=\max\limits_{t\in T_a}Ent(D)-\sum\limits_{\lambda\in\{-,+\}}\frac{|D_t^{\lambda}|}{|D|}Ent(D_t^\lambda)Gain(D,a)=t∈TamaxGain(D,a,t)=t∈TamaxEnt(D)−λ∈{−,+}∑∣D∣∣Dtλ∣Ent(Dtλ),其中 Gain(D,a,t)Gain(D,a,t)Gain(D,a,t) 是样本集 DDD 基于划分点 ttt 二分后的信息增益
缺失值处理
- 常用的缺失值填充方法是:对于连续属性,采用该属性的均值进行填充;对于离散属性,采用属性值个数最多的样本进行填充。这实际上 假设了数据集中的样本是基于独立同分布采样得到的。
- 给定训练集 DDD 和属性 aaa,aaa 有 VVV 个可取值 {a1,a2,...,aV}\{a^1,a^2,...,a^V\}{a1,a2,...,aV}
- D~\widetilde{D}D: DDD 中在属性 aaa 上没有缺失值的样本子集
- D~v\widetilde{D}^vDv:D~\widetilde{D}D 中在属性 aaa 上取值为 ava^vav 的样本子集
- D~k\widetilde{D}_kDk:D~\widetilde{D}D 中属于第 k(k=1,2,...,∣Y∣)k(k=1,2,...,|\mathcal{Y}|)k(k=1,2,...,∣Y∣) 类的样本子集
- wxw_xwx:样本 xxx 的权重
- 无缺失值样本所占比例:ρ=∑x∈D~wx∑x∈Dwx\rho=\frac{\sum_{x\in \widetilde{D} }w_x}{\sum_{x\in {D} }w_x}ρ=∑x∈Dwx∑x∈Dwx
- 无缺失值样本中第 kkk 类所占的比例:p~k=∑x∈D~kwx∑x∈D~wx\widetilde{p}_k=\frac{\sum_{x\in \widetilde{D}_k }w_x}{\sum_{x\in \widetilde{D} }w_x}pk=∑x∈Dwx∑x∈Dkwx
- 无缺失值样本中在属性 aaa 上取值 ava^vav 的样本所占比例:r~v=∑x∈D~vwx∑x∈D~wx\widetilde{r}_v=\frac{\sum_{x\in \widetilde{D}^v }w_x}{\sum_{x\in \widetilde{D} }w_x}rv=∑x∈Dwx∑x∈Dvwx
- Gain(D,a)=ρ×Gain(D~,a)=ρ×[Ent(D~)−∑v=1Vr~vEnt(D~v)]Gain(D,a)=\rho \times Gain(\widetilde{D},a)=\rho \times [Ent(\widetilde{D})-\sum\limits_{v=1}^V \widetilde{r}_v Ent(\widetilde{D}^v)]Gain(D,a)=ρ×Gain(D,a)=ρ×[Ent(D)−v=1∑VrvEnt(Dv)]
- 其中:Ent(D~)=−∑k=1∣Y∣p~klog2p~kEnt(\widetilde{D})=-\sum\limits_{k=1}^{|\mathcal{Y}|}\widetilde{p}_k\log_2\widetilde{p}_kEnt(D)=−k=1∑∣Y∣pklog2pk
- 如何在属性值缺失的情况下进行划分属性选择: 仅可根据 D~\widetilde{D}D 来判断属性 aaa 的优劣
- 给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
- 若样本 xxx 在划分属性 aaa 上的取值已知,则将 xxx 划入与其取值对应的子结点,且样本权值在子结点中保持为 wxw_xwx
- 若样本 xxx 在划分属性 aaa 上的取值未知,则将 xxx 同时划入所有子结点,且样本权值在与属性值 ava^vav 对应的子结点中调整为 r~v⋅wx\widetilde{r}_v\cdot w_xrv⋅wx
- 直观地看,这就是让同一个样本以不同的概率划入到不同的子结点中去

6869

被折叠的 条评论
为什么被折叠?



