第二十七节决策树系列之预剪枝和后减枝(6)node
上一节中咱们讲解了决策树中的回归树的问题Cart树,咱们再来回顾下,决策树的四个问题。一、它分几支。二、它怎么判断分裂条件。有Gini系数,MSE等。三、它何时中止?四、叶子节点怎么表达。对于分类来讲是类别,对于回归来讲是叶子节点内的平均数。这一节咱们讲解决策树中的什么时候中止问题。app
目录学习
1-预剪枝测试
2-后剪枝spa
3-叶子节点如何表达blog
假如你不限制何时中止,你不人为的把它停下来,你最终获得的这棵树在训练集上表现出来的正确率是百分之多少?若是你不限制深度的话,它必定会分配到百分之百。哪怕是100个样本,我有100个叶子结点。总可以把你给分到每个都百分之百准确。但这样会形成什么问题呢?过拟合。在开始我们在讲线性回归的时候。给你们讲过过拟合。其实本质上,模型太复杂了。那么对于一颗树模型,什么叫复杂,什么叫不复杂?是树越深,就至关于分的越细,最后都细枝末节。那些没有关系的条件也在那分。这个就是就明显过拟合了。那么一般咱们会限制树的深度来防止过拟合,怎么限制这个树的深度呢?分为两种方式,咱们都管它叫作剪枝,分为预剪枝和后剪枝。element
假如咱们说过拟合是模型上的一种病的话,它有什么症状呢?最典型的症状就是它在训练集上的表现很好,在测试集上的表现差。这就叫作过拟合。说明你走过了,要往回走一走。剪枝就是想让这个树往回退一退。一般两种剪枝方式更合理的是后剪枝。而更简单的是预剪枝。咱们先说下预剪枝。get
其实预剪枝就是人为的给它固定一些条件。好比咱们决策树里边要要传的超参数。it
这些项,实际上就是预剪枝条件。好比min_samples_split就是这个节点到底还有多少个样本。我才会分裂,不然我就干脆不分了。假如你设置成100的话,当这个节点里只剩下80条数据。我就再也不继续往下分了。无论你结果有多差,我就把你当作叶子节点了。再好比min_samples_leaf就是叶子节点分完了以后,至少有多少个叶子结点在这个里边我才认可,此次分裂可以分。比好比这设置成10。假如分到最后剩120条数据,分为两个子节点,一个是3条,另外一个是117条。3<10,它就认为此次分裂是不合法,它要退回去。还要保留着120条当作叶子节点。最大深度max_depth和最大叶子节点max_leaf_nodes的数量,两个超参数其实彼此有些矛盾,当固定为二叉树的时候,固定最大深度状况下,叶子节点数量实际上是必定的,这两个超参数一定有一个可能会失效。 因此超参数基本上选择的都是最大深度。 这些都是在分裂以前人为的给它设置的一些条条框框。一些规则,你触碰到我这些规则了,你就不要再分裂了。等于在训练以前就作好了这个剪枝的这个条件了。因此预剪枝它的运算是很是简单的。自动化
后剪枝就是我先肆无忌惮的让你把这个数给生长好。而后把一个一个的分裂,从最底下的叶子节点开始尝试cancel掉,cancel掉以后检验一下,在测试集上效果变好了吗?若是变好了,那么说明此次分裂确实多余了。就真的把它剪掉。而后再试着cancel下一个叶子节点。一个一个的cancel,cancel到你的训练集上的表现好了。这会儿就后剪枝完成。那咱们说实际上后剪枝是一种自动化调参的一种方式。
实际上,后剪枝和预剪枝哪个用的多呢?实际上预剪枝用的多。由于决策树再怎么剪枝它仍然不尽如人意,因此咱们虽然讲了决策树的各类,但实际上真正用的时候是把好多好多决策树放在一块儿用的。没有任何人去用单独一棵决策树去让它生长,去工做。咱们讲的这个十分复杂的决策树,只是大家将来可以用的集成学习的一个根源。它只是若干个工人中的一个。因此你没有必要把这一个工人弄得那么完美,还任劳任怨地给它后剪枝。因此大部分时候使用的都是预剪枝来完成限制数的实际工做。
咱们看下最后一个问题,叶子节点如何表达呢?对于分裂,当达到了剪枝条件的时候就中止了,假如一个三分类问题,其中一个叶子节点里有80个1,10个2,1个3,将来要有一个新数据落到这个里边,分为谁的可能性最好? 只能说是1最好。实际上在分类过程当中就是一个投票机制,这个叶子节点里面哪一类最多,将来落在这个节点里面的新数据,就认为它被分为哪一类。而回归问题就是取里面的平均值。
下一节咱们讲解很重要的集成学习的概念。