集成学习—决策树(CART)

集成学习:

集成学习Ensemble learning)是指通过构建并合并多个学习器(模型)来完成学习任务。它一般先产生一组个体学习器,再用某种策略将它们结合起来,常常可以获得比单一学习器显著优越的泛化性能(结合策略包括平均法、投票法和学习法等,具体可以参考周志华老师的西瓜书,这里就不详细讨论)。
根据个体学习器的生成方式,目前集成学习方法大致可以分两大类:

  • Boosting(个体学习器间存在强依赖关系,必须串行生成的序列化方法,即下个分类器是基于上个分类器),它主要以降低偏差为目标,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显,代表算法为AdaBoost (Freund and Schapire, 1997)、GBDT(Friedman, 2001)以及较为流行的XGBoost(Tianqi Chen, 2016)和LightGBM(Guolin Ke et al., 2017)等。
  • Bagging(个体学习器间不存在强依赖关系,可同时生成的并行化方法,即所有分类器之间没有任何关系),它主要以降低方差为目标,因此 Bagging 能基于泛化性能相当弱的学习器构建出很强的集成,代表算法就是随机森林(Breiman, 2001)。

决策树:

决策树Decision tree)是一种可以用来做分类和回归的监督学习方法,其目的是创建一种模型从数据特征中学习简单的决策规则来预测一个目标变量的值。它的基本流程遵循简单且直观的“分而治之”的策略,即一颗决策树从根结点开始,根据某种划分准则,生成另外的子结点,再由这些子结点一直递归到生成若干个叶结点。

决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的剪枝。决策树算法最著名的代表是ID3(Quinlan, 1986)、C4.5(Quinlan, 1993)和CART树 (classification and regression tree)(Breiman, 1984)。其中,ID3和C4.5的计算和信息熵(information entropy)有关,CART树则用的是基尼指数(Gini index)或MSE。

CART树是在集成学习中经常被用来作为基学习器,因此这里主要讨论CART树(其他的也类似)。

1. 特征选择和树的生成

一颗好的决策树希望将每个叶结点的纯度提升,在衡量每个结点的纯度时,有信息熵、信息增益(information gain)、增益率(gain ratio)和基尼指数等度量样本集合纯度的指标。特征选择是决定用哪个特征来划分空间,一般说来,对分类树使用基尼指数最小化准则,对回归树使用MSE最小化准则。

1.1 CART分类树

在分类问题中,对于给定的样本 D \mathcal{D} ,假设有 K K 个类别,第 k k 个类别的概率为 p k p_k ,则基尼指数定义为
G i n i ( p ) = k = 1 K p k ( 1 p k ) \begin{aligned} Gini(p)=\sum_{k=1}^Kp_k(1-p_k) \end{aligned} 基尼指数反映了从样本 D \mathcal{D} 中随机抽取两个样本,其类别标记不一致的概率,故基尼指数越小,数据集的纯度越高。

同样的,对于给定的样本 D \mathcal{D} ,假设有 K K 个类别,第 k k 个类别的数量为 C k C_k ,则样本 D \mathcal{D} 的基尼指数为:
G i n i ( D ) = k = 1 K C k D ( 1 C k D ) = k = 1 K C k D k = 1 K ( C k D ) 2 = 1 k = 1 K ( C k D ) 2 \begin{aligned} Gini(\mathcal{D})&=\sum_{k=1}^K {|C_k|\over |\mathcal{D}|} (1-{|C_k|\over |\mathcal{D}|} )\\ &= \sum_{k=1}^K {|C_k|\over |\mathcal{D}|} -\sum_{k=1}^K({|C_k|\over |\mathcal{D}|} )^2\\ &= 1-\sum_{k=1}^K( {|C_k|\over |\mathcal{D}|})^2 \end{aligned} 其中 D |\mathcal{D}| 表示样本 D \mathcal{D} 中的元素个数。

特别地,如果样本 D \mathcal{D} 中根据特征 A A 的某个值 a a ,把 D \mathcal{D} 分成 D 1 \mathcal{D}_1 D 2 \mathcal{D}_2 两部分,则在特征 A A 的条件下, D \mathcal{D} 的基尼指数为
G i n i ( D , A ) = D 1 D G i n i ( D 1 ) + D 2 D G i n i ( D 2 ) \begin{aligned} Gini(\mathcal{D},A)&= {|\mathcal{D}_1|\over |\mathcal{D}|} Gini(\mathcal{D}_1)+{|\mathcal{D}_2|\over |\mathcal{D}|} Gini(\mathcal{D}_2) \end{aligned} 对于特征 A A ,利用上式,选择那个使得划分后基尼指数最小的值作为特征 A A 的最优二分方案,最后选择当前所有特征中基尼指数最小的那个特征的特征值作为最优二分方案,即
a = arg min a A , A D G i n i ( D , A ) a^*=\arg\min_{a\in A,A\in \mathcal{D}}Gini(\mathcal{D},A) 接着重复上述划分过程,直到结点中的样本个数小于约定阈值,或者样本集的基尼指数小于预定阈值,或者没有更多特征为止,这样就生成了一颗回归树。

