Machine_Learning_2019_Task 10 CART
要求
- 学习Gini指数
- 学习回归、分类树
- 剪枝
CART树
- 目标变量是类别型——分类树:Gini指数
- 目标变量是连续型——回归树:平方误差最小化(前期Task8已解释)
- 算法
- 决策树生成
- 决策树剪枝
CART与ID3的异同点
二元划分
- 二叉树不易产生数据碎片,精确度往往也会高于多叉树。
选择变量的不纯度
- 分类型目标:Gini指数。
- 连续型目标:最小平方残差。
CART生成算法
输入:训练数据集D,停止计算条件
输出:CART决策树
从根结点,递归对每个结点操作:
- 设结点数据集为D,对每个特征A,对其每个值a,根据样本点对A=a的测试为是或否,将D分为D1,D2,计算A=a的Gini指数;
- 在所有的特征A以及所有可能的切分点a中,选择Gini指数最小的特征和切分点,将数据集分配到两个子结点中;
- 对两个子结点递归调用1,2步骤;
- 生成CART树。
剪枝过程
- 用预剪枝或后剪枝对训练集生长的树进行剪枝。
形成子树序列:从生成算法产生的决策树T0底端开始不断剪枝,直到T0的根结点,形成子树序列{T0,T1…Tn};
剪枝过程中,计算子树的损失函数:
Cα(T)=C(T)+α∣T∣ C_{\alpha}(T)=C(T)+\alpha|T| Cα(T)=C(T)+α∣T∣
对固定的a一定存在损失函数最小的子树,表示为Ta,当a变大时,最优子树Ta偏小,a=0时,整体树最优,a趋近无穷大,单结点最优;将a从小增大,
o=α0<α1<⋯<αn<+∞ \mathrm{o}=\alpha_{0}<\alpha_{1}<\dots<\alpha_{n}<+\infty o=α0<α1<⋯<αn<+∞
最有字数序列:
{T0,T1,⋯ ,Tn} \left\{T_{0}, T_{1}, \cdots, T_{n}\right\} {T0,T1,⋯,Tn}
从T0开始剪枝,以t为单结点树的损失函数:
Cα(t)=C(t)+α C_{\alpha}(t)=C(t)+\alpha Cα(t)=C(t)+α
以t为根结点的子树Tt的损失函数:
Cα(Tt)=C(Tt)+α∣Tt∣ C_{\alpha}\left(T_{t}\right)=C\left(T_{t}\right)+\alpha\left|T_{t}\right| Cα(Tt)=C(Tt)+α∣Tt∣
当a=0及a很小时,
Cα(Ti)<Cα(t) C_{\alpha}\left(T_{i}\right)<C_{\alpha}(t) Cα(Ti)<Cα(t)
不断增大a,当
Cα(Tt)=Cα(t)α=C(t)−C(Tt)∣Tt∣−1 C_{\alpha}\left(T_{t}\right)=C_{\alpha}(t) \quad \alpha=\frac{C(t)-C\left(T_{t}\right)}{\left|T_{t}\right|-1} Cα(Tt)=Cα(t)α=∣Tt∣−1C(t)−C(Tt)
Tt与t有相同损失函数值,但t结点更少,所以剪枝Tt。对T0中每个内部结点t,计算:
g(t)=C(t)−C(Tt)∣Tt∣−1 g(t)=\frac{C(t)-C\left(T_{t}\right)}{\left|T_{t}\right|-1} g(t)=∣Tt∣−1C(t)−C(Tt)
在T0中剪去g(t)最小的Tt,将得到的子树作为T1,同时将最小的g(t)设为a1,T1为区间[a1,a2) 的最优子树;直到根节点,不断增加a的值,产生新的区间。
通过交叉验证法在独立的验证数据集上对子树序列{T0,T1…Tn}进行测试,从中选择最优子树Ta;
即,利用独立的验证数据集,测试子树序列中各子树的平方误差或基尼指数,最小的决策树就是最优决策树。
树建立
- 如果目标变量是标称的,并且是具有两个以上的类别,则CART可能考虑将目标类别合并成两个超类别(双化);
- 如果目标变量是连续的,则CART算法找出一组基于树的回归方程来预测目标变量。
CART之分类树的生成(Gini指数)
-
分类问题中,假设有k个类,样本点属于k的概率Pk,则概率分布的基尼指数:
Gini(p)=∑k=1Kpk(1−pk)=1−∑k=1Kpk2 \operatorname{Gini}(p)=\sum_{k=1}^{K} p_{k}\left(1-p_{k}\right)=1-\sum_{k=1}^{K} p_{k}^{2} Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2 -
二分类问题:
Gini(p)=2p(1−p) \operatorname{Gini}(p)=2p(1-p) Gini(p)=2p(1−p) -
对给定的样本集合D,基尼指数:
Gini(D)=1−∑k=1K(∣Ck∣∣D∣)2 \operatorname{Gini}(D)=1-\sum_{k=1}^{K}\left(\frac{\left|C_{k}\right|}{|D|}\right)^{2} Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2 -
如果样本集合D根据特征A是否为a被分割成D1和D2,即:
D1={(x,y)∈D∣A(x)=a},D2=D−D1 D_{1}=\{(x, y) \in D | A(x)=a\}, \quad D_{2}=D-D_{1} D1={(x,y)∈D∣A(x)=a},D2=D−D1 -
则在特征A的条件下,集合D的基尼指数:
Gini(D,A)=∣D1∣∣D∣Gini(D1)+∣D2∣∣D∣Gini(D2) \operatorname{Gini}(D, A)=\frac{\left|D_{1}\right|}{|D|} \operatorname{Gini}\left(D_{1}\right)+\frac{\left|D_{2}\right|}{|D|} \operatorname{Gini}\left(D_{2}\right) Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)