决策树
熵
$H = -\sum_{i = 1}^{n} p(x_{i}) \log p(x_{i})$
$n$ 是分类的数目,熵越大代表随机变量 $X$ 的不确定性越大。
可知 $0 \leqslant H(P) \leqslant \log n$
条件熵 $H(Y|X)$ 表示已知随机变量 $X$ 的条件下随机变量 $Y$ 的不确定性。
定义 $H(Y|X)=\sum_{i=1}^{n} p_{i} H(Y|X=x_{i})$
这里 $p_{i}=P(X=x_{i})$
信息增益
表示得知特征 $X$ 后对类 $Y$ 的信息的不确定性减少的程度。
$g(D,A)=H(D)-H(D|A)$
计算信息增益算法:
(1)计算数据集 $D$ 的经验熵 $H(D)$
$H(D)=-\sum_{k=1}^{K} \frac{|C_{k}|}{|D|} \log \frac{|C_{k}|}{|D|}$
(2)计算出 $H(D|A)$
$H(D|A)=\sum_{i=1}^{n} \frac{D_{i}}{|D|} H(D_{i})=-\sum_{i=1}^{n} \frac{D_{i}}{|D|} \sum_{k=1}^{K} \frac{D_{ik}}{D_{i}}\log \frac{D_{ik}}{D_{i}}$
(3)计算出 $g(D,A)=H(D)-H(D|A)$
信息增益比
定义 $g_{R}(D,A)=\frac{g(D,A)}{H_{A}(D)}$
其中 $g(D,A)$ 在信息增益中有所定义,$H_{A}(D)=-\sum_{i=1}^{n}\frac{D_{i}}{|D|} \log \frac{|D_{i}|}{|D|}$,即 $D$ 关于 $A$ 的熵值。
ID3 算法
输入:训练数据集 $D$,特征集 $A$ 阈值 $e$
输出:决策树 $T$
核心思路:在分裂时遍历每种特征,选择信息增益最大的特征来进行分裂,并递归建树。
C4.5 算法
在 $ID3$ 的基础上将信息增益替换成信息增益比即可。
决策树剪枝
定义损失函数 $C_{\alpha} = \sum_{t = 1}^{|T|} N_{t} H_{t}(T)+\alpha |T|$
其中 $H_{t}(T)=-\sum_{k = 1}^{K} \frac{N_{tk}}{N_{t}} \log \frac{N_{tk}}{N_{t}}$
将第一项展开后可得 $C(T)=-\sum_{t=1}^{|T|} \sum_{k=1}^{K} N_{tk} \log \frac{N_{tk}}{N_{t}}$
最小化这个东西实际上是用极大似然估计来进行模型的选择。
后面的 $\alpha |T|$ 皆在控制模型复杂度,$\alpha$ 被调到较大值时会使得 $|T|$ 变小,模型变简单。
回归树的生成
给定训练数据集 $D=\left \{ (x_{1}, y_{1}), (x_{2}, y_{2}), (x_{3}, y_{3})....(x_{N}, y_{N}) \right \}$,其中 $Y$ 为连续型输入变量。
回归树对应着输入空间的划分,$R_{1}, R_{2},....R_{M}$,$M$ 为划分数量,每个划分单元有统一的输出值 $c_{m}$
那么回归模型就会被表示为:
$f(x)=\sum_{m=1}^{M} c_{m}I(x\in R_{m})$
在对输入空间划分的确定时,用 $\sum_{x_{i} \in R_{m}} (y_{i}-f(x_{i}))^2$ 来表示训练误差。
那么显然在划分单元 $R_{m}$ 中对应的使平方损失最小的输出值就是 $\hat{c_{m}} = \mathrm{ave}(y_{i}|x_{i} \in R_{m})$,即 $y_{i}$ 的均值。
在节点 $t$ 划分时定义:
$R_{1}(j,s)=\left \{ x|x^{(j)} \leqslant s\right \}$ 和 $R_{2}(j,s)=\left \{ x|x^{(j)} > s\right \}$
这里 $j,s$ 分别为切分特征 $j$ 与切分点 $s$,是自己指定的。
那么在选择切分 $j, s$ 时皆在求解:
$\min_{j,s} \left [ \sum_{x_{i} \in R_{1}(j,s) } (y_{i}-c_{1})^2+\sum_{x_{i} \in R_{2}(j,s)} (y_{i}-c_{2})^2 \right ]$
其中,$c_{1} = \mathrm{ave}(y_{i}|x_{i} \in R_{1})$, $c_{2} = \mathrm{ave}(y_{i}|x_{i} \in R_{2})$
这样递归下去直到满足停止条件就可以构成一个回归树:
$f(x) = \sum_{m=1}^{M} \hat{c_{m}}I(x \in R_{m})$
Gini 系数
在分类问题中,假设有 $K$ 个类,样本点属于第 $k$ 个类的概率为 $p_{k}$,那么概率分布的基尼系数就被定义为:
$\mathrm{Gini}(p)=\sum_{k=1}^{K}p_{k}(1-p_{k})=1-\sum_{k=1}^{K} p^2_{k}$
对于一个给定的样本集合 $D$,其基尼系数为:
$\mathrm{Gini}(D)=1-\sum_{k=1}^{K}(\frac{|C_{k}|}{|D|})^2$
其中 $C_{k}$ 是 $D$ 中属于第 $k$ 类的样本子集,$K$ 是类的个数。
如果样本 $D$ 根据特征 $A$ 的取值 $a$ 会被划分成两个部分 $D_{1}$ 与 $D_{2}$,那么在特征 $A$ 的条件下,基尼系数被定义为:
$\mathrm{Gini}(D,A)=\frac{|D_{1}|}{|D|}\mathrm{Gini}(D_{1})+\frac{|D_{2}|}{|D|}\mathrm{Gini}(D_{2})$
基于 Gini 系数的决策树生成算法:
每次在进行分类时选择 $\mathrm{Gini}(D,A)$ 最小的 $A$ 作为分类变量进行划分,并递归执行下去。
CART 剪枝
先前定义过 $C_{\alpha}(T)=C(T)+\alpha |T|$,$\alpha$ 是惩罚模型过大的参数。
$CART$ 剪枝皆在令 $\alpha$ 从小增大,$0=\alpha_{1}<\alpha_{2}<....<\alpha_{n}<+\infty$,产生一系列区间 $[\alpha_{i}, \alpha_{i+1})$。
在每个 $\alpha \in [\alpha_{i}, \alpha_{i+1})$ 中求出该区间对应的最优决策树,然后得到决策树序列 $\left \{ T_{0},T_{1}.....T_{n}\right \}$
对于一个子树 $T_{t}$,显然 $\alpha$ 小时不剪枝会更优,而 $\alpha$ 特别大时剪枝会更好,那么就会有一个决策点。
这个决策点就是剪枝的损失等于不剪支的损失,即 $C_{\alpha}(T_{t})=C_{\alpha}(t)$,可知 $\alpha = \frac{C(t)-C(T_{t})}{|T_{t}|-1}$
那么对于每一个子树 $T_{t}$,都可以求出 $g(t)=\frac{C(t)-C(T_{t})}{|T_{t}|-1}$.
初始情况下 $T_{0}=T$,即未剪枝的决策树。那么可以选择一个 $g(t)$ 最小的子树进行子树合并,得到新树 $T_{1}$
显然 $T_{1} \in T_{0}$,而 $T_{0}$ 就是 $\alpha \in [0, g(t))$ 这个区间段对应的决策树,$\alpha>g(t)$ 时就对应着 $T_{1}$.
对于 $k>1$ 时同理,最后可以得到决策树集合 $\left \{ T_{0},T_{1}.....T_{n}\right \}$
完整算法框架:
输入:CART 算法生成的决策树 $T_{0}$
输出:最优决策树 $T_{1}$
(1)设 $k=0, T=T_{0}$
(2)设 $\alpha = +\infty$
(3)自下而上对节点 $t$ 就是 $g(t)$,得:
$g(t)=\frac{C(t)-C(T_{t})}{|T_{t}|-1}$
$\alpha = \mathrm{min}(\alpha, g(t))$
(4)对 $g(t)=\alpha$ 得节点 $t$ 进行剪枝,并以 $t$ 中多数类表决 $t$ 节点的种类,得到树 $T$.
(5)设 $k=k+1$,$\alpha_{k}=\alpha$,$T_{k}=T$。
(6)如果 $T_{k}$ 不是由根节点和两个叶节点构成的树,回到步骤(2);
(7)采用交叉验证法在序列 $\left \{ T_{0},T_{1}.....T_{n}\right \}$ 中选择最优决策树 $T_{\alpha}$。