我觉得决策树是机器学习所有算法中最可爱的了……没有那么多复杂的数学公式哈哈~下图是一棵决策树,用来判断西瓜是好瓜还是坏瓜:
决策过程中提出的每个判定问题都是都对某个属性的测试,每个测试结果要么推导出最终结论,要么导出进一步判断的问题,在上次决策结果限定的范围内做进一步判断。从上图可以看出,叶节点对应决策结果,其他节点都是属性测试。决策树学习的目的是产生一棵泛化能力强,处理未见示例能力强的决策树模型。
决策树基本算法过程如下(一个递归算法):
三种情况会导致递归返回(也就是成功判断了类别):1)当前结点包含的样本属于同类别,不需要再划分;2)当前属性集为空,或是所有样本在属性上取值相同,无法划分;3)当前按节点包含的样本集合为空,不能划分。
决策树的关键是:如何选择最好划分。如何选择划分属性使得决策树包含的分支节点尽可能属于同类,即结点的“纯度“越来越高。下面介绍衡量标准。
信息熵、信息增益、信息增益率
信息熵是度量样本集合纯度的最常用指标。假设样本集合D分类最终结果有k类,第i类所占比例为p [i],则D的信息熵为 (1)
Ent(D)越小,说明样本混乱程度越低,D的纯度越高,最小值为0 。
如果离散属性a有V个可能取值{a1, a2, a3, …. , aV},如果使用a来对样本D进行划分,则会产生V个分支节点,其中第i个分支节点包含D中所有在属性a上取值为ai的样本,记作Di。根据公式(1)计算出Di的信息熵,由于不同分支节点包含的样本数量不同,分支节点权重为 |Di| / |D|,由此可以计算出用属性a对样本集D进行划分的信息增益,即计算出信息熵改变的值(减小的值)。
(2)
一般来说,信息增益越大,意味着使用属性a来进行划分得到的”纯度提升“越大。对每一个属性计算其信息增益,选择信息增益最大的属性作为当前划分依据。看到最上面那棵决策树,选择纹理做为划分属性之后形成3个分支,在每个分支下继续划分时只要在当前范围内考虑。举个例子,在纹理=清晰的分支中,把所有纹理为清晰的样本作为新的样本空间D1,再次计算D1的信息熵,以及其他属性在D1的信息增益,找到此时最大的信息增益属性作为划分。以此类推直到判断出类别。ID3决策树算法就是以信息增益为准则来选择划分属性。
事实上,取值数目较多的属性可能信息增益会较大。为减少这种偏好带来的不利影响,C4.5决策树算法不直接用信息增益啦选择最佳属性划分,而是使用信息增益率。
IV(a)称为属性a的固有值,一般a的取值数量V越大,IV(a)越大。计算的是样本在属性a上的增益值。
要注意的是,增益率可能对取值数目少的属性有所偏好。C4.5算法通常先从属性中找出信息增益高于平均水平的属性,再从中选出增益率最高的属性。
过拟合、欠拟合和剪枝
决策树学习的过程中,为了尽可能正确分类样本,节点划分过程不断重复,有时候会造成训练样本学得太好了,把训练集自身一些特点当作所有数据的性质,从而导致在测试集的表现并不好,泛化能力差,这种就叫做过拟合。因此,可以通过去掉一些决策树分支来降低过拟合风险,这就是剪枝。
剪枝的策略有两种:预剪枝和后剪枝。预剪枝是在决策树生成过程中对每个节点在划分前进行估计,如果当前划分并不能使得决策树泛化性能提升,就停止当前划分并把当前结点标记为叶节点。后剪枝是先生成一棵完整的决策树,然后自底向上对非叶节点进行计算,如果该节点对应的子树替换为叶节点能带来决策树泛化性能提升,测把该子节点替换为叶节点。
评估决策树性能可以使用分类正确率,也就是训练集中被分类正确的样本占当前集合的比率。在考察某个节点时,把这个节点下的子树看作一个单节点决策树,从而计算出划分后的分类正确率。再计算不采用该节点划分时分类正确率,如果不采用该节点的分了正确率更高,那么此时这个节点就可以剪枝了。如果两种情况下分类正确率差别不大,那么建议不剪枝,因为分类属性过少有可能造成欠拟合,也就是得到的分类模型太泛了,精确度不够。
第一个图为欠拟合,第二个模型比较理想,第三个为过拟合。
多变量决策树
多变量决策树是:非叶节点不仅仅是某个属性,而是对属性线性组合而产生的分类依据。也就是说每个非叶节点是一个线性分类器。多变量决策树学习过程中,不是为每个非叶节点寻找一个最优划分属性,而是建立一个合适的线性分类器。下图是一个多变量决策树
很多内容都是参考周志华的《机器学习》写的啦,我就是个小菜鸟~
以上 欢迎指正错误 共同学习
Chely