![36e2d497afc41e33b5833414b9411610.png](https://i-blog.csdnimg.cn/blog_migrate/26467cadeba068b17f002e5bbb2d2883.jpeg)
点点写在前面:作者:周帆,英国华威大学 数学统计专业本硕。同时是第十期Pointer。这次他给大家带来关于决策树及集成算法的大篇幅讲解分享。这也被广泛运用到实际的业务场景中。已经发布了第一篇,这是第二篇还有连载喔~建议大家收藏,如果当你遇到相似场景,就可以翻出来跟着步骤实现啦。
决策树及集成算法
一、树模型
1.1 ID3
1.2 C4.5/C5.0
1.3 决策树的剪枝(pruning)
1.4 CART
(classification and regression tree)
二、树模型总结
—1—
树模型
1.1- ID3
ID3算法针对的是属性选择问题(只能处理类别型数据),它使用信息增益来选择特征,递归地构建决策树。从根结点开始,对所有可能的特征计算其信息增益,并选择信息增益最大的特征作为该结点的特征,用其不同的取值作为子结点,再对每个结点递归地调用以上的方法,直到所有特征的信息增益都很小/为零为止,相当于用最大似然估计(MLE)进行概率模型的选择。
而当遇到缺失值时,ID3会选择粗暴地忽视它们,所以我们也可以理解为ID3无法处理缺失值。
1.2 -C4.5/C5.0
C4.5和C5.0的与ID3算得上是亲兄弟,由于在提出ID3后,其他学者延续了类似的命名方式,导致ID3的提出者Quinlan只能另起炉灶使用C4.0,C4.5和C5.0来命名,其中C4.5中的0.5表示这个算法并不是最完善的方法。这里我们着重提一下C4.5。
该算法与ID3最大的区别就是:
一、使用信息增益比来替代信息增益。
二、相比ID3只能处理类别型数据,这个算法一定程度上可以处理连续型数据。
三、缺失值的处理
但是我们需要注意的是,信息增益率会更倾向于可取值数目较少的特征,所以C4.5并不直接暴力地选择增益率最高的特征,而是先选出一部分信息增益较高的特征,再从中选择增益率最高的,这样就有效地避免了该方法导致的“矫枉过正”。
而C4.5处理数值型和连续型数据时,它采用的其实是“区间化”的思想,采用的是二元分割(BinarySplit)把数据划分成两个独立的区间再进行划分。而找出一个合适的分割阈值是一个计算量相当大的工作。通常会把特征值进行排序,再选用分类发生改变的分界点或是区间的中位点作为阈值,对不同的阈值对我们的度量进行计算和比较。
在处理缺失值时,与ID3的视而不见不同,C4.5会根据数据的缺失比例,对信息增益进行加权计算,这样模型就会让同一个样本,以不同的概率划入到不同的子结点中。
而C5.0相比于C4.5,又在合并分支、误分类成本(Misclassification Costs)、交叉检验(CrossValidation)等方面进行了改进,在此就不深入讨论了。
1.3 - 决策树的剪枝(pruning)
过拟合(overfitting)是一种在训练模型时非常常见的问题。熟悉统计学习的同学肯定知道,训练误差(training error)和泛化误差(generalisation error)是不可同时减小的,一个的减小势必导致另一个增加。所以模型的训练误差过小时,当我们更换一个数据集,就会导致模型的分类效果大大变差,模型的泛化能力大大降低。
![f7a6b9a7856967e154df72c020c19357.png](https://i-blog.csdnimg.cn/blog_migrate/34069ba048fd84015f1ace61ab36fc4a.jpeg)
所以,当我们以纯度来进行划分的时候,举一个最极端且简单的例子:当我们把每一个特征的每一个值都作为一个分支的时候,甚至我们有可能到最后得到每个叶子结点只有一个样本的情况。在这种情况下,结点的纯度肯定是相当高的。但是这种分支过多的方式,会让模型误把训练集的特点作为所有数据都具有的一般性质,这便会导致过拟合。所以我们要通过减少不必要的分支,来降低过拟合的风险。
简单的来说,剪枝可以分为预剪枝(prepruning)和后剪枝(postpruning)。通过将训练集留出一部分以作验证集,比较划分前后模型的泛化性能决定是否剪枝。
预剪枝:在每个结点划分前进行计算,若当前结点不能带来泛化性能的提升,则停止划分并将当前结点标记为叶子结点。该方法不仅能减少模型的泛化误差,还能大大减少模型的训练成本。但是这种从源头禁止的方式也会大大增加模型“欠拟合”(Underfitting)的风险。
后剪枝:先从训练集生成一棵完整的决策树,然后自下而上地测试内部结点,若将一个内部结点替换为叶子结点可以提升模型的泛化性能则剪枝,反之维持原状。对比预剪枝,后剪枝往往会保留更多地分支,大大降低了欠拟合的风险,而同时又能使泛化能力大于未剪枝的模型。但是由于其自下而上的特性,导致其计算量和时间成本大大增加。
实际中,决策树的剪枝一般通过极小化决策树整体的损失函数来实现。设树T的叶结点个数为|T|,t是树T的叶结点,该叶子结点有Nt个样本点,其中k类的样本点有Ntk个,k=1,2..K。定义Ht(T)为叶结点t上的经验熵,a>=0为参数,则损失函数:
![3082ce0c77d948aec48eaff5cd62cb57.png](https://i-blog.csdnimg.cn/blog_migrate/b967bde3c7f7dbbe500fc973537373ce.png)
其中C(T)表示模型的训练误差,|T|表示模型的复杂度。a越大,该方法就会倾向于更简单的模型,a越小,该方法就会倾向于更复杂的模型。当a=0时,该损失函数只考虑模型的拟合程度。而这也就体现出了训练误差和泛化误差之间的权衡。
所以当我们输入树T和参数a时:
1. 计算每个结点的经验熵。
2. 递归地从叶子结点向上回溯。
- 剪枝前后的树分别为Ta和Tb:若
![6405740049b92f59bfd9895862f9a1f0.png](https://i-blog.csdnimg.cn/blog_migrate/548407d5419b24ab4bc95655eb2c2765.png)
则剪枝
3. 返回上一步直至得到损失函数最小的子树
1.4-CART(Classification And Regression Tree)
从名字就可以看出,CART是一个集合了分类和回归的树模型,即可以处理类别值也可以处理连续值。该算法与ID3最大的区别就是:
一、既可以处理类别值也可以处理连续值。
二、用二叉树取代多叉树。
三、用预剪枝或后剪枝对训练集生长的树进行剪枝。
对于连续型的数据,使用平方残差(Error Variance)进行特征选择以及树的建立。由CART算法找出一组使树的平方误差最小化的回归方程,来预测目标。这里内容略微复杂,就不深入推导。
对于类别型数据,使用基尼指数进行树的建立。如果目标是具有两个以上的类别,则
CART可能考虑将目标类别合并成两个超类别(双化)。如果集合D根据特征A是否取值a被划分为了D1和D2,则在特征A的条件下,集合D的基尼指数定义为:
![a46de87407bbd3bfa613d8576ac5199b.png](https://i-blog.csdnimg.cn/blog_migrate/e80a700a80d7943d50d4e00f91ff458c.png)
基尼指数G(D)表示D的不确定性,G(D,A)表示经过以A是否为a划分后D的不确定性。与熵一样,基尼指数越大,样本的不确定性也越大。
![535530da7e44803d9b3df6ca7067b163.png](https://i-blog.csdnimg.cn/blog_migrate/50d69a6e0f607a282903e603b65f4eab.jpeg)
上图显示了二类分类问题中基尼指数G(p)、熵之半1/2H(p)和分类误差率的关系。横坐标表示概率p,纵坐标表示损失。可以看出基尼指数和熵之半的曲线很接近,都可以近似的代表分类误差率。
当我们输入训练集D和停止计算条件进行树的生成时,从根结点开始,递归对每个结点进行如下操作:
1. 设结点数据集为D,对每个特征A,对其每个值a,将D一分为二并计算A=a的基尼指数。
2. 在所有的特征以及所有可能的切分点中,选择基尼指数最小的特征和切分点,将数据集分配到两个子结点中。
3. 对两个子结点递归调用1,2步骤。
而在面对缺失值时,CART理论上可以通过替代划分(Surrogate Splits)的方式进行处理。这种方式需要找出某个完整的特征来作为代替分裂,使得分叉的误差最小。而这涉及到和其它所有特征进行比较,非常复杂费时。所以我们从某种程度上来说,会认为CART不具备处理缺失值的能力。
—2—
树模型总结
- 优势
1. 模型直观,便于理解和解释。
2. 能够一定程度上处理缺失值问题。
3. 能够处理相关度不大的特征。
- 劣势
1. 容易发生过拟合。
2. 模型的建立过程并不稳定,且十分依赖数据本身,以及参数等条件的设置。
3. 对连续型数据的预测并不是平滑、连续的。
4. 容易忽略数据集中特征的相互关联.
这一次,我们主要介绍了3类树模型:ID3,C4.5, CART,以及他们在处理类别数据时所使用的度量和方法。当我们学习完毕之后,可以尝试着回想一下它们之间的异同:
- 结点分裂的参考指标。
- 结点分裂二分还是多分。
- 是否能处理缺失值。
- ...
除了我们以上介绍的模型,还有一些其他的相当知名的树模型,如在ID3之前的CLS模型,以卡方检验为特征筛选依据的CHAID模型等等。模型虽然不一样,但是共同的目标是一样的:在叶子结点数最少且叶子结点深度最小的前提下,预测准确率最高。
尽管前人已经证明了要找到这种最优的决策树是NP难题,但是他们还是不断通过自己的智慧,尽可能趋向于最优的决策树。也正是这种不断钻研的精神,让他们在决策树模型的基础上,提出了集成算法(Ensemble Learning)的概念。
更多数据/职场资讯欢迎关注公众号:POINT小数点数据
在此等你:)