一、节点字段的选择(ID3算法)
1.信息增益
信息熵:
H
(
p
1
,
p
2
,
.
.
.
,
p
n
)
=
−
∑
k
=
1
k
p
k
l
o
g
2
p
k
H(p_{1},p_{2},...,p_{n})= - \sum_{k=1}^{k}p_{k}log_{2}p_{k}
H(p1,p2,...,pn)=−k=1∑kpklog2pk
对于某个事件,有k个可能值,pk表示k个可能值的发生概率。
在实际应用中,会将概率pk的值用经验概率替换
H
(
D
)
=
−
∑
k
=
1
k
∣
C
k
∣
∣
D
∣
l
o
g
2
∣
C
k
∣
∣
D
∣
H(D)=-\sum_{k=1}^{k}\frac{|C_{k}|} {|D|}log_{2}\frac{|C_{k}|} {|D|}
H(D)=−k=1∑k∣D∣∣Ck∣log2∣D∣∣Ck∣|D|表示事件中的所有样本点,|Ck|表示事件的第k个可能值出现的次数。
条件熵: H ( D ∣ A ) = ∑ i , k P ( A i ) H ( D k ∣ A i ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 k ∣ D i k ∣ ∣ D i ∣ l o g 2 ∣ D i k ∣ ∣ D i ∣ H(D|A)=\sum_{i,k}P(A_{i})H(D_{k}|A_{i})=-\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}\sum_{k=1}^{k}\frac{|D_{ik}|}{|D_{i}|}log_{2}\frac{|D_{ik}|}{|D_{i}|} H(D∣A)=i,k∑P(Ai)H(Dk∣Ai)=−i=1∑n∣D∣∣Di∣k=1∑k∣Di∣∣Dik∣log2∣Di∣∣Dik∣P(Ai)表示A事件的第i种值对应的概率,H(Dk|Ai)已知Ai的情况下,D事件为k值得条件熵
信息增益: G a i n A ( D ) = H ( D ) − H ( D ∣ A ) Gain_{A}(D)=H(D)-H(D|A) GainA(D)=H(D)−H(D∣A)对于已知事件A,事件D的信息增益就是D的信息熵与A事件下D的条件熵之差,事件A对D的影响越大,条件熵H就会越小,Gain(D)就会越大。
数值型自变量,信息增益:
①数值型自变量x有n个观测,做升序降序处理,计算相邻两个数值之间的均值x,从而得到n-1个均值
②以均值xi作为判断值,将数据拆分为两部分,一部分样本量为n1,均值满足x>xi,另一部分为n2,x<xi,假设第一部分数据子集中两类分别对应的样本量为C11,C12,第二部分为C21,C22,进而计算对应的增益Gain,重复得到n-1个均值下的Gain,选择最大的增益作为特征。
二、信息增益率(C4.5算法)
G
a
i
n
R
a
t
i
o
A
(
D
)
=
G
a
i
n
A
(
D
)
H
A
Gain_Ratio_{A}(D)=\frac{Gain_{A}(D)}{H_{A}}
GainRatioA(D)=HAGainA(D)
HA为事件的信息熵
三、基尼指数
CART算法,分类回归树
基尼指数:
G
i
n
i
(
p
1
,
p
2
,
.
.
.
,
p
n
)
=
∑
k
=
1
k
p
k
(
1
−
p
k
)
=
1
−
∑
k
=
1
k
p
k
2
Gini(p_{1},p_{2},...,p_{n})=\sum_{k=1}^{k}p_{k}(1-p_{k})=1-\sum_{k=1}^{k}p_{k}^{2}
Gini(p1,p2,...,pn)=k=1∑kpk(1−pk)=1−k=1∑kpk2
pk表示第k个可能值的发生概率。
其中ID3和C4.5都属于多分支的决策树,CART属于单分支。
Python中的sklearn模块选择了一个较优的决策树算法,CART算法,处理离散分类DecisionTreeClassifier,处理连续分类DecisionTreeRegressor。
四、决策树剪枝
1、误差降低剪枝法
①将决策树非叶子节点作为候选对象,将其子孙节点删除,变为叶节点
②将频数最高作为分类标准
③新树在数据集预测
④重复
2、悲观剪枝法
剪枝前后误判率:
e
′
(
T
)
=
E
(
T
)
+
0.5
N
e'(T)=\frac{E(T)+0.5}{N}
e′(T)=NE(T)+0.5
e
′
(
T
t
)
=
∑
i
=
1
L
(
E
(
t
i
)
)
+
0.5
∑
i
=
1
L
N
i
e'(T_{t})=\frac{\sum_{i=1}^{L}(E(t_{i}))+0.5}{\sum_{i=1}^{L}N_{i}}
e′(Tt)=∑i=1LNi∑i=1L(E(ti))+0.5
e’(T)剪枝后中间节点T被换成叶节点的误判率
e’(Tt)中间节点T剪枝前其对应叶节点的误判率