1、什么是决策树?
从根节点开始一步步走到叶子节点,既可以做分类任务,也可以做回归任务。
决策树的组成:
①根节点:第一个选择点
②非叶子节点与分支:中间过程
③叶子节点:最终的决策结果
构建决策树的难点:如何切分特征(选择节点)
选择切分特征的衡量标准——熵
2、决策树特征选择
熵
熵是表示随机变量不确定性的度量(物体内部的混乱程度),在机器学习中,熵可以表示样本集合的不确定性,熵越大,样本的不确定性就越大
熵的计算公式:
H
(
x
)
=
−
∑
p
i
∗
log
p
i
H(x)=-\displaystyle\sum p_i*\log p_i
H(x)=−∑pi∗logpi
i
=
1
,
2
,
3
,
⋯
,
n
i=1,2,3,\cdots,n
i=1,2,3,⋯,n
p
i
p_i
pi:随机变量
x
x
x的第
i
i
i个可取值的概率,当
p
i
=
1
p_i=1
pi=1时,熵值为0
例子:
A集合【1,1,1,1,1,1,1,2,2】
B集合【1,2,3,4,5,6,7,8,1】
显然A集合的熵值小于B集合的熵值
不确定性越大,得到的熵值越大:
-
当 p = 0 p=0 p=0或者 p = 1 p=1 p=1时, H ( p ) = 0 H(p)=0 H(p)=0,随机变量完全没有不确定性。
-
当 p = 0.5 p=0.5 p=0.5时, H ( p ) = 1 H(p)=1 H(p)=1,此时随机变量的不确定性最大。
信息增益
信息增益:待分类数据集合的熵与选定某个特征分类后数据集熵的差值
可以用信息增益来衡量使用当前特征对于样本集合D划分效果的好坏,信息增益越大,该特征越适合用于分类。
特征A对训练数据集D的信息增益表示为
g
(
D
,
A
)
g(D,A)
g(D,A),则有:
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D,A)=H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)
举个例子:
有如下训练数据,其中A和B分别是2个特征,Class为目标类别
ID | A | B | Class |
---|---|---|---|
1 | bad | True | 0 |
2 | good | False | 1 |
3 | good | False | 0 |
4 | good | True | 1 |
5 | bad | False | 0 |
6 | good | False | 1 |
原始训练数据中取值为0的概率为0.5,取值为1的概率为0.5
原始训练数据的熵值为:
−
0.5
log
2
0.5
−
0.5
log
2
0.5
=
1
-0.5\log_20.5-0.5\log_20.5=1
−0.5log20.5−0.5log20.5=1
即
H
(
D
)
=
1
H(D)=1
H(D)=1
若按照特征A进行分类则有:
A | Class |
---|---|
good | 1 |
good | 0 |
good | 1 |
good | 1 |
bad | 0 |
bad | 0 |
A特征取值为good时,熵值为:
−
0.75
log
0.75
−
0.25
log
0.25
=
0.811
-0.75\log0.75-0.25\log0.25=0.811
−0.75log0.75−0.25log0.25=0.811
A特征取值为bad时,熵值为:
−
1
log
1
=
0
-1\log1=0
−1log1=0
则有
H
(
D
∣
A
)
=
4
6
∗
0.811
+
2
6
∗
0
=
0.645
H(D|A)=\frac{4}{6}*0.811+\frac{2}{6}*0=0.645
H(D∣A)=64∗0.811+62∗0=0.645
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
=
1
−
0.645
=
0.355
g(D,A)=H(D)-H(D|A)=1-0.645=0.355
g(D,A)=H(D)−H(D∣A)=1−0.645=0.355
信息增益存在一个问题:
如果按照ID进行分类的话,则分类后熵值为0,信息增益最大,但并没有实际分类意义。即如果特征的取值有多个选择,更容易使得数据变得更“纯”,其信息增益更大,决策树首先会挑选该属性作为树的定点,结果会得到一颗庞大的且深度很浅的树。这样的划分是极为不合理的。
信息增益率
信息增益率在信息增益的基础上,增加考虑特征自生熵
特征A对训练数据集D的信息增益率表示为
g
r
(
D
,
A
)
g_r(D,A)
gr(D,A),则有:
g
r
(
D
,
A
)
=
g
(
D
,
A
)
/
H
(
A
)
g_r(D,A)=g(D,A)/H(A)
gr(D,A)=g(D,A)/H(A)
在本例中特征A的自生熵为
H
(
A
)
=
−
4
6
log
4
6
−
2
6
log
2
6
=
0.918
H(A)=-\frac{4}{6}\log\frac{4}{6}-\frac{2}{6}\log\frac{2}{6}=0.918
H(A)=−64log64−62log62=0.918
则有信息增益率
g
r
(
D
,
A
)
=
0.355
/
0.918
=
0.387
g_r(D,A)=0.355/0.918=0.387
gr(D,A)=0.355/0.918=0.387
而如果以ID作为特征进行分类的话,信息增益
g
(
D
,
I
D
)
=
1
g(D,ID)=1
g(D,ID)=1
ID自生熵为
H
(
I
D
)
=
−
6
∗
(
1
6
log
1
6
)
=
−
log
1
6
=
2.585
H(ID)=-6*(\frac{1}{6}\log\frac{1}{6})=-\log\frac{1}{6}=2.585
H(ID)=−6∗(61log61)=−log61=2.585
则有信息增益率为
g
r
(
D
,
I
D
)
=
g
(
D
,
I
D
)
/
H
(
I
D
)
=
1
/
2.585
=
0.386
g_r(D,ID)=g(D,ID)/H(ID)=1/2.585=0.386
gr(D,ID)=g(D,ID)/H(ID)=1/2.585=0.386
GINI系数
除了使用熵作为样本集合不确定性的度量之外,还可以使用GINI系数进行样本集合不确定性的衡量。
G
i
n
i
(
p
)
=
∑
k
=
1
k
p
k
(
1
−
p
k
)
=
1
−
∑
k
=
1
k
p
k
2
Gini(p)=\displaystyle\sum_{k=1}^kp_k(1-p_k)=1-\displaystyle\sum_{k=1}^kp_k^2
Gini(p)=k=1∑kpk(1−pk)=1−k=1∑kpk2
G
i
n
i
Gini
Gini系数的取值范围为[0,1],当数据的不确定性越大时,
G
i
n
i
Gini
Gini系数的值越接近1,不确定性越低时,
G
i
n
i
Gini
Gini系数越接近0
3、决策树如何处理连续性特征?
通过二分将特征分成2个类别
首先将连续值进行排序,然后选取某个分界点使得数据分成两个类别
举个例子:
某连续性特征
x
x
x按照数值大小排序后的结果为
60,70,75,80,90,95,100,120,125,150
则可将数据一分为二,例如分为
x
<
=
85
和
x
>
85
x<=85和x>85
x<=85和x>85
本质为将连续值离散化的过程
4、决策树剪枝策略
决策树对于训练数据具有很好的分类能力,理论上可以完全分得开数据,但对于未知的数据未必有好的分类能力,因此决策树的泛化能力弱,过拟合风险很大。
- 预剪枝策略:边建立决策树边进行剪枝的操作(更实用)
通过限制树的深度,叶子节点个数,叶子节点样本数,信息增益量等实现 - 后剪枝策略:当建立完决策树后再进行剪枝操作
通过一定的衡量标准来剪枝
C α ( T ) = C ( T ) + α . ∣ T l e a f ∣ C_\alpha(T)=C(T)+\alpha.|T_{leaf}| Cα(T)=C(T)+α.∣Tleaf∣
∣ T l e a f ∣ |T_{leaf}| ∣Tleaf∣:代表叶子节点个数
C ( T ) C(T) C(T):每个叶子节点的损失,例如等于叶子结点的样本数* G i n i Gini Gini系数
目标:损失越小越好
叶子节点越多损失越大
5、sklearn中决策树模型参数
- criterion: gini 、 entropy(用什么作为特征选择的衡量标准, G i n i Gini Gini系数或熵值)
- splitter :best 、random (前者是在所有特征中找最好的切分点,后者是在部分特征中(数据量大的时候))
- max_features:None(所有)、log2、sqrt、N(特征小于50的时候一般使用所有的)
- max_depth(数据少或者特征少的时候可以不管这个值,如果模型样本量多且特征也多,可以限制该参数)
- min_samples_spilt(如果某节点的样本数少于min_samples_split,则不会继续使用特征进行划分,如果样本量不大,可以不管该值,如果样本数量级非常大,推荐限制该值)
- max_leaf_nodes(通过限制最大叶子节点数,可以防止过拟合,默认是’None’,即不限制最大叶子节点数,如果特征不多可以不管该值,如果加以限制)
- class_weight(指定样本各类别的权重,主要是防止训练集某些类别样本过多导致训练的决策树过于偏向这些类别,可以使用‘balanced’,则算法会自己计算权重,样本量少的类别对应的样本权重会高)
- min_impurity_split(这个值限制了决策树的增长,如果某节点的不纯度(基尼系数、信息增益)小于这个阈值则不会再生成新的子节点)
- n_estimators:要建立树的个数