全部笔记的汇总贴:统计学习方法读书笔记汇总贴
决策树(decision tree )是一种基本的分类与回归方法。
一、决策树模型与学习
可以将决策树看成一个if-then规则的集合。将决策树转换成if-then规则的过程是这样的:由决策树的根结点到叶结点的每一条路径构建一条规则:路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。
二、特征选择
特征选择在于选取对训练数据具有分类能力的特征。这样可以提高决策树学习的效率。通常特征选择的准则是信息增益或信息增益比。
则随机变量 X X X的熵定义为 H ( X ) = − ∑ i = 1 n p i l o g p i p i 为 概 率 H(X)=-\sum_{i=1}^np_ilog p_i\;\;\;\;p_i为概率 H(X)=−i=1∑npilogpipi为概率熵越大,随机变量的不确定性就越大。
信息增益: g ( D , A ) = H ( D ) − H ( D ∣ A ) 其 中 H ( D ∣ A ) 为 特 征 A 给 定 条 件 下 D 的 经 验 条 件 熵 g(D,A)=H(D)-H(D|A)\;\;\;\;其中H(D|A)为特征A给定条件下D的经验条件熵 g(D,A)=H(D)−H(D∣A)其中H(D∣A)为特征A给定条件下D的经验条件熵
信息增益的算法:
- 计算数据集 D D D的经验熵 H ( D ) H(D) H(D)
- 计算特征 A A A对数据集D的经验条件熵 H ( D ∣ A ) H(D|A) H(D∣A)
- 计算信息增益(一般选取信息增益最大的作为最有特征)
信息增益比: 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 ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ log 2 ∣ D i ∣ ∣ D ∣ , n 是 特 征 A 取 值 的 个 数 H_A(D)=-\sum_{i=1}^n\frac{|D_i|}{|D|}\log_2\frac{|D_i|}{|D|},n是特征A取值的个数 HA(D)=−i=1∑n∣D∣∣Di∣log2∣D∣∣Di∣,n是特征A取值的个数
三、决策树的生成
(一)ID3算法
从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一棵决策树。ID3 相当于用极大似然法进行概率模型的选择。
具体的构造过程恶意根据P77的例5.3。
ID3 算法只有树的生成,所以该算法生成的树容易产生过拟合。
(二)C4.5算法
C4.5 算法与 ID3 算法相似,C4.5 算法对 ID3 算法进行了改进。C4.5 在生成的过程中,用信息增益比来选择特征。
四、决策树的剪枝
决策树的剪枝往往通过极小化决策树整体的损失函数 (loss function)或代价函数(cost function)来实现。
决策树学习的损失函数可以定义为
C
α
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
+
α
∣
T
∣
C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T|
Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣其中
∣
T
∣
|T|
∣T∣为树
T
T
T的叶节点个数,
t
t
t是树
T
T
T的叶节点,该叶节点有
N
t
N_t
Nt个样本点,其中
k
k
k类的样本点有
N
t
k
N_{tk}
Ntk个,
k
=
1
,
2
,
⋯
,
K
k=1,2,\cdots,K
k=1,2,⋯,K,
H
t
(
T
)
H_t(T)
Ht(T)为叶节点
t
t
t上的经验熵,
α
≥
0
\alpha\ge0
α≥0是参数。其中经验熵为
H
t
(
T
)
=
−
∑
k
N
t
k
N
t
log
N
t
k
N
t
H_t(T)=-\sum_k\frac{N_{tk}}{N_t}\log\frac{N_{tk}}{N_t}
Ht(T)=−k∑NtNtklogNtNtk
所以,损失函数可以记作
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
其
中
,
C
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
=
−
∑
t
=
1
∣
T
∣
∑
k
=
1
K
N
t
k
log
N
t
k
N
t
C_\alpha(T)=C(T)+\alpha|T|\\其中,C(T)=\sum_{t=1}^{|T|}N_tH_t(T)=-\sum_{t=1}^{|T|}\sum_{k=1}^KN_{tk}\log\frac{N_{tk}}{N_t}
Cα(T)=C(T)+α∣T∣其中,C(T)=t=1∑∣T∣NtHt(T)=−t=1∑∣T∣k=1∑KNtklogNtNtk
较大的 α \alpha α促使选择较简单的模型(树), 较小的 α \alpha α促使选择较复杂的模型(树)。 α = 0 \alpha=0 α=0意味着只考虑模型与训练数据的拟合程度, 不考虑模型的复杂度。
大致思想是将一组叶结点回缩到其父结点,之前与之后的整体树分别为 T B T_B TB与 T A T_A TA,其对应的损失函数值分别是 C α ( T B ) C_\alpha(T_B) Cα(TB)与 C α ( T A ) C_\alpha(T_A) Cα(TA),如果 C α ( T A ) ≤ C α ( T B ) , 即 剪 掉 该 组 叶 节 点 后 , 损 失 函 数 更 小 C_\alpha(T_A)\le C_\alpha(T_B),即剪掉该组叶节点后,损失函数更小 Cα(TA)≤Cα(TB),即剪掉该组叶节点后,损失函数更小则进行剪枝,即将父结点变为新的叶结点。
这种基于损失函数的剪枝算法只需考虑两个树的损失函数的差,其计算可以在局部进行。所以,决策树的剪枝算法可以由一种动态规划的算法实现。
五、CART算法
CART由特征选择、树的生成及剪枝组成,既可以用于分类也可以用于回归。
(一)决策树生成
基于训练数据集生成决策树,生成的决策树要尽量大。
先求每个特征对应每个取值的基尼系数,基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似。
对于二分类问题, G i n i ( p ) = 2 p ( 1 − p ) Gini(p)=2p(1-p) Gini(p)=2p(1−p)
对于多分类问题,我们需要求每一个取值的基尼系数,然后选取最小的为该特征的基尼系数。例如样本分为三类,个数依次为 A 1 , A 2 , A 3 A_1,A_2,A_3 A1,A2,A3,总数为 ∣ D ∣ = A 1 + A 2 + A 3 |D|=A_1+A_2+A_3 ∣D∣=A1+A2+A3
所以该特征的基尼系数为: min { G i n i ( D , A 1 ) , G i n i ( D , A 2 ) , G i n i ( D , A 3 ) } \min\{Gini(D,A_1),Gini(D,A_2),Gini(D,A_3)\} min{Gini(D,A1),Gini(D,A2),Gini(D,A3)},其中 G i n i ( D , A 1 ) = A 1 ∣ D ∣ G i n i ( A 1 ) + A 2 + A 3 ∣ D ∣ G i n i ( A 2 + A 3 ) Gini(D,A_1)=\frac{A_1}{|D|}Gini(A_1)+\frac{A_2+A_3}{|D|}Gini(A_2+A_3) Gini(D,A1)=∣D∣A1Gini(A1)+∣D∣A2+A3Gini(A2+A3)
依次选取基尼系数最小的特征进行决策树的建立。
(二)决策树剪枝
用验证数据集对己生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
方法类似于前面提到的剪枝算法,只不过我们通过变化的选取 α \alpha α来得到一组树,通过交叉验证的方法找到最优子树。
利用独立的验证数据集,测试子树序列各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认为是最优的决策树。
下一章传送门:统计学习方法读书笔记(六)-逻辑斯蒂回归与最大熵模型