继上篇文章决策树之 ID3 与 C4.5,本文继续讨论另一种二分决策树 Classification And Regression Tree,CART 是 Breiman 等人在 1984 年提出的,是一种应用广泛的决策树算法,不同于 ID3 与 C4.5, CART 为一种二分决策树, 每次对特征进行切分后只会产生两个子节点,而ID3 或 C4.5 中决策树的分支是根据选定特征的取值来的,切分特征有多少种不同取值,就有多少个子节点(连续特征进行离散化即可)。CART 设计回归与分类,接下来将分别介绍分类树与回归树。
回归树与模型树
首先简单回忆线性回归:是对于数据集 $D = {(x_1,y_1),(x_2,y_2),…,(x_N,y_N)}$ ,线性回归的模型为:
\[ \bar{y}_i = \theta ^T x_i \]
损失函数可以记做:
\[L(\theta) = \frac{1}{N}\sum_i(\bar{y}_i - y_i)^2\]
Liner Regression 已经很强大,可以处理线性数据集,对于一些样本呈弯曲的点,可以考虑引入高次特征的线性回归,或者进行局部加权回归,局部加权回归模型同线性回归,只不过损失函数进行了一些改进:
\[L(\theta) = \frac{1}{N}\sum_iw_i(\bar{y}_i - y_i)\]
\[w_i = exp \left (\frac{x_i-x}{2 \tau ^2} \right ) \]
这里 $\tau$ 控制了权值变化的速率,每个样本 $x_i$ 都有一个权值,权值根据 $\tau$ 来调整大小,离样本点 $x_i$ 越近的样本其权值却大,局部加权回归的预测模型同线性回归,关于局部加权回归与线性回归的图形分别如下:
线性回归是一个关于全局数据的模型,把整个数据集合当做一个目标优化,当数据并不呈现线性的时候,比如如下图所示的数据,全局共享一个优化目标显然不是一个很好的选择,这时可以对数据进行划分,划分后的数据进行分片线性回归明显是一个不错的选择。下图所示的数据可以划分为 5 个分片分别进行处理,分片之后可以对每个分片分别做一个模型,这种情况可以称之为模型树;也可以简单的对分片后的数据取均值,这种情况就是最普通的回归树。接下来分别对回归树与模型树进行介绍。
回归树采用均方误差作为损失函数,树生成时会递归的按最优特征与最优特征下的最优取值对空间进行划分,直到满足停止条件为止,停止条件可以人为设定,比如说设置某个节点的样本容量 $ < MIN$ 则不再进行切分,或者当切分后的损失减小值 $< \varepsilon $,则停止切分,生成叶节点。
对于生成的回归树,每个叶节点的类别为落到该叶节点数据的标签的均值,假设特征空间被划分为 $M$ 个部分,即现在有 $M$ 个叶节点分别为 $R_1,R_2,…,R_M$ , 对应的数据量分别为 $N_1,N_2,…,N_M$ ,则叶节点的预测值分别为:
\[c_m = \frac{1}{N_m}\sum_{x_i \in R_m} y_i \ \ \ \ \ \ (*)\]
回归树为一颗二叉树,每次都是按特征下的某个取值进行划分,每一个内部节点都是做一个对应特征的判断,直至走到叶节点得到其类别,构建这棵树的难点在于怎么选取最优的切分特征与切分特征对应的切分变量。若这里按第 $j$ 个特征的取值 $s$ 进行切分,切分后的两个区域分别为:
\[R_1(j,s) = \left \{ x_i|x_i^j \le s \right \} \ \ \ R_2(j,s) = \left \{ x_i|x_i^j > s \right \}\]
根据 $(*)$ 分别计算 $R_1$ 与 $R_2$ 的类别估计 $c_1$ 与 $c_2$, 然后计算按 $(j,s)$ 切分后得到的损失:
\[\min_{j,s} \left [ \sum _{x_i \in R_1}(y_i –c_1)^2 + \sum_{x_i \in R_2} (y_i –c_2)^2 \right ]\]
找到使损失最小的 $(j,s)$ 对即可,递归执行 $(j,s)$ 的选择过程直到满足停止条件为止。综上给出回归树的算法:
输入: 训练数据集 $D$
输出: 回归树 $T$
1)求解选择最优的切分特征 $j$ 与 切分特征取值 $s$ ,$(j,s)$ 应满足以下条件:
\[\min_{j,s} \left [ \sum _{x_i \in R_1}(y_i –c_1)^2 + \sum_{x_i \in R_2} (y_i –c_2)^2 \right ]\]
2)计算按照最优 $(j,s)$ 切分的数据集:
\[R_1(j,s) = \left \{ x_i|x_i^j \le s \right \} \ \ \ R_2(j,s) = \left \{ x_i|x_i^j > s \right \}\]
\[c_1 = \frac{1}{N_1}\sum_{x_i \in R_1} y_i \ \ \ \ c_2 = \frac{1}{N_2}\sum_{x_i \in R_2} y_i \]
3)递归条用 $1) \sim 2)$ ,知道满足停止条件。
4)返回决策树 $T$.
分类树