本文主要是对决策树的复习,把决策树知识结构化,温故而知新~
1、决策树在结点分裂时针对特征的处理
1、ID3、C4.5:
-
针对数值特征的处理:
-
ID3不支持
-
C4.5:
-
将连续值离散化,具体方法是将这些值从小到大排序,记为 a 1 , a 2 , . . . , a n {a^1, a^2, ..., a^n} a1,a2,...,an, 每次取 a i + a i + 1 2 \frac{a^i+a^{i+1}}{2} 2ai+ai+1 作为划分点,计算信息增益率
-
假如总共有 m m m 个数值特征值,那么会有 m − 1 m-1 m−1 个切分点
-
-
-
针对类别特征的处理:因为是多叉树,每个类别值对应一个分支
2、C&RT树(二叉树):
-
针对数值特征的处理:同C4.5针对数值特征的处理
-
针对类别特征的处理:
- 如果类别特征有三个值{A1, A2, A3},会有三种分类结点的情况,针对每种情况分别建立二叉树,计算Gini系数,取Gini系数最小值
- 如果类别特征值有 m m m 个,那么总共尝试 2 n − 1 − 1 2^{n-1}-1 2n−1−1 种分类情况
2、决策树在结点分裂后的特征选择
选取最优分裂特征的方法
ID3(信息增益)
1、熵:表示信息的混乱程度,熵越大,信息越混乱
H
(
x
)
=
−
∑
i
=
1
n
p
i
l
o
g
p
i
=
−
∑
k
=
1
K
∣
C
k
∣
∣
D
∣
l
o
g
∣
C
k
∣
∣
D
∣
H(x) = -\sum_{i=1}^np_ilogp_i = -\sum_{k=1}^K\frac{|C_k|}{|D|}log\frac{|C_k|}{|D|}
H(x)=−i=1∑npilogpi=−k=1∑K∣D∣∣Ck∣log∣D∣∣Ck∣
2、信息增益:树做branch后的熵 - 树做branch前的熵(含义:当根据特征X进行分裂后,类别Y不确定性减少的程度)
C4.5(信息增益率)
1、思考:为什么需要信息增益率
当使用信息增益来进行特征选择时,存在以下问题:
如果有一个特征是用户id,根据用户id进行branch,同时以信息增益为结果作评估,那么id肯定是最好的特征,但是这样是过拟合的
所以为了解决信息增益偏向于选择取值较多的特征这个问题,有了信息增益率
信 息 增 益 率 = 信 息 增 益 H A ( D ) 其 中 H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g ∣ D i ∣ ∣ D ∣ , n 是 特 征 A 取 值 的 个 数 信息增益率 = \frac{信息增益}{H_A(D)} \\ 其中H_A(D) = -\sum_{i=1}^{n}\frac{|D_i|}{|D|}log\frac{|D_i|}{|D|}, n是特征A取值的个数 信息增益率=HA(D)信息增益其中HA(D)=−i=1∑n∣D∣∣Di∣log∣D∣∣Di∣,n是特征A取值的个数
2、信息增益率理解:
H A ( D ) H_A(D) HA(D) 相当于特征A的熵,特征A的取值越多,熵越大,那么信息增益率越小,可以避免取到id这一类特征
C&RT树(Gini系数)
C&RT树用于分类的特征评估
1、在分类问题中,假如有K个类,样本点属于第k类的概率为 p k p_k pk
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D) = 1 - \sum_{k=1}^{K}(\frac{|C_k|}{|D|})^2 Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
在做branch后,整体数据的Gini系数为:
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(D1) + \frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
2、思考:为什么需要Gini系数
- 实际运行中,信息增益率要计算对数,而Gini系数只需要平方求和,整体运行速度比信息增益率快。
C&RT树用于回归的特征评估
1、在回归问题中,选择变量 x j x^j xj 和它的切分点取值s,定义两个分支区域:
R 1 ( j , s ) = { x ∣ x j < = s } 和 R 2 ( j , s ) = { x ∣ x j > s } R_1(j,s) = \{x|x^j <=s\} 和 R_2(j,s) = \{x|x^j>s\} R1(j,s)={x∣xj<=s}和R2(j,s)={x∣xj>s}
2、寻找最优切分变量 j j j 和切分点 s s s,求解公式为:
min j , s ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 \min\limits_{j,s}{\sum_{x_i\in R_1(j,s)}(y_i - c_1)^2 + \sum_{x_i\in R_2(j,s)}(y_i-c_2)^2} j,sminxi∈R1(j,s)∑(yi−c1)2+xi∈R2(j,s)∑(yi−c2)2
3、其中, c1和c2为结点对应数据的label的平均值:
c 1 = a v e r a g e ( y i ∣ x i ∈ R 1 ( j , s ) ) c 2 = a v e r a g e ( y i ∣ x i ∈ R 2 ( j , s ) ) c_1 = average(y_i|x_i\in R_1(j,s))\\ c_2 = average(y_i|x_i\in R_2(j,s)) c1=average(yi∣xi∈R1(j,s))c2=average(yi∣xi∈R2(j,s))
3、决策树做分类时的预测值
当决策树终止时,选择叶子结点的数据集中类别最多的那一类,作为该叶子结点的类别
4、决策树做回归时的预测值
1、当决策树终止时,选择叶子结点的数据集中所有数据的值的平均数,作为该叶子结点的预测值
2、缺点:
- 因为对回归值进行了平均,当train和test回归值分布不一致的时候,会过拟合
- 同理,当真实环境线上部署时。线上label分布跟线下预测label不一致,可能会引起线上指标比线下指标低很多的情况
5、决策树的损失函数
C a ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ C_a(T) = \sum_{t=1}^{|T|}N_tH_t(T) + \alpha|T| Ca(T)=t=1∑∣T∣NtHt(T)+α∣T∣
针对损失函数的理解:
- 左边 N t H t ( T ) N_tH_t(T) NtHt(T) 为树结点的两个属性, N t N_t Nt代表决策树在该结点的样本数, H t ( T ) H_t(T) Ht(T) 代表该结点样本的信息熵
- 右边 |T| 是模型复杂度
- α \alpha α 是控制两者之间的影响
6、决策树的剪枝
决策树的剪枝通过极小化决策树的损失函数来实现。
前剪枝
1、树结构:
- 树深
- 叶子结点的数量、叶子的数量
- 叶子结点的最小样本数
2、评估指标的变化
- 整体样本集的Gini index小于预定阈值(样本基本属于同一类)
- 特征继续做branch后,Gini index的变化小于预定阈值(再继续进行分裂对预测结果影响不大)
后剪枝(通过交叉验证)
1、先生成一棵完整的决策树,递归地从叶子结点向上进行回缩
2、叶结点对应的分类样本中,最大的类替换该叶结点,该叶结点两个分支回缩,叶结点变为叶子结点
3、计算回缩前后的损失函数值,如果回缩后损失函数变小,那么确认回缩
4、最终,得到损失函数最小的树
C&RT树剪枝的策略(后剪枝)
剪枝
1、自下而上的对每个内部结点 t t t计算:
g
(
t
)
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
g(t) = \frac{C(t) - C(T_t)}{|T_t|-1}
g(t)=∣Tt∣−1C(t)−C(Tt)
2、理解:如果收缩之后满足:
收 缩 后 损 失 函 数 < = 收 缩 前 损 失 函 数 收缩后损失函数 <= 收缩前损失函数 收缩后损失函数<=收缩前损失函数
那么:
C ( t ) + α < = C ( T t ) + α ∣ T ∣ C(t) + \alpha <= C(T_t)+\alpha|T| C(t)+α<=C(Tt)+α∣T∣
所以:
α > = C ( t ) − C ( T t ) ∣ T t ∣ − 1 \alpha >= \frac{C(t)-C(T_t)}{|T_t|-1} α>=∣Tt∣−1C(t)−C(Tt)
3、所以,之后判断 α \alpha α 是否大于等于 g ( t ) g(t) g(t),如果大于等于,那么针对叶结点 t t t 回缩,采用最多数的类作为叶结点的类。
4、终止条件:如果 t t t 是根结点,令这个 α \alpha α 对应的最优树为当前树
根据剪枝得到的子树序列,通过交叉验证选出最优子树T
在子树序列中,每个子树对应一个 α \alpha α,通过交叉验证选出最优的 α \alpha α和最优的决策树
参考资料
1、统计学习方法
2、C4.5连续特征离散化:https://blog.csdn.net/u012328159/article/details/79396893
3、https://zhuanlan.zhihu.com/p/38591766
4、C&RT树剪枝算法理解:https://www.zhihu.com/question/22697086