ID3算法使用信息增益为准则来选择划分属性
信息熵:
H
(
X
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(X)=-\sum_{i=1}^{n}p_{i}\log{p_{i}}
H(X)=−i=1∑npilogpi
熵度量了事物的不确定性,越不确定的事物,熵越大.
当样本集D中第i类样本所占的比例
p
i
p_{i}
pi,则D的信息熵为:
H
(
X
)
=
E
n
t
(
D
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(X)=Ent(D)=-\sum_{i=1}^{n}p_{i}\log{p_{i}}
H(X)=Ent(D)=−i=1∑npilogpi
信息熵越小说明事件越稳定.
换到决策树中可以表示某类样本所占总样本比例越大.
信息增益
假定数据集D中离散属性a有v个可能的取值,则会产生v个分支节点,其中第v个分支节点包含了D中所有属性a上取值为
a
v
a^{v}
av的样本,记为
D
v
D^{v}
Dv,可以用属性a对样本集D进行划分得到信息增益.描述了在知道a后数据集D不确定性减少的程度,
G
a
i
n
(
D
,
a
)
=
E
n
t
(
D
)
−
∑
i
=
1
n
D
v
D
E
n
t
(
D
v
)
Gain(D,a)=Ent(D)-\sum_{i=1}^{n}\frac{D^{v}}{D}Ent(D^{v})
Gain(D,a)=Ent(D)−i=1∑nDDvEnt(Dv)
公式中后面的部分越小,减小的程度越小,增益越大.
算法过程
- 初始化信息增益的阈值 ϵ \epsilon ϵ
- 判断样本是否为同一类输出 D i D_{i} Di,如果是则返回节点树T,标记类别为 D i D_{i} Di
- 判断特征是否为空,如果是则返回单节点树T,标记类别为样本中输出类别D实例数最多的类别
- 计算A中的各个特征(一共n个)对输出D的信息增益,选择信息增益最大的特征Ag
- 如果Ag的信息增益小于阈值 ϵ \epsilon ϵ,则返回单节点树T, 标记类别为样本中输出类别D实例数最多的类别
- 否则,按特征Ag的不同取值Agi将对应的样本输出D分成不同的类别Di,每个类别产生一个子节点,对应特征值为Agi
- 对于所有的子节点,令D=Di,A=A-{Ag}递归调用2-6步,得到子树Ti并返回.
ID3的缺点
- ID3没有考虑连续特征
- ID3采用信息增益大的特征优先作为决策树的节点.在相同条件下,取值比较多的特征比取值比较少的特征信息增益大,
- ID3对缺失值的情况没有做考虑
- 没有考虑过拟合的问题
条件熵
条件熵
设有随机变量(X,Y),其联合概率分布为:
P
(
X
=
x
i
i
,
Y
=
y
j
)
=
p
i
j
,
i
=
1
,
2
,
.
.
.
,
n
;
j
=
1
,
2
,
.
.
.
,
n
P(X=x_{i}i,Y=y_{j})=p_{ij},i=1,2,...,n;j=1,2,...,n
P(X=xii,Y=yj)=pij,i=1,2,...,n;j=1,2,...,n
条件熵表示H(Y|X)在已知随机变量X的条件下随机变量Y的不确定性,定义为:
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
H(Y|X)=\sum_{i=1}^{n}pi_{}H(Y|X=x_{i})
H(Y∣X)=i=1∑npiH(Y∣X=xi)
这里,
p
i
=
P
(
X
=
x
i
)
,
i
=
1
,
2
,
.
.
.
,
n
p_{i}=P(X=x_{i}),i=1,2,...,n
pi=P(X=xi),i=1,2,...,n。当熵和条件熵中的概率由数据估计(极大似然估计)得到时,所对应的熵分别为经验熵和经验条件熵。