决策树通过不断地发掘规则将特征空间划分为一个一个的小单元,每个小单元就是决策树的叶子节点(表示一个类),而决策树的内部节点表示一个特征或属性。从根节点到叶节点可以看作一条规则,规则的末尾即叶节点代表的是该条规则的所属类别。对于输入的样本从根节点开始寻找该样本满足的规则,也就是该样本的预测结果。
在构建决策树的过程中,最重要的是制定规则的准则,准则的不同,得到的决策树也不同。
ID3决策树
熵:熵定义为信息的期望值,熵表示信息的混乱度,熵越高,则混合的数据越多,信息越混乱。
熵的计算公式:
H
(
X
)
=
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
2
p
(
x
i
)
H(X)=-\sum_{i=1}^{n}p(x_{i})log_{2}p(x_{i})
H(X)=−∑i=1np(xi)log2p(xi)
信息增益:通过对数据集的划分后熵的减少量即数据无序度和混乱度的减少量
设
A
A
A为待划分的特征,
D
D
D为训练数据集,
g
(
D
,
A
)
g(D,A)
g(D,A)为信息增益。
H
(
D
∣
A
)
H(D|A)
H(D∣A)表示数据集
D
D
D在特征
A
A
A的划分下的信息增益。
H
(
D
)
=
−
∑
i
=
1
K
∣
C
i
∣
∣
D
∣
l
o
g
2
∣
C
i
∣
∣
D
∣
H(D)=-\sum_{i=1}^{K}\frac{|C_{i}|}{|D|}log_{2}\frac{|C_{i}|}{|D|}
H(D)=−i=1∑K∣D∣∣Ci∣log2∣D∣∣Ci∣
K
K
K是数据集的类别数量,
∣
C
i
∣
|C_{i}|
∣Ci∣表示属于第
i
i
i类的样本数,
∣
D
∣
|D|
∣D∣表示样本容量。
H
(
D
∣
A
)
=
∑
i
=
1
N
∣
D
i
∣
∣
D
∣
H
(
D
i
)
=
−
∑
i
=
1
N
∣
D
i
∣
∣
D
∣
∑
j
=
1
K
∣
D
i
j
∣
∣
D
i
∣
l
o
g
2
∣
D
i
j
∣
∣
D
i
∣
H(D|A)=\sum_{i=1}^{N}\frac{|D_{i}|}{|D|}H(D_{i})=-\sum_{i=1}^{N}\frac{|D_{i}|}{|D|}\sum_{j=1}^{K}\frac{|D_{ij}|}{|D_{i}|}log_{2}\frac{|D_{ij}|}{|D_{i}|}
H(D∣A)=i=1∑N∣D∣∣Di∣H(Di)=−i=1∑N∣D∣∣Di∣j=1∑K∣Di∣∣Dij∣log2∣Di∣∣Dij∣
N
N
N是特征
A
A
A的不同取值个数,
∣
D
i
∣
|D_{i}|
∣Di∣表示
A
A
A取值第
i
i
i个值的样本数,
∣
D
i
j
∣
|D_{ij}|
∣Dij∣表示在
D
i
D_{i}
Di样本中类别为
j
j
j的样本数,
H
(
D
∣
A
)
H(D|A)
H(D∣A)是条件熵,表示在已知随机变量
A
A
A的条件下随机变量
D
D
D的不确定性。
计算信息增益:
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D,A)=H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)
在构建ID3决策树的过程中,从根节点开始根据信息增益最大的原则选择特征作为内部节点,直到
D
D
D中的样本都属于同一类或者
g
(
D
∣
A
)
g(D|A)
g(D∣A)的信息增益小于设置的阈值
ε
\varepsilon
ε。
C4.5决策树
C4.5决策树使用的C4.5算法与ID3算法相似,但C4.5决策树在规则生成的过程中采用信息增益比。
信息增益比:
G
(
D
∣
A
)
=
g
(
D
∣
A
)
H
A
(
D
)
=
H
(
D
)
−
H
(
D
∣
A
)
−
∑
i
=
1
N
∣
D
i
∣
∣
D
∣
l
o
g
2
∣
D
i
∣
∣
D
∣
G(D|A)=\frac{g(D|A)}{H_{A}(D)}=\frac{H(D)-H(D|A)}{-\sum_{i=1}^{N}\frac{|D_{i}|}{|D|}log_{2}\frac{|D_{i}|}{|D|}}
G(D∣A)=HA(D)g(D∣A)=−∑i=1N∣D∣∣Di∣log2∣D∣∣Di∣H(D)−H(D∣A)
H
A
(
D
)
{H_{A}(D)}
HA(D)表示数据集
D
D
D关于特征
A
A
A的值的熵。
CART决策树
ID3决策树和C4.5决策树中的每个内部节点可能有多个子节点,在CART决策树中,每个内部节点只有两个子节点,是一颗二叉树。CART决策树既能用于分类问题又能用于回归问题。
- 分类问题:
CART决策树在生成规则的过程中采用基尼指数。基尼指数越大,样本的不确定性也就越大。
基尼指数的定义: G i n i ( p ) = ∑ i = 1 K p i ( 1 − p i ) Gini(p)=\sum_{i=1}^{K}p_{i}(1-p_{i}) Gini(p)=∑i=1Kpi(1−pi)
在这里 G i n i ( D ) = ∑ i = 1 N ∣ C i ∣ ∣ D ∣ ( 1 − ∣ C i ∣ ∣ D ∣ ) = 1 − ∑ i = 1 N ( ∣ C i ∣ ∣ D ∣ ) 2 Gini(D)=\sum_{i=1}^{N}\frac{|C_{i}|}{|D|}(1-\frac{|C_{i}|}{|D|})=1-\sum_{i=1}^{N}(\frac{|C_{i}|}{|D|})^{2} Gini(D)=∑i=1N∣D∣∣Ci∣(1−∣D∣∣Ci∣)=1−∑i=1N(∣D∣∣Ci∣)2, ∣ C i ∣ |C_{i}| ∣Ci∣表示属于第 i i i类的样本数, ∣ D ∣ |D| ∣D∣表示样本容量。
根据特征划分节点时没有把该特征的所有特征值都作为子节点来划分,样本集合 D D D只根据特征 A A A是否取值 a a a被分割成 D 1 D_{1} D1和 D 2 D_{2} D2,然后计算基尼指数。 G i n i ( D ∣ A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D|A)=\frac{|D_{1}|}{|D|}Gini(D_{1})+\frac{|D_{2}|}{|D|}Gini(D_{2}) Gini(D∣A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2) G i n i ( D ) Gini(D) Gini(D)表示集合 D D D的不确定性, G i n i ( D ∣ A ) Gini(D|A) Gini(D∣A)表示数据集 D D D经特征 A A A的某一特征值分割后的不确定性。遍历数据集 D D D的特征 A A A和特征的每个特征值 a a a,计算基尼指数,找出基尼指数最小的特征和特征值作为最优切分点,当节点中的样本数或样本集的基尼指数少于预定阈值时停止计算。
若特征为连续属性,将连续属性 A A A上出现的 n n n个不同值排序记为 { a 1 , a 2 , a 3 , . . . , a n } \left \{{a^{1},a^{2},a^{3},...,a^{n}} \right \} {a1,a2,a3,...,an},在 A A A上寻找划分点 t = a i + a i + 1 2 , 1 ⩽ i ⩽ n − 1 t=\frac{a^{i}+a^{i+1}}{2},1\leqslant i\leqslant n-1 t=2ai+ai+1,1⩽i⩽n−1,即把区间 [ a i , a i + 1 ] [a^{i},a^{i+1}] [ai,ai+1]的中位数 a i + a i + 1 2 \frac{a^{i}+a^{i+1}}{2} 2ai+ai+1作为划分点。
- 回归问题:
分类树中使用基尼指数最小化准则,在回归树中用平方误差最小化准则进行特征选择,同样是二叉树。一个集合经过某个特征划分为两个单元,在单元 R m R_{m} Rm上的固定输出值是该单元上所有输入实例对应的输出 y i y_{i} yi的均值: c m = 1 M ∑ i = 1 M y i c_{m}=\frac{1}{M}\sum_{i=1}^{M}y_{i} cm=M1∑i=1Myi
平方误差: θ = ∑ i = 1 M ( y i − c m ) 2 \theta =\sum_{i=1}^{M}(y_{i}-c_{m})^{2} θ=∑i=1M(yi−cm)2
在选择最优切分点时,遍历所有特征的所有可能切分点,寻找使切分后的两个单元平方误差最小的切分点。 R 1 ( j , s ) = { x ∣ x ( j ) < s } , R 2 ( j , s ) = { x ∣ x ( j ) ⩾ s } R_{1}(j,s)=\left \{ x|x^{(j)}<s \right \} ,R_{2}(j,s)=\left \{ x|x^{(j)}\geqslant s \right \} R1(j,s)={x∣x(j)<s},R2(j,s)={x∣x(j)⩾s}
R 1 ( j , s ) R_{1}(j,s) R1(j,s)表示选择第 j j j个特征和它的值 s s s作为切分点得到的切分单元。
寻找使得平方误差最小的特征和特征值: min j , s [ min c 1 ∑ x i ⊆ R 1 ( j , s ) y i ( y i − c 1 ) 2 + min c 2 ∑ x i ⊆ R 2 ( j , s ) y i ( y i − c 2 ) 2 ] \min_{j,s}[\min_{c_{1}}\sum_{x_{i}\subseteq R_{1}(j,s)}^{y_{i}}(y_{i}-c_{1})^{2}+\min_{c_{2}}\sum_{x_{i}\subseteq R_{2}(j,s)}^{y_{i}}(y_{i}-c_{2})^{2}] j,smin[c1minxi⊆R1(j,s)∑yi(yi−c1)2+c2minxi⊆R2(j,s)∑yi(yi−c2)2]
剪枝问题:
- 预剪枝:预剪枝是在训练过程中发生,基于贪心本质当划分分支后精确度下降禁止这些分支展开。降低了过拟合的风险,但容易带来欠拟合的风险。预剪枝每次仅考虑了当前属性可能带来的泛化性能降低,没有考虑到后续多个属性组合可能会带来的泛化性能的提升。
- 后剪枝:通过验证数据集对已建立的树模型进行剪枝,从底往上。若去掉该分支且精度增加,则剪除掉该分支。CART剪枝点击这里
几种决策树的特点:
ID3决策树采用信息增益的方法,对可取特征值较多的属性有所偏好,所以分支可能更多。(信息增益的特点)
C4.5采用增益率准则对可取值数目较少的属性有所偏好。
CART决策树既能用于分类问题还能用于回归问题,是一棵二叉树。
我们上面讨论的决策树,节点都是根据一个属性来划分的,这在有些时候会让模型变得很复杂。可以通过改变节点的选取,让节点使用多个属性的线性组合来划分,这样的决策树被称为多变量决策树。