决策树
结构
每个结点包含的样本集合根据属性测试的结果划分到子结点中
根结点包含样本全集
从根结点到每个叶节结点的路径对应一个判定测试序列
核心策略
分而治之
目的
产生一棵泛化能力强,可以处理未见示例能力强的决策树
现在决策树中最主流的是用在集成学习里构成森林的模型
算法流程
算法原理的理解
从逻辑角度,一堆if else 语句的组合
从几何角度,根据某种准则划分特征空间
最终目的:将样本越分越纯
决策树学习的关键
选择最优划分属性
信息熵
度量样本集合纯度常用的一种指标
样本集合 D D D中一共有 Y \mathcal{Y} Y类样本,其中第 k k k类样本所占的比例为 p k ( k = 1 , 2 , … , ∣ Y ∣ ) p_{k}(k=1,2, \ldots,|\mathcal{Y}|) pk(k=1,2,…,∣Y∣)
则样本 D D D的信息熵定义为
Ent ( D ) = − ∑ k = 1 ∣ Y ∣ p k log 2 p k \operatorname{Ent}(D)=-\sum_{k=1}^{|Y|} p_{k} \log _{2} p_{k} Ent(D)=−k=1∑∣Y∣pklog2pk
在计算信息熵的时候约定,$p=0 \text {, 则 } p \log _{2} p=0 $
条件熵
H ( Y ∣ X ) = ∑ x p ( x ) H ( Y ∣ X = x ) H(Y \mid X)=\sum_{x} p(x) H(Y \mid X=x) H(Y∣X)=x∑p(x)H(Y∣X=x)
本质是Y的信息熵关于概率分布X的期望
从单个属性a的角度来看,针对样本集合D的条件熵为
∑ v = 1 V ∣ D v ∣ ∣ D ∣ Ent ( D v ) \sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) v=1∑V∣D∣∣Dv∣Ent(Dv)
属性 a a a对样本集 D D D进行划分所获得的"信息增益":
Gain ( D , a ) = Ent ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Ent ( D v ) \operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
本质就是信息熵和条件熵之差
信息增益越大,意味着使用属性 a a a来进行划分所获得的"纯度提升"越大
Iterative Dichotomiser(迭代二分器)
用信息增益来进行决策树的属性选择
a ∗ = arg max a ∈ A Gain ( D , a ) a_{*}=\underset{a \in A}{\arg \max } \operatorname{Gain}(D, a) a∗=a∈AargmaxGain(D,a)
缺点
对可取值数目较多的属性有所偏好
Gain_ratio ( D , a ) = Gain ( D , a ) IV ( a ) \text{Gain\_ratio}(D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)} Gain_ratio(D,a)=IV(a)Gain(D,a)
其中
IV ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log 2 ∣ D v ∣ ∣ D ∣ \operatorname{IV}(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|} IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
称之为属性 a a a的"固有值"
使用"增益率"来选择最优划分属性
基尼值
Gini ( D ) = ∑ k = 1 ∣ Y ∣ ∑ k ′ ≠ k p k p k ′ = ∑ k = 1 ∣ Y ∣ p k ( 1 − p k ) = 1 − ∑ k = 1 ∣ Y ∣ p k 2 \begin{aligned} \operatorname{Gini}(D) &=\sum_{k=1}^{|\mathcal{Y}|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}} \\ &=\sum_{k=1}^{|\mathcal{Y}|} p_{k}\left(1-p_{k}\right) \\ &=1-\sum_{k=1}^{|\mathcal{Y}|} p_{k}^{2} \end{aligned} Gini(D)=k=1∑∣Y∣k′=k∑pkpk′=k=1∑∣Y∣pk(1−pk)=1−k=1∑∣Y∣pk2
基尼指数
Gini index反映了从数据集 D D D中随机抽取两个样本,其类别标记不一致的概率,通常 G i n i ( D ) Gini(D) Gini(D)越小,数据集 D D D的纯度越高
Gini i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Gini ( D v ) \operatorname{Gini} i n d e x(D, a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Gini}\left(D^{v}\right) Giniindex(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
其中基尼值和基尼指数可以类比为信息熵和条件熵
Classification and Regression Tree
是一种著名的决策树学习算法,分类和回归任务都可用
利用基尼指数来进行属性选择
a ∗ = arg min a ∈ A Gini_index ( D , a ) a_{*}=\underset{a \in A}{\arg \min } \text { Gini\_index }(D, a) a∗=a∈Aargmin Gini_index (D,a)
CART决策树构造的一定是二叉树,所以在进行划分的时候,不仅要考虑最优划分属性,还要考虑最优划分点
CART决策树的实际构造算法如下:
Gini index ( D , a ) = ∣ D a = v ∣ ∣ D ∣ Gini ( D a = v ) + ∣ D a ≠ v ∣ ∣ D ∣ Gini ( D a ≠ v ) \operatorname{Gini} \text { index }(D, a)=\frac{\left|D^{a=v}\right|}{|D|} \operatorname{Gini}\left(D^{a=v}\right)+\frac{\left|D^{a \neq v}\right|}{|D|} \operatorname{Gini}\left(D^{a \neq v}\right) Gini index (D,a)=∣D∣∣Da=v∣Gini(Da=v)+∣D∣∣Da=v∣Gini(Da=v)