信息论基础
1、熵和信息熵
熵是热力学中表征物质状态的张量,用符号S表示,物理意义是体系混乱程度的度量。熵表示体系不确定性,熵越大,不确定性越大。
1948年,香农提出信息熵的概念,表示随机变量不确定性的读量,设随即标量X是一个离散随即标量,其概率分布为:
P
(
X
=
x
i
)
=
p
i
,
i
=
1
,
2
,
3
,
4
P(X = x_i)=p_i, i=1,2,3,4
P(X=xi)=pi,i=1,2,3,4
则随机变量X的熵定义为:
H
(
X
)
=
−
∑
i
=
1
N
p
i
l
o
g
p
i
H(X) = -\sum_{i=1}^{N}p_ilogp_i
H(X)=−i=1∑Npilogpi
熵越大,随机变量的不确定性越大。当
p
i
=
1
/
n
p_i=1/n
pi=1/n时,随机变量的熵最大,等于logn。
2、信息增益
信息增益又叫做互信息,它便是的是在得知特征X的信息后,使得类Y 的信息不确定性(熵)减少的程度。
g
(
Y
,
X
)
=
H
(
Y
)
−
H
(
Y
∣
X
)
g(Y,X)=H(Y)-H(Y|X)
g(Y,X)=H(Y)−H(Y∣X)
3、基尼系数
基尼系数用于分类问题中,假设有k个类,样本属于第k类的概率为p_k,基尼系数反映从数据集中随机抽取两个样本,其类别标记不一致的概率。
则该概率分布的基尼指数定义为:
G
i
n
i
(
p
)
=
∑
k
K
p
k
(
1
−
p
k
)
=
1
−
∑
k
K
p
k
2
Gini(p) = \sum_{k}^{K}p_k(1-p_k)=1-\sum_{k}^{K}p_k^2
Gini(p)=k∑Kpk(1−pk)=1−k∑Kpk2
决策树
决策树就是平时所说的if-then条件,组合成树的结构,决策树有两种节点,叶子节点,和非叶节点。
非叶节点代表条件,叶节点代表实例所属的类别。
生成决策树,最重要的一点就是选择哪个特征作为当前树的分割节点,这就叫做特征选择。有了特征就有了决策树的生成。
ID3&C4.5
一、数据
给定训练数据集
T
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
.
.
.
,
(
x
N
,
y
N
)
T{(x_1,y_1), (x_2,y_2),......,(x_N,y_N)}
T(x1,y1),(x2,y2),......,(xN,yN)
其中
x
i
=
(
x
i
1
,
x
i
2
,
.
.
.
,
x
i
n
)
T
xi = (x_i^1, x_i^2,...,x_i^n)^T
xi=(xi1,xi2,...,xin)T表示特征向量,N是特征的个数,
y
i
∈
1
,
2
,
3
,
.
.
.
,
K
y_i \in {1,2,3,...,K}
yi∈1,2,3,...,K表示类别,N是样本的个数。
二、决策树
常见决策树模型有以下三种(CART决策树既可以做分类也可以做回归)
1、ID3:使用信息增益作为选择特征,相当于用极大似然法进行概率模型选择;
2、C4.5:和ID3算法类似,只是使用信息增益比选择特征;
3、CART:递归构建二叉决策树,回归树:使用平方误差,分类树:使用基尼系数。
其中, H A ( D ) = H ( D ∣ A ) H_A(D) = H(D|A) HA(D)=H(D∣A)
我们总结出(ID3, C4.5)决策树算法的伟大吗
1、输入数据集D,特征集合A,阈值e
2、输出决策树T
3、如果D中所有实例输出同一类Ck,则T作为单节点树,并将类Ck作为该节点的类标记,返回T;
4、如果A=空集,则T为单节点树,将D中实例数最多的类Ck作为该节点的类标记,返回T;
5、否则,根据信息增益或者信息增益比计算特征A对D的值,从而选择当前最优的特征;
6、如果Ag的信息增益小于阈值e,则设置T为单节点树,将D中实例最多的类Ck作为当前类标记,返回T;
7、否则,根据Ag中每一个不同的ai,根据Ag=ai将D划分为若干个非空子集,对于第i个子节点,以Di为数据集,A-Ag为特征集,递归构造决策树Ti,返回Ti
8、剪枝。
过拟合和剪枝
决策树建立过程中,只考虑经验损失最小化,未考虑结构损失,容易出现在训练集熵表现良好,出现过拟合问题。
从模型损失熵进行考虑,给损失函数加熵正则项进行优化:
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_α(T) = C(T)+α|T|
Cα(T)=C(T)+α∣T∣
树的叶子节点个数|T|,t是树T的叶节点,该叶节点有Nt个样本,其中k类的样本有Ntk个,k=1,2,…,Ht(T)是叶子节点t经验上,α≤0是参数,平衡经验损失和正则项,得到计算公式
C
α
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
+
α
∣
T
∣
C_α(T) = \sum_{t=1}^{|T|}N_tH_t(T)+α|T|
Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣
其中经验熵为:
H
t
(
T
)
=
−
∑
k
N
t
k
H
t
log
N
t
k
H
t
H_t(T) = -\sum_ {k}^{}\frac{N_{tk}}{H_{t}}\log\frac{N_{tk}}{H_t}
Ht(T)=−k∑HtNtklogHtNtk
决策树优化过程考虑了经验风险最小化和减小模型复杂度两个方向,剪枝之后,经验风险增加但是模型复杂度降低,所以基于两个方面的平衡进行剪枝。
算法:
输入:算法产生的决策树,参数α
1、计算每个节点的经验熵
2、递归从树的叶节点向上回溯,如果将某个叶节点回缩到其父节点前后的整体树对应的Tb和Ta,如果Tb对应的损失小于Ta,表示剪掉之后损失减小,就进行剪枝
3、重复2,知道不能继续为止。
动态规划算法:
上述算法是一个递归问题,存在很多重复项计算,这里我们使用dfs+备忘录进行加速计算
输入:算法产生的整个决策树,参数α
修建之后的树Tα
1、dp[所有树的节点] = {0};保留所有节点的信息熵
2、计算每个cur_node节点的信息熵,if dp[cur_node]直接返回,否则执行2;
3、递归从树的叶节点向上回溯,假设某个叶节点回缩到父节点前后的整体树对应的Tb和Ta,如果
C
α
(
T
A
)
≤
C
α
(
T
B
)
C_α(T_A)≤C_α(T_B)
Cα(TA)≤Cα(TB),表示剪掉之哦吼损失减小,就进行剪枝。且
d
p
[
c
u
r
n
o
d
e
]
=
C
α
(
T
A
)
dp[curnode] = C_α(T_A)
dp[curnode]=Cα(TA)
4、重复2, 直到不能继续为止,得到损失函数最小的子树.
CART
分类与回归树(classification and regression tree, CART)与上述决策树不同
1、既可以做分类又可以做回归
2、是二叉树,内部节点的特征只有yes和no两个选项。
3、分类的特征划分依照jini系数,回归则根据平方误差。
一、数据
D
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
D = (x_1, y_1),(x_2, y_2), ..., (x_N,y_N)
D=(x1,y1),(x2,y2),...,(xN,yN)当xi是连续变量时是回归问题,xi是离散变量时为分类问题
回归树
在训练数据上,根据某一个特征将每个特征区域划分为两个字区域并决定每个子区域的输出值,递归构建二叉树
1、选择最优切分变量j和切分点s, 求解
遍历变量j, 扫描所有的s,找到使得上式最小的对(j,s)
2、使用选定的(j,s)划分区域并决定相应的输出值
3、继续对两个字区域调用1和2,直到满足条件
分类树
基尼指数计算公式如下:
G
i
n
i
(
p
)
=
∑
k
=
1
K
p
k
(
1
−
p
k
)
Gini(p) = \sum_{k=1}^{K}p_k(1-p_k)
Gini(p)=k=1∑Kpk(1−pk)基于数据D,得到
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
K
p
k
2
Gini(D) = 1-\sum_{k=1}^{K}p_k^2
Gini(D)=1−k=1∑Kpk2
如果D根据特征A是否为一可能取值被划分为D1和D2两个部分,Ck是D中所属第k类样本的子集,此时集合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)
基尼指数和熵一样同样表示集合D的不确定性,基尼指数越大表示数据D的不确定性越大。
输入:训练数据D,停止计算的条件
输出:CART决策树
1、计算所有特征A的每一个值a对应的条件基尼指数的值,选择最优的划分得到和.
2、递归对两个数据集D1和D2继续调用1,知道满足条件.
3、生成CART树的分类树.
4、预测的时候,根据决策树,x落到的叶子节点对应的类别表示这个预测x的类别.