1.2 CART回归树

与分类树不同的是,CART回归树在处理连续型特征时,是选用MSE最小化准则。对于给定的数据 D \mathcal{D} ,一个回归树对应着特征空间的一个划分以及在划分的单元上的输出值,假设已将特征空间划分为 M M 个单元 R 1 , R 2   , R M R_1,R_2\cdots,R_M ,并且在每个单元 R m R_m 上有一个固定的输出值 c m c_m ,于是回归树模型可以表示为:
f ( x ) = m = 1 M c m I ( x R m ) f(x)=\sum_{m=1}^Mc_m I(x\in R_m)

当特征空间的划分确定时,可以用均方误差 x i R m ( y i f ( x i ) ) 2 \sum_{x_i\in R_m}(y_i-f(x_i))^2 来表示回归树对于训练数据的预测误差。CART回归树就是用MSE最小的准则来求解每个单元上的最优输出值。

在任意单元 R m R_m 中, M S E = x i R m ( y i c m ) 2 \mathrm{MSE}=\sum_{x_i\in R_m}(y_i-c_m)^2 令它对 c m c_m 求导为零,可知最优的 c m ^ \hat{c_m} R m R_m 上所有特征 x i x_i 对应的目标变量 y i y_i 的均值,即 c m ^ = a v e ( y i x i R m ) \hat{c_m}=ave(y_i| x_i\in R_m)

对于如何划分特征空间,方法和分类树一致,即选择第 j j 个变量 x ( j ) x^{(j)} 和它取的值 s s ,作为切分变量和切分点,定义两个区域: R 1 ( j , s ) = { x x ( j ) s } R_1(j,s)=\{x|x^{(j)}\le s\} R 2 ( j , s ) = { x x ( j ) > s } R_2(j,s)=\{x|x^{(j)}> s\} ,然后根据MSE准则寻找最优切分变量和切分点,即求解
min j , s [ min c 1 x i R 1 ( j , s ) ( y i c 1 ) 2 + min c 2 x i R 2 ( j , s ) ( y i c 2 ) 2 ] \min_{j,s}[\min_{c_1}\sum_{x_i\in R_1(j,s)}(y_i-c_1)^2 + \min_{c_2}\sum_{x_i\in R_2(j,s)}(y_i-c_2)^2]

对固定的特征 j j 可以找到最优切分点 s s
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 ) ) \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))

遍历所有特征,找到最优的切分变量 j j 以及最优切分点 s s 。依此将特征空间划分为两个区域,接着对每个区域重复上述划分过程,直到满足停止条件为止,这样就生成了一颗回归树。

回归树的输出也与分类树有差别,它的输出不是类别,它采用的是用最终叶子的均值或者中位数来预测输出结果。这样的回归树通常称为最小二乘回归树(least squares regression tree)。

1.3 总结

不管分类或者回归,CART算法从根结点开始,用训练集递归建立CART树。

  1. 对于当前结点的数据集为 D \mathcal{D} ,如果样本个数小于阈值或者没有特征,则返回决策子树,当前结点停止递归;
  2. 计算样本集 D \mathcal{D} 的基尼指数或MSE,如果它小于阈值,则返回决策树子树,当前结点停止递归;
  3. 计算当前结点现有的各个特征的各个特征值对数据集 D \mathcal{D} 的基尼指数或MSE;
  4. 在计算出来的各个特征的各个特征值对数据集 D \mathcal{D} 的基尼指数或MSE中,选择基尼指数或MSE来得到最优的特征 A A 和对应的特征值 a a 或者最优的切分变量 j j 以及最优切分点 s s
  5. 对左右的子结点递归调用1-4步,生成决策树。

2. 树的剪枝

剪枝(pruning)是对决策树防止过拟合的主要手段。因为在决策树的生长过程中,为了尽可能的正确分类训练样本,结点的划分过程将不断重复,有时甚至会将某种意外的样本作为单独的一个分类,导致决策树分支过多,因此,可以去掉一些分支来降低过拟合的风险。

决策树剪枝的基本策略主要有:

  • 预剪枝:在决策树的生长过程中,对每个结点在划分前进行估计,若当前结点的划分不能带来泛化能力的提升,则停止划分并将当前结点标记为叶结点;
  • 后剪枝:在生成了一颗完整的决策树之后,自下而上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能提升泛化能力,则将该子树替换为叶结点。

关于泛化能力的考察,主要是基于验证集或者测试集来计算决策树整体的损失函数或者代价函数,一般包括但不限于MSE、精度、错误率、查全率、查准率等等。按照上述两种方法,分别计算剪枝前后的性能度量,最后得到一个泛化性能较好的决策树。

参考资料

机器学习,周志华
统计学习方法,李航

发布了32 篇原创文章 · 获赞 33 · 访问量 6627

猜你喜欢

转载自blog.csdn.net/weixin_44750583/article/details/99405975