xgTreeBeforePostPruning = {"脐部": {"_vpdl": "是"
, '凹陷': {'色泽':{"_vpdl": "是", '青绿': '是', '乌黑': '是', '浅白': '否'}}
, '稍凹': {'根蒂':{"_vpdl": "是"
, '稍蜷': {'色泽': {"_vpdl": "是"
, '青绿': '是'
, '乌黑': {'纹理': {"_vpdl": "是"
, '稍糊': '是', '清晰': '否', '模糊': '是'}}
, '浅白': '是'}}
, '蜷缩': '否'
, '硬挺': '是'}}
, '平坦': '否'}}
xgTreePostPruning = treePostPruning(xgTreeBeforePostPruning, xgDataTest, xgLabelTest, xgName)
createPlot(convertTree(xgTreeBeforePostPruning))
createPlot(xgTreePostPruning)
输出结果
结论:对比书中p81和p83的图4.5和图4.7,与以上程序输出一致!
图p81
图p83
机器学习的决策树算法,为防止过拟合现象和过度开销,而采用剪枝的方法,主要有预剪枝和后剪枝两种常见方法。
自顶至下,从根节点开始,如果当前节点展开后的预测效果大于未展开的预测效果,则会展开,否则不展开。
优点:算法简单,有效避免过拟合现象。
缺点:欠拟合现象严重,比如原本60%的正确率,展开后变成55%,而禁止节点划分,显然不合理。
自下至上,从叶子节点开始,如果某个节点剪枝后的正确率更高,则进行剪枝,否则不剪枝。
优点:有效避免欠拟合现象,正确率较高。
缺点:需要先生成完整的决策树,开
信息增益小于一定的阈值
后剪枝的剪枝过程是删除一些子树,然后用其叶子节点代替,这个叶子节点所标识的类别通过大多数原则(majority class criterion)确定。
用最可能的叶子节点来替换该子树。
后剪枝首先通过完全分裂构造完整的决策树,允许过拟合,然后采取一定的策略来进行剪枝,常用的后剪枝策略包括:
决策树的剪枝什么是决策树的剪枝?为什么要剪枝?剪枝策略的分类预剪枝优缺点后剪枝后剪枝算法的分类优缺点奥卡姆剃刀定律预告andTODOReference
什么是决策树的剪枝?
对比日常生活中,环卫工人在大街上给生长茂密的树进行枝叶的修剪。在机器学习的决策树算法中,有对应的剪枝算法。将比较复杂的决策树,化简为较为简单的版本,并且不损失算法的性能。
为什么要剪枝?
剪枝是决策树算法防止过拟合的一种手段,...
决策树预剪枝和后剪枝
决策树对训练集有很好的分类能力,但是对于未知的测试集未必有好的分类能力,导致模型的泛化能力弱,可能发生过拟合问题,为了防止过拟合问题的出现,可以对决策树进行剪枝。剪枝分为预剪枝和后剪枝。
预剪枝:就是在构建决策树的时候提前停止。比如指定树的深度最大为3,那么训练出来决策树的高度就是3,预剪枝主要是建立某些规则限制决策树的生长,降低了过拟合的风险,降低了建树的时间,但是有可...
7.1. 预剪枝(prepruning)
预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。
用通俗的话来说,就是如果进行划分能够带来更好的结果就进行划分,否则不进行划分。首先,我们定义一个训练集和一个验证集如下:(西瓜书中间的例子)
上面一部分是训练集,下面一部分是测试集。然后让我们来对训练集(记住是训练集)进行划分,划分的规