文章目录
前言
集成学习常用到的基本分类器就是决策树,那么什么是回归决策树呢?下面带大家重点了解下决策树中的CART算法。
一、什么是决策树?
1.1 决策树定义
分类决策树模型是一种描述实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。
1.2 决策树的构建过程
用决策树分类, 从根结点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到子结点:这时,每一个子结点对应着该特征的一个取值。然后递归建树,直到到达叶子结点。最后将实例分到叶结点的类中。如下图,根据不同的特征,将实例分为4类(根据CART算法举例)。
二、什么是CART算法
2.1 算法简介
CART是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。
CART算法由两部分组成:
- 决策树生成:基于训练数据集生成决策树,生成决策树要尽量大
- 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝标准
2.2 特征选择
CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。这样的决策树等价于递归地二分每个特征,将输入空间(特征空间)划分为有限个单元,并在这些单元上确定预测的概率分布(在输入给定条件下输出条件概率分布)
2.3 CART生成(CART包含分类和回归问题,这里只介绍回归问题。)
- 假设X和Y分别为输入和输出变量,并且Y是连续变量(标签),给定训练数据集
D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) \begin{aligned} D = {(x_1, y_1), (x_2, y_2),...,(x_N, y_N)} \end{aligned} D=(x1,y1),(x2,y2),...,(xN,yN)
在训练数据集所在的输入空间(特征空间),递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,从而构建二叉决策树。 - 一棵回归树对应着输入空间(特征空间)的一个划分以及在划分的单元上的输出。假设已将输入空间划分为M个单元 R 1 , R 2 , . . . , R M R_1, R_2, ... ,R_M R1,R2,...,RM,并且在每个单元 R m R_m Rm上有一个固定的输出值 c m c_m cm,于是回归树模型可表示为
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) (1) \begin{aligned} f(x) = \displaystyle\sum_{m=1}^{M}c_mI(x\in R_m)\tag{1} \end{aligned} f(x)=m=1∑McmI(x∈Rm)(1)
-
划分输入空间。采用启发式的方法,选择第 j 个变量 x ( j ) x^{(j)} x(j)作为切分变量,s为其取值,作为切分点,并定义两个划分后的区域:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } R 2 ( j , s ) = { x ∣ x ( j ) > s } (2) \begin{aligned} R_1(j,s) = \{{x|x^{(j)} \le s}\}\\ R_2(j,s) = \{{x|x^{(j)} > s}\}\tag{2} \end{aligned} R1(j,s)={x∣x(j)≤s}R2(j,s)={x∣x(j)>s}(2) -
确定好输入空间划分后,可以用平方误差 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \displaystyle\sum_{x_i\in R_m}{(y_i - f(x_i))^2} xi∈Rm∑(yi−f(xi))2来表示回归树对于训练数据集的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。
m i n j , s [ m i n c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + m i n c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] (3) \begin{aligned} \underset{j,s}{min}[\underset{c_1}{min}\displaystyle\sum_{x_i\in R_1(j,s)}(y_i - c_1)^2 + \underset{c_2}{min}\displaystyle\sum_{x_i\in R_2(j,s)}(y_i - c_2)^2]\tag{3} \end{aligned} j,smin[c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2](3)
易知,单元 R m R_m Rm上的 c m c_m cm的最优值 c m ^ \hat{c_m} cm^是 R m R_m Rm上的所有输入实例 x i x_i xi对应的输出 y i y_i yi的均值,即
c 1 ^ = a v e ( y i ∣ x i ∈ R 1 ( j , s ) ) c 2 ^ = a v e ( y i ∣ x i ∈ R 2 ( j , s ) ) (4) \begin{aligned} \hat{c_1} = ave(y_i|x_i\in R_1(j,s))\\ \hat{c_2} = ave(y_i|x_i\in R_2(j,s))\tag{4} \end{aligned} c1^=ave(yi∣xi∈R1(j,s))c2^=ave(yi∣xi∈R2(j,s))(4) -
遍历所有输入变量,找到最优的切分变量 j 和对应的切分点 s,构成一个(j, s)对。依次将输入空间划分为两个区域,重复步骤,直到满足条件为止。根据模型得到最后的决策树:
f ( x ) = ∑ m = 1 M c m ^ I ( x ∈ R m ) (5) \begin{aligned} f(x) = \displaystyle\sum_{m=1}^{M}\hat{c_m}I(x\in R_m)\tag{5} \end{aligned} f(x)=m=1∑Mcm^I(x∈Rm)(5)
2.4 剪枝
2.4.1 什么是剪枝
剪枝,顾名思义就是裁掉子树或者树叶。在决策树学习中将已生成的树进行简化的过程称为剪枝。
2.4.2 为什么要剪枝
剪枝的目的很简单,就是为了避免过拟合(训练数据集和测试数据集的效果差异太大),使训练得到的模型对未知数据有更准确的预测。
2.4.3 CART剪枝算法
CART剪枝算法主要分为两步:
- 从生成算法产生的决策树 T 0 T_0 T0底端开始不断剪枝,直到T_0的根结点,形成一个子树序列 { T 0 , T 1 , . . . , T n } \{T_0,T_1,...,T_n\} {T0,T1,...,Tn}
- 通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。
1.剪枝,形成子树序列
- Breiman等人证明:可以用递归的方法对树进行剪枝。将 α \alpha α从小增大,0 = α < α 1 < . . . < α n < + ∞ \alpha < \alpha_1 < ... < \alpha_n < +\infty α<α1<...<αn<+∞,产生一系列的区间 [ α i , α i + 1 ) [\alpha_i, \alpha_{i+1}) [αi,αi+1),i = 0,1,…,n;剪枝得到的子树序列区间 α ∈ [ α i , α i + 1 ) \alpha \in [\alpha_i, \alpha_{i+1}) α∈[αi,αi+1),i = 0,1,…,n的最优子树序列{ T 0 , T 1 , . . . , T n T_0, T_1, ..., T_n T0,T1,...,Tn},序列中的子树是嵌套的。
- 具体地,从整体树
T
0
T_0
T0开始剪枝。对
T
0
T_0
T0的任意内部结点 t,以 t 为单结点的损失函数为:
C α ( t ) = C ( t ) + α (6) \begin{aligned} C_\alpha(t) = C(t) + \alpha\tag{6} \end{aligned} Cα(t)=C(t)+α(6)
以 t 为根结点的子树 T t T_t Tt的损失函数为
C α ( T t ) = C ( T t ) + α ∣ T t ∣ (7) \begin{aligned} C_\alpha(T_t) = C(T_t) + \alpha|T_t|\tag{7} \end{aligned} Cα(Tt)=C(Tt)+α∣Tt∣(7)
其中,C(T)为对训练数据的预测误差,|T|为子树叶子结点个数,参数 α ( α ≥ 0 ) \alpha(\alpha \geq 0) α(α≥0)是权衡训练数据的拟合程度和模型复杂度, C α ( T t ) C_\alpha(T_t) Cα(Tt)是参数为 α \alpha α时子树T的整体损失。
-
当 α = 0 及 α 充 分 小 时 , 有 不 等 式 \alpha = 0及\alpha充分小时,有不等式 α=0及α充分小时,有不等式
C α ( T t ) < C α ( t ) (8) \begin{aligned} C_\alpha(T_t) < C_\alpha(t)\tag{8} \end{aligned} Cα(Tt)<Cα(t)(8) -
当 α 增 大 时 , 在 某 一 α 有 \alpha增大时,在某一\alpha有 α增大时,在某一α有
C α ( T t ) = C α ( t ) (9) \begin{aligned} C_\alpha(T_t) = C_\alpha(t)\tag{9} \end{aligned} Cα(Tt)=Cα(t)(9) -
当 α 再 增 大 时 , 不 等 式 8 反 向 。 \alpha再增大时,不等式8反向。 α再增大时,不等式8反向。只要 α = C ( t ) − C ( T t ) ∣ T t ∣ − 1 \alpha = \frac{C(t) - C(T_t)}{|T_t| - 1} α=∣Tt∣−1C(t)−C(Tt), T t T_t Tt与t有相同损失函数值,而 t 的结点少,故 t 比 T t T_t Tt更可取,对 T t T_t Tt进行剪枝。
-
为此,对 T 0 T_0 T0中每一内部结点 t,计算
g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 (10) \begin{aligned} g(t) = \frac{C(t) - C(T_t)}{|T_t| - 1}\tag{10} \end{aligned} g(t)=∣Tt∣−1C(t)−C(Tt)(10)
它表示剪枝后整体损失函数减少的程度。在 T 0 T_0 T0中剪去g(t)最小的 T t T_t Tt,将得到的子树作为 T 1 T_1 T1,同时将最小的g(t)设为 α 1 \alpha_1 α1, T 1 T_1 T1为区间[ α 1 , α 2 \alpha_1, \alpha_2 α1,α2)的最优子树。 -
一直这样剪枝下去,直到根结点。在这一过程中,不断地增加 α \alpha α的值,产生新的区间。
2.在剪枝得到的子树序列 T 0 , T 1 , . . . , T n {T_0,T_1,...,T_n} T0,T1,...,Tn中通过交叉验证选取最优子树 T α T_\alpha Tα
- 具体地,利用独立的验证数据集,测试子树序列 T 0 , T 1 , . . . , T n {T_0,T_1,...,T_n} T0,T1,...,Tn中各棵子树的平方误差。平方误差最小的决策树被认为是最优的决策树。在子树序列中,每棵子树 T 0 , T 1 , . . . , T n {T_0,T_1,...,T_n} T0,T1,...,Tn都对应于一个参数 α 1 , α 2 , . . . , α n \alpha_1,\alpha_2,... ,\alpha_n α1,α2,...,αn。所以,当最优子树 T k T_k Tk确定时,对应的 α \alpha α也决定,即可得到最优决策树 T α T_\alpha Tα。
参考文献
李航.统计学习方法(第二版) [M].北京:清华大学出版社,2019