计算机系统应用教程网站

网站首页 > 技术文章 正文

大白话人工智能算法-第27节决策树系列之预剪枝和后减枝(6)

btikc 2024-11-12 09:52:24 技术文章 8 ℃ 0 评论

上一节中我们讲解了决策树中的回归树的问题Cart树,我们再来回顾下,决策树的四个问题。1、它分几支。2、它怎么判断分裂条件。有Gini系数,MSE等。3、它什么时候停止?4、叶子节点怎么表达。对于分类来说是类别,对于回归来说是叶子节点内的平均数。这一节我们讲解决策树中的何时停止问题。

目录

1-预剪枝

2-后剪枝

3-叶子节点如何表达


假如你不限制什么时候停止,你不人为的把它停下来,你最终得到的这棵树在训练集上表现出来的正确率是百分之多少?如果你不限制深度的话,它一定会分配到百分之百。哪怕是100个样本,我有100个叶子结点。总能够把你给分到每一个都百分之百准确。但这样会造成什么问题呢?过拟合。在开始咱们在讲线性回归的时候。给大家讲过过拟合。其实本质上,模型太复杂了。那么对于一颗树模型,什么叫复杂,什么叫不复杂?是树越深,就相当于分的越细,最后都细枝末节。那些没有关系的条件也在那分。这个就是就明显过拟合了。那么通常我们会限制树的深度来防止过拟合,怎么限制这个树的深度呢?分为两种方式,我们都管它叫做剪枝,分为预剪枝和后剪枝。

假如我们说过拟合是模型上的一种病的话,它有什么症状呢?最典型的症状就是它在训练集上的表现很好,在测试集上的表现差。这就叫做过拟合。说明你走过了,要往回走一走。剪枝就是想让这个树往回退一退。通常两种剪枝方式更合理的是后剪枝。而更简单的是预剪枝。我们先说下预剪枝

1-预剪枝

其实预剪枝就是人为的给它固定一些条件。比如我们决策树里边要要传的超参数。



这些项,实际上就是预剪枝条件。比如min_samples_split就是这个节点到底还有多少个样本。我才会分裂,否则我就干脆不分了。假如你设置成100的话,当这个节点里只剩下80条数据。我就不再继续往下分了。不管你结果有多差,我就把你当做叶子节点了。再比如min_samples_leaf就是叶子节点分完了之后,至少有多少个叶子结点在这个里边我才承认,这次分裂能够分。比比如这设置成10。假如分到最后剩120条数据,分为两个子节点,一个是3条,另一个是117条。3<10,它就认为这次分裂是不合法,它要退回去。还要保留着120条当做叶子节点。最大深度max_depth和最大叶子节点max_leaf_nodes的数量,两个超参数其实彼此有些矛盾,当固定为二叉树的时候,固定最大深度情况下,叶子节点数量其实是一定的,这两个超参数必定有一个可能会失效。 所以超参数基本上选择的都是最大深度。 这些都是在分裂之前人为的给它设置的一些条条框框。一些规则,你触碰到我这些规则了,你就不要再分裂了。等于在训练之前就做好了这个剪枝的这个条件了。所以预剪枝它的运算是非常简单的。

2-后剪枝

后剪枝就是我先肆无忌惮的让你把这个给生长好。然后把一个一个的分裂,从最底下的叶子节点开始尝试cancel掉,cancel掉之后检验一下,在测试集上效果变好了吗?如果变好了,那么说明这次分裂确实多余了。就真的把它剪掉。然后再试着cancel下一个叶子节点。一个一个的cancel,cancel到你的训练集上的表现好了。这会儿就后剪枝完成。那我们说实际上后剪枝是一种自动化调参的一种方式。

实际上,后剪枝和预剪枝哪一个用的多呢?实际上预剪枝用的多。因为决策树再怎么剪枝它仍然不尽如人意,所以我们虽然讲了决策树的各种,但实际上真正用的时候是把好多好多决策树放在一起用的。没有任何人去用单独一棵决策树去让它生长,去工作。我们讲的这个十分复杂的决策树,只是你们未来能够用的集成学习的一个根源。它只是若干个工人中的一个。所以你没有必要把这一个工人弄得那么完美,还不辞辛苦地给它后剪枝。所以大部分时候使用的都是预剪枝来完成限制数的实际工作。

3-叶子节点如何表达

我们看下最后一个问题,叶子节点如何表达呢?对于分裂,当达到了剪枝条件的时候就停止了,假如一个三分类问题,其中一个叶子节点里有80个1,10个2,1个3,未来要有一个新数据落到这个里边,分为谁的可能性最好? 只能说是1最好。实际上在分类过程中就是一个投票机制,这个叶子节点里面哪一类最多,未来落在这个节点里面的新数据,就认为它被分为哪一类。而回归问题就是取里面的平均值。

下一节我们讲解很重要的集成学习的概念。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表