1.信息论基础
熵 联合熵 条件熵 信息增益 基尼不纯度
熵:(entropy)是表示随机变量不确定性的度量,如果一件事有
n
n
n种可能结果,每种结果的概率为
p
i
(
i
=
1
,
2
…
,
n
)
p_i(i=1,2…,n)
pi(i=1,2…,n),那么熵表示为
H
=
−
∑
i
=
1
n
p
i
l
o
g
p
i
H = -\sum _{i=1}^{n}p_ilogp_i
H=−i=1∑npilogpi
熵越大,随机变量的不确定性就越大
当
p
=
0
p=0
p=0或者
p
=
1
p=1
p=1时,
H
(
p
)
=
0
H(p) = 0
H(p)=0,随机变量完全没有不确定性,当
p
=
5
p = 5
p=5时,
H
(
p
)
=
1
H(p)=1
H(p)=1熵最大,即随机变量的不确定性最大。
联合熵(Joint Entropy) 服从联合分布为
p
(
x
,
y
)
p(x,y)
p(x,y)的一对离散型随机变量
(
X
,
Y
)
(X,Y)
(X,Y),其联合熵
H
(
X
,
Y
)
H(X,Y)
H(X,Y)定义为:
H
(
x
,
y
)
=
−
∑
x
,
y
p
(
x
,
y
)
l
o
g
p
(
x
,
y
)
=
−
∑
i
=
1
∑
j
=
1
p
(
x
i
,
y
i
)
l
o
g
p
(
x
i
,
y
i
)
H(x,y) = -\sum _{x,y}p(x,y)logp(x,y)=-\sum _{i=1}\sum _{j=1}p(x_i,y_i)logp(x_i,y_i)
H(x,y)=−x,y∑p(x,y)logp(x,y)=−i=1∑j=1∑p(xi,yi)logp(xi,yi)
条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X)表示在已知随机变量
X
X
X的条件下随机变量
Y
Y
Y的不确定性:
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
(
X
=
x
i
)
H
(
Y
∣
X
=
x
i
)
=
−
∑
x
p
(
x
)
∑
y
p
(
y
∣
x
)
l
o
g
p
(
y
∣
x
)
=
−
∑
x
∑
y
p
(
x
)
p
(
y
∣
x
)
l
o
g
p
(
y
∣
x
)
=
−
∑
x
∑
y
p
(
x
,
y
)
l
o
g
p
(
y
∣
x
)
H(Y|X) = \sum _{i=1} ^{n}p(X=x_i)H(Y|X=x_i)\\ =-\sum _{x} p(x)\sum _{y}p(y|x)logp(y|x)\\=-\sum _{x} \sum _{y}p(x)p(y|x)logp(y|x)\\=-\sum _{x} \sum _{y}p(x,y)logp(y|x)
H(Y∣X)=i=1∑np(X=xi)H(Y∣X=xi)=−x∑p(x)y∑p(y∣x)logp(y∣x)=−x∑y∑p(x)p(y∣x)logp(y∣x)=−x∑y∑p(x,y)logp(y∣x)
信息增益(information gain)表示得知特征
X
X
X的信息而使得类
Y
Y
Y的信息的不确定性减少的程度。特征
A
A
A对训练数据集
D
D
D的信息增益
g
(
D
,
A
)
g(D,A)
g(D,A)定义为集合
D
D
D的经验熵
H
(
D
)
H(D)
H(D)与特征
A
A
A给定条件下
D
D
D的经验条件熵
H
(
D
∣
A
)
H(D|A)
H(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)
一般的熵
H
(
Y
)
H(Y)
H(Y)与条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X)之差称为互信息,决策树学习中的信息增益等价于训练数据集中类与特征的互信息。
基尼不纯度:将来自集合中的某种结果随机应用于集合中的某一数据项的预期误差率,即从一个数据集中随机选取子项,度量其被错误划分到其他组里的概率。
I
G
(
f
)
=
∑
i
=
1
m
f
i
(
1
−
f
i
)
=
1
−
∑
i
=
1
m
f
i
2
I_G(f) = \sum _{i=1} ^{m}f_i(1-f_i) = 1 - \sum _{i=1}^{m}f_i^2
IG(f)=i=1∑mfi(1−fi)=1−i=1∑mfi2
基尼不纯度越小,纯度越高,分类效果越好,纯度最低时
f
i
=
f
2
=
…
f
m
=
1
m
f_i = f_2 = …f_m = \frac{1}{m}
fi=f2=…fm=m1
2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景
- 算法步骤:特征选择、决策树生成、剪枝
- ID3:采用信息增益划分数据
ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归地构建决策树。由于熵越大表示样本的不确定性越大,因此使用划分前后集合的熵的差值衡量使用当前特征对于样本集合 D D D划分效果的好坏。使用某个特征 A A A划分集合 D D D,划分前后的信息增益为:
信 息 增 益 = e n t r o p y ( 划 分 前 ) − e n t r o p y ( 划 分 后 ) 即 g ( D , A ) = H ( D ) − H ( D , A ) 信息增益 = entropy(划分前) - entropy(划分后)\\即g(D,A) = H(D) - H(D,A) 信息增益=entropy(划分前)−entropy(划分后)即g(D,A)=H(D)−H(D,A)
因此,使用所有的特征划分数据集 D D D,得到多个特征划分数据集 D D D的信息增益,选取信息增益最大的特征作为节点特征,由该特征的不同取值建立子节点;子节点采用递归调用以上方法,构建决策树;直到所有特征的信息增益均很小或者没有特征可以选择终止。
缺点:信息增益倾向于取值较多的特征
-**C4.5:为解决ID3问题,采用信息增益比划分数据 **
信息增益比 = 惩罚参数 * 信息增益,即 g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A) = \frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A),其中 H A ( D ) H_A(D) HA(D)对于样本集合,将当前特征 A A A作为随机变量,求得的经验熵
H A ( D ) = − ∑ i = 1 n ∣ D i ∣ D l o g 2 ∣ D i D H_A(D)=-\sum _{i=1}^{n}\frac{|D_i|}{D}log_2|\frac{D_i}{D} HA(D)=−i=1∑nD∣Di∣log2∣DDi
信息增益的本质:信息增益基础上乘以一个惩罚参数,特征较多时,惩罚参数较小,特征个数少时,惩罚参数较大,惩罚参数表示为:数据集 D D D以特征 A A A作为随机变量的熵的倒数
惩 罚 参 数 = 1 H A ( D ) = 1 − ∑ i = 1 n ∣ D i ∣ D l o g 2 ∣ D i D 惩罚参数=\frac{1}{H_A(D)}=\frac{1}{-\sum _{i=1}^{n}\frac{|D_i|}{D}log_2|\frac{D_i}{D}} 惩罚参数=HA(D)1=−∑i=1nD∣Di∣log2∣DDi1
缺点:信息增益比倾向于取值少的特征,由于特征值少, H A ( D ) H_A(D) HA(D)较小,倒数变大,因此信息增益比大。因此,在候选特征中找出信息增益高于平均水平的特征,然后在这些特征中再选择信息增益率最高的特征。
CART:采用基尼指数划分数据
基尼指数(基尼不纯度):样本集合中一个随机选中的样本被分错的概率。
Gini指数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,集合越不纯,即 基尼指数(基尼不纯度) = 样本被选中的概率 * 样本被分错的概率,即
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p) = \sum _{k=1}^{K}p_k(1-p_k) = 1-\sum _{k=1}^{K}p _k^2 Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
p k p_k pk表示选中的样本属于 k k k类别的概率,则这个样本被分错的概率是 1 − p k 1-p_k 1−pk,样本集合中有 K K K个类别,一个随机选中的样本可以属于这个 k k k类别中的任意一个。
样本集合 D D D的Gini指数表示为: 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=1K(∣D∣∣Ck∣)2,这里的 C k C_k Ck是 D D D中属于第 k k k类的样本子集, K K K是类的个数。如果样本集合 D D D根据特征 A A A是否取某一个可能值 a a a被分割成 D 1 D_1 D1和 D 2 D_2 D2两个部分,即 D 1 = ( x , y ) ∈ D ∣ A ( x ) = a , D 2 = D − D 1 D_1={(x,y)\in D|A(x)=a},D_2=D-D_1 D1=(x,y)∈D∣A(x)=a,D2=D−D1,那么在特征 A A A条件下,集合 D D D的基尼指数定义为:
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 , A i ) Gini(D,A_i) Gini(D,Ai),找出基尼指数最小的划分作为划分点,对集合进行划分。
3. 回归树原理
一个回归树对应着输入空间(特征空间)的一个划分以及在划分的单元上的输出值,假设已将输入空间划分为
M
M
M个单元
R
1
,
R
2
,
…
,
R
M
R_1,R_2,…,R_M
R1,R2,…,RM,并且每个单元
R
m
R_m
Rm上有一个固定的输出值
c
m
c_m
cm,于是回归树模型可以表示为
f
(
x
)
=
∑
m
=
1
M
c
m
I
(
x
∈
R
m
)
f(x) = \sum _{m=1} ^{M}c_mI(x\in R_m)
f(x)=m=1∑McmI(x∈Rm)
当输入空间划分确定后,采用均方误差
∑
x
i
∈
R
m
(
y
i
−
f
(
x
i
)
)
2
\sum _{x_i \in R_m}(y_i - f(x_i))^2
∑xi∈Rm(yi−f(xi))2表示回归树对于训练数据的预测误差,单元
R
m
R_m
Rm上的
c
m
c_m
cm的最优值
c
^
m
\hat{c}_m
c^m是
R
m
R_m
Rm上所有输入实例
x
i
x_i
xi对应的输出
y
i
y_i
yi的均值,即
c
^
m
=
a
v
e
(
y
i
∣
x
i
∈
R
m
)
\hat{c}_m = ave(y_i|x_i \in R_m)
c^m=ave(yi∣xi∈Rm)
问题是怎样对输入空间进行划分,采用启发式方法,选择第
j
j
j个变量
x
(
j
)
x^{(j)}
x(j)和它的取值
s
s
s作为切分变量和切分点并定义两个区域
R
1
(
j
,
s
)
=
{
x
∣
x
(
j
)
≤
s
}
R
2
(
j
,
s
)
=
{
x
∣
x
(
j
)
>
s
}
R_1(j,s) = \{x|x^{(j)}\leq s\} \qquad R_2(j,s) = \{x|x^{(j)}> s\}
R1(j,s)={x∣x(j)≤s}R2(j,s)={x∣x(j)>s}
寻找最优切分变量
j
j
j和最优切分点
s
s
s:
m
i
n
j
,
s
[
m
i
n
c
1
∑
x
1
∈
R
1
(
j
,
s
)
(
y
i
−
c
1
)
2
+
m
i
n
c
2
∑
x
i
∈
R
2
(
j
,
s
)
(
y
i
−
c
2
)
2
]
min _{j,s} [min _{c_1}\sum _{x_1 \in R_1(j,s)}(y_i-c_1)^2+min _{c_2}\sum _{x_i \in R_2(j,s)}(y_i-c_2)^2]
minj,s[minc1x1∈R1(j,s)∑(yi−c1)2+minc2xi∈R2(j,s)∑(yi−c2)2]对固定输入变量
j
j
j可以找到最优切分点
s
s
s
c
^
1
=
a
v
e
(
y
i
∣
x
i
∈
R
1
(
j
,
s
)
)
c
^
2
=
a
v
e
(
y
i
∣
x
i
∈
R
2
(
j
,
s
)
)
\hat{c}_1=ave(y_i|x_i\in R_1(j,s)) \qquad \hat{c}_2 = ave(y_i|x_i \in R_2(j,s))
c^1=ave(yi∣xi∈R1(j,s))c^2=ave(yi∣xi∈R2(j,s)) 遍历所有输入变量,找到最优的切分变量
j
j
j,构成一个对
(
j
,
s
)
(j,s)
(j,s),依此将输入空间划分为两个区域,然后对每个区域重复上述划分过程,知道满足停止条件。
4. 决策树防止过拟合手段
预剪枝:是在决策树的生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分即结束树的构建并将当前节点标记为叶结点
后剪枝:先从训练集生成一棵完整的决策树,然后自底向上地对叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化为性能提升,则将该子树替换为叶结点。泛化性能的提升可以使用交叉验证数据来检查修剪的效果,通过使用交叉验证数据,测试扩展节点是否会带来改进。如果显示会带来改进,可以继续扩展该节点。如果精度降低,则不应该扩展,节点应该转换为叶节点。
5. 模型评估
一个好的模型需要较低的泛化误差和训练误差。
TP-正类预测为正类数,FN-正类预测为负类数,FP-负类预测为正类数,TN-负类预测为负类数。
P-正类数(P=TP+FN) N-负类数(N=FP+TN)
Accuracy:
A
c
c
u
r
a
c
y
=
T
P
+
T
N
P
+
N
Accuracy = \frac{TP+TN}{P+N}
Accuracy=P+NTP+TN
Precision
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
Precision = \frac{TP}{TP+FP}
Precision=TP+FPTP
Recall
R
e
c
a
l
l
=
T
P
P
Recall = \frac{TP}{P}
Recall=PTP
F1 Score
F
1
=
2
∗
P
r
e
c
i
s
i
o
n
∗
R
e
c
a
l
l
R
e
c
a
l
l
+
P
r
e
c
i
s
i
o
n
F1 = \frac{2*Precision*Recall}{Recall+Precision}
F1=Recall+Precision2∗Precision∗Recall
ROC 曲线和 PR曲线
在混淆矩阵中,真正率 TPR = TP / (TP+FN),假正率 FPR = FP / (FP + TN),其中TPR也即灵敏度(sensitivity),FPR也即(1-特异度)(specificity)。以纵坐标为TPR,横坐标为FPR,ROC 曲线实际就是不同阈值下TPR和FPR的轨迹。每一个预测结果在ROC空间中以一个点代表。阈值:阈值就是一个分界线,用于判定正负例的,在模型预测后我们会给每条预测数据进行打分(0<score<1)
PR曲线
P-R曲线的P就是查准率(Precision),R就是查全率(Recall)。用P作为横坐标,R作为纵坐标,就可以画出P-R曲线。对于分类器,通过调整分类阈值,可以得到不同的P-R值,从而可以得到一条曲线(纵坐标为P,横坐标为R)。通常随着分类阈值从大到小变化(大于阈值认为P),Precision减小,Recall增加。比较两个分类器好坏时,显然是查得又准又全的比较好,也就是的PR曲线越往坐标(1,1)的位置靠近越好。
6. sklearn参数详解,Python绘制决策树
DecisionTreeClassifier(criterion=“gini”,
splitter=“best”,
max_features = None,
max_depth=None,
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.,
max_features=None,
random_state=None,
max_leaf_nodes=None,
min_impurity_decrease=0.,
min_impurity_split=None,
class_weight=None,
presort=False)
1.特征选择标准(criterion):‘gini’或者’entropy’选择基尼指数或者信息增益,根据选用的模型选择
2.划分点选择标准(splitter):‘best’或者’random’,前者在特征的所有划分点中找出最优的划分点,后者是随机在部分划分点中找出局部最优的划分点,‘best’适合样本量小,而’random’适合样本量大
3.划分考虑最大特征数(max_features):默认None,以为考虑所有特征数,如果是‘log2’意味着划分最多考虑
l
o
g
2
(
N
)
log_2(N)
log2(N),如果是’sqrt’或者’auto’则意味着划分最多
N
\sqrt{N}
N
4.决策树最大深度(max_depth):特征少时默认,样本量大,特征多时可以限制在10~100之间
5.内部节点再划分所需最小样本数(min_samples_split):默认是2,如果样本量小,默认即可。样本量数量级非常大,增大数值
6.叶子节点最少样本数(min_weight_fraction_leaf):默认是1, 可以输入最少样本数的整数,或者最少样本数占样本总数百分比
7.分类特征值最大数量(max_features):‘默认使用全部特征值
8.最大节点数(max_leaf_nodes):默认None
9.节点划分最小不纯度下降(min_impurity_decrease) 如果该分裂导致杂质的减少大于或等于该值,则将分裂节点。
10.节点划分最小不纯度(min_impurity_split) 这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值,则该节点不再生成子节点。即为叶子节点
11.随机发生器种子(random_state):None表示随机数字发生器np.random采用的RandomState instance, 如果是一个整数值,random_state 是随机数字发生器的种子
12.是否预分类数据(presort):默认False,是否预分类数据以加速训练时最好分类的查找,True时会减慢训练过程