文章目录
4.1 划分选择
4.1.1信息增益
E
n
t
r
o
p
y
(
D
)
=
−
∑
p
ln
p
Entropy(D) = -\sum p \ln p
Entropy(D)=−∑plnp
G
a
i
n
(
D
,
a
)
=
E
n
t
r
o
p
y
(
D
)
−
∑
a
=
a
k
∣
D
k
∣
∣
D
∣
E
n
t
r
o
p
y
(
D
k
)
Gain(D,a) = Entropy(D) - \sum_{a=a_k}\frac{|D_k|}{|D|}Entropy(D_k)
Gain(D,a)=Entropy(D)−a=ak∑∣D∣∣Dk∣Entropy(Dk)
4.1.2 信息增益比
G
a
i
n
r
a
t
i
o
(
D
,
a
)
=
G
a
i
n
(
D
,
a
)
I
V
(
a
)
Gainratio(D,a) = \frac{Gain(D,a)}{IV(a)}
Gainratio(D,a)=IV(a)Gain(D,a)
I
V
(
a
)
=
−
∑
a
=
a
k
∣
D
k
∣
∣
D
∣
ln
∣
D
k
∣
∣
D
∣
IV(a) = -\sum_{a=a_k}\frac{|D_k|}{|D|}\ln \frac{|D_k|}{|D|}
IV(a)=−a=ak∑∣D∣∣Dk∣ln∣D∣∣Dk∣
信息增益比对取值较多的特征有一定的惩罚,但C4.5并不是直接选择增益率最大的特征计算分裂点,而是使用了启发式:先找出信息增益高于平均水平的属性,再从中选择信息增益比最高的特征。
4.1.3 基尼指数
G
i
n
i
(
D
)
=
1
−
∑
y
=
y
k
p
k
2
Gini(D) = 1-\sum_{y=y_k} p_k^2
Gini(D)=1−y=yk∑pk2
G
i
n
i
(
D
,
a
)
=
∑
a
=
a
k
∣
D
k
∣
∣
D
∣
G
i
n
i
(
D
k
)
Gini(D,a) = \sum_{a=a_k}\frac{|D_k|}{|D|}Gini(D_k)
Gini(D,a)=a=ak∑∣D∣∣Dk∣Gini(Dk)
4.1.4 ID3,C4.5,CART区别
- ID3除了较好的特征外,倾向于选择取值较多的特征;C4.5对ID3进行优化,通过引入信息增益比,对取值较多的特征进行惩罚,避免过拟合
- 样本类型:ID3只能处理离散类型变量;C4.5和CART都可以处理连续型变量:C4.5对数据排序后找到类别不同的分割线做切分点,将连续属性转换为布尔型,或将其转换为多个取值的离散型变量。CART对连续特征做二值划分。
- 应用角度:ID3和C4.5只能分类;CART可以用于回归
- 实现细节:ID3对缺失值敏感;C4.5和CART可以对缺失值处理。
- ID3和C4.5多分叉,每个特征在层级间不能复用;CART二分叉,特征可以重复被使用
- ID3和C4.5通过剪枝权衡准确性和泛化能力;CART直接利用全部数据发现所有可能树结构进而进行对比
4.2剪枝处理
剪枝是对决策树预防过拟合的主要手段。
- 预剪枝:在决策树生成过程中提前停止树的增长
- 后剪枝:在已生成的过拟合决策树上进行剪枝,得到简化版的剪枝决策树
4.2.1 预剪枝
- 当树到达一定深度时,停止树的生长
- 当到达当前节点的样本数小于某阈值,停止生长
- 计算每次分裂是否会带来测试集的准确度提升,当小于某阈值时,不再对当前节点扩展
优点:
- 预剪枝使决策树很多分支没有展开,降低了过拟合风险,显著减少了决策树的训练时间开销和测试时间开销
缺点:
- 有些分支虽然当前不能提升泛化能力,但在此基础上的后续划分有可能呢导致性能显著提升
- 预剪枝基于“贪心”本质禁止这些分支展开,可能会导致欠拟合
4.2.2 后剪枝
错误率降低剪枝
- 对于已生成决策树,自底向上对非叶节点进行考察
- 如果将该节点对应的子树替换为叶节点,能使验证集的准率提升或不变,将该子树替换为叶节点
代价复杂剪枝
-
从完整的决策树 T 0 T_0 T0,生成一个子树序列
- 序列的最后一个子树只有根节点
- 序列中所有的后一个子树都是由前一个子树裁剪掉当前树中的一个分支得到的
- 这个子枝是当前子树中集合误差,即误差增加率,最小的分支
α = R ( t ) − R ( T t ) ∣ L ( T t ) ∣ − 1 \alpha = \frac{R(t) - R(T_t)}{|L(T_t)|-1} α=∣L(Tt)∣−1R(t)−R(Tt)
其中 α \alpha α就是误差增加率, R ( T t ) R(T_t) R(Tt)是未剪枝时子枝 T t T_t Tt的误差, R ( t ) R(t) R(t)是剪枝后该节点误差, ∣ L ( T t ) ∣ |L(T_t)| ∣L(Tt)∣是子枝 T t T_t Tt的叶节点个数
-
在子树序列中选出真实误差最小的决策树
- 基于独立的数据集
- 基于k折交叉验证,将数据集分为k份。前k-1份用于生成决策树,最后一份用于选择最优的剪枝,重复N次,再从N个子树中选择最优的子树
4.3 连续与缺失值处理
4.3.1 连续值
- C4.5:对数据排序后找到类别不同的分割线做切分点,将连续属性转换为布尔型,或将其转换为多个取值的离散变量
- CART:对连续特征做二值划分
另外与连续属性不同,当前节点划分输入为连续属性,该属性还可以作为后代节点的划分属性
4.3.2 缺失值处理
两个问题:
- 如果在属性值缺失时如何衡量属性做分裂属性选择
- 给定分裂点选择的属性,如何对缺失值的样本点划分
- 选择属性
-
设给定训练集D,属性a,取值 { a 1 , ⋯   , a V } \{a_1,\cdots,a_V\} {a1,⋯,aV}
-
令 D ~ \tilde D D~表示样本D中没有缺失值的集合; ρ \rho ρ表示无缺失值样本的比例
ρ = ∑ x ∈ D ~ w i ∑ x ∈ D w i \rho = \frac{\sum_{x\in \tilde D}w_i}{\sum_{x\in D}w_i} ρ=∑x∈Dwi∑x∈D~wi -
D ~ v \tilde D^v D~v表示没有缺失值,且属性a取值 a v a_v av的集合; r ~ v \tilde r_v r~v表示无缺失值中属性a上取值 a v a_v av的样本所占比例。
r ~ v = ∑ x ∈ D ~ v w i ∑ x ∈ D ~ w i \tilde r_v = \frac{\sum_{x\in \tilde D^v}w_i}{\sum_{x\in \tilde D}w_i} r~v=∑x∈D~wi∑x∈D~vwi -
D ~ k \tilde D_k D~k表示没有缺失值,且y属于第k类的集合; p ~ k \tilde p_k p~k表示无缺失值中第k类所占比例;
p ~ k = ∑ x ∈ D ~ k w i ∑ x ∈ D ~ w i \tilde p_k = \frac{\sum_{x\in \tilde D_k}w_i}{\sum_{x\in \tilde D}w_i} p~k=∑x∈D~wi∑x∈D~kwi -
假设每个样本 x i x_i xi 有权重 w i w_i wi,且初始时 w i = 1 w_i=1 wi=1
E
n
t
r
o
p
y
(
D
~
)
=
−
∑
p
~
k
ln
p
~
k
Entropy(\tilde D) = -\sum \tilde p_k \ln \tilde p_k
Entropy(D~)=−∑p~klnp~k
G
a
i
n
(
D
,
a
)
=
ρ
×
(
E
n
t
r
o
p
y
(
D
~
)
−
∑
a
=
a
v
r
~
v
E
n
t
r
o
p
y
(
D
~
v
)
)
Gain(D,a) = \rho \times \Big(Entropy(\tilde D) - \sum_{a=a_v} \tilde r_v Entropy(\tilde D^v)\Big)
Gain(D,a)=ρ×(Entropy(D~)−a=av∑r~vEntropy(D~v))
2.样本划分
- 如果样本在属性a上没有缺失值,按照取值划入对应节点
- 如果样本在属性a上缺失,将样本同时划入所有的子节点,但样本权值在不同的子节点中调整为不同的值,即让同一个样本以不同的概率划入不同的节点中
w i ′ = r ~ v ⋅ w i w_i^\prime = \tilde r_v \cdot w_i wi′=r~v⋅wi
4.4多变量决策树
- 理论上决策树形成的分类边界由若干个与坐标轴平行的分段组成。这是由于每个节点都去决定于一个属性。
- 真实学习任务分类边界较复杂,只有使用了很多段划分才能取得较好的近似。如果能使用斜的划分边界,决策树会大大的简化
“多变量决策树”就是能实现这样“斜划分”的决策树,非叶节点不再是仅对某个属性,而是多个属性的线性组合,类似于
∑
i
=
1
d
w
i
a
i
=
t
\sum_{i=1}^d w_ia_i = t
∑i=1dwiai=t的线性分类器,
w
i
w_i
wi是属性
a
i
a_i
ai的权重。
例如