基本流程
一棵决策树一般包含一个根结点、若干内部结点和若干叶结点。叶结点对应于决策结果,其他每个结点对应于一个属性测试,每个结点包含的样本集合根据属性测试的结果被划分到子结点中。
在逻辑上,决策树对应一堆if else语句,决策树的生成过程是一个递归的过程,递归返回有:当前结点包含的样本全属于同一类别,无需划分;当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;当前结点包含的样本集合为空,不能划分。
最终目的是将样本越分越纯
划分选择
信息增益
-
自信息
在信息论中将自信息定义为: I ( X ) = − l o g b ( p ( x ) ) I(X)=-log_b(p(x)) I(X)=−logb(p(x))
当b取2时,单位是bit,b取e时,单位是nat
信息熵:自信息的期望,度量随机变量的不确定性,信息熵越大越不确定。
H ( X ) = E [ I ( X ) ] = − ∑ p ( x ) l o b b p ( x ) H(X)=E[I(X)]=-\sum p(x)lob_bp(x) H(X)=E[I(X)]=−∑p(x)lobbp(x)
计算信息熵时约定:若 p ( x ) = 0 p(x)=0 p(x)=0则 p ( x ) l o g b p ( x ) = 0 p(x)log_bp(x)=0 p(x)logbp(x)=0.当某个取值是1时信息熵最小,即最确定,值为0;当X的各个取值的概率均等时信息熵最大,值为 l o g b ∣ X ∣ log_b|X| logb∣X∣,|X|表示X可能取值的个数。
将样本类别标记 y y y视作随机变量,各个类别在样本集合D中的占比 p k ( k = 1 , 2 , . . . . . ∣ y ∣ ) p_k(k=1,2,.....|y|) pk(k=1,2,.....∣y∣)视作各个类别取值的概率,则样本集合D的信息熵为:
E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k l o g 2 p k Ent(D)=-\sum_{k=1}^{|y|}p_klog_2p_k Ent(D)=−k=1∑∣y∣pklog2pk
E n t ( D ) Ent(D) Ent(D)越小,则D的纯度越高。 -
条件熵
Y的信息熵关于概率分布X的期望:在已知X后Y的不确定性。
H ( Y ∣ X ) = ∑ x p ( x ) H ( Y ∣ X = x ) H(Y|X)=\sum_xp(x)H(Y|X=x) H(Y∣X)=x∑p(x)H(Y∣X=x)
假定离散属性a有V个可能的取值 { a 1 , a 2 , . . . a V } \{a^1,a^2,...a^V\} {a1,a2,...aV}, D v D^v Dv表示属性a的取值为 a v a^v av的样本集合, ∣ D v ∣ D \frac{|D^v|}{D} D∣Dv∣表示占比,那么在已知属性a的取值后,样本集合D的条件熵为:
∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) \sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v) v=1∑V∣D∣∣Dv∣Ent(Dv) -
信息增益
在已知属性a的取值后y的不确定性减少的量,也即纯度的提升。
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v) Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的“纯度提升”越大。
ID3决策树即是以信息增益为准则来进行选择划分属性的决策树。 -
增益率
当属性中包含某些本来就很纯的属性时,增益可能无法满足要求,例如当每组的编号也作为属性时,可以直接分为若干组,增益很大,但这不具有泛化性,信息增益应用就遇到了问题。实际上,信息增益准则对可取值数目较多的属性有所偏好,因此就需要减少这种偏好。增益率就得到了应用。
增益率定义为:
G a i n r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain_ratio(D,a)=\frac{Gain(D,a)}{IV(a)} Gainratio(D,a)=IV(a)Gain(D,a)
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ IV(a)=-\sum_{v=1}^{V}\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|} IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
称为属性a的固有值,a的可能取值个数V越大,通常其固有值也越大。但是增益率准则对可取数目较少的属性有所偏好。
C4.5决策树并不直接用增益率进行划分,而是采用启发式的方法:先从候选划分属性中找出信息熵增益高于平均水平的属性,再从中选择增益率最高的。 -
基尼指数
CART决策树使用“基尼指数”来选择划分属性。
基尼值表示从样本中随机抽取两个样本,其类别标记不一致的概率。因此基尼值越小,碰到异类的概率就越小,纯度越高。
G i n i ( 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 Gini(D)=\sum_{k=1}^{|y|}\sum_{k'!=k}p_kp_{k'}=\sum_{k=1}^{|y|}p_k(1-p_k)=1-\sum_{k=1}^{|y|}p_k^2 Gini(D)=k=1∑∣y∣k′!=k∑pkpk′=k=1∑∣y∣pk(1−pk)=1−k=1∑∣y∣pk2
属性a的基尼指数为:
G
i
n
i
i
n
d
e
x
(
D
,
a
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
G
i
n
i
(
D
v
)
Gini_index(D,a)=\sum_{v=1}^{V}\frac{|D^v|}{|D|}Gini(D^v)
Giniindex(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
选择基尼值最下的属性作为最优划分属性。
由于CART决策树是一棵二叉树,因此在构造CART决策树时,一般不直接用属性a的基尼值。
一般的CART决策树构建算法如下:
- 首先对每个属性a的每个可能取值v,将数据集分为a=v和a!=v两部分来计算基尼指数,即:

- 然后选择基尼指数最小的属性及其对应的取值作为最优划分属性和最优划分点;
- 重复上述两步,直至满足条件。
剪枝处理
决策树划分时可能划分过多造成过拟合,因此剪枝可以有效避免过拟合风险。
- 预剪枝
根据划分前后纯度是否提高决定是否继续划分。 - 后剪枝
后剪枝就是建成决策树后,去掉某个叶子结点,使上边的结点成为叶子结点判断纯度是否提高,决定是否保留叶子结点。
连续值与缺失值得处理
- 连续值处理
连续值得处理可采用二分法将属性的取值集合进行划分,划分点选取可以用每两个相邻属性值的重点表示,就有了n-1和划分点,然后计算所有划分点的增益,选取最大的增益点进行划分,之后进行同样的操作。
G a i n ( D , a ) = m a x G a i n ( D , a , t ) = m a x E n t ( D ) − ∑ ∣ D t λ ∣ ∣ D ∣ E n t ( D t λ ) Gain(D,a)=max Gain(D,a,t)=max Ent(D)-\sum \frac{|D^\lambda _t|}{|D|}Ent(D^\lambda _t) Gain(D,a)=maxGain(D,a,t)=maxEnt(D)−∑∣D∣∣Dtλ∣Ent(Dtλ)
需要注意的是连续值得某个属性划分可能在后续结点中继续使用。
- 缺失值处理
有时样本中某些属性的取值可能存在缺失,如何进行划分选择,如何对样本进行划分,需要讨论解决。
首先如何进行划分属性选择呢,其实就是计算出没有缺失的值所占的比例,然后将增益进行推广。

对于样本的划分,如果知道属性的取值,直接划分入对应的子结点,如果未知,则经样本同时化入所有子结点,并将其权值乘上对应的比例。
8870

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



