python教程决策树_3.机器学习之决策树详解(2)|python教程|python入门|python教程

https://www.xin3721.com/eschool/pythonxin3721/

2). 将节点2删掉替换成8、9和5,测试在验证集上的表现

3). 将节点3删掉替换成6和7,测试在验证集上的表现

REP剪枝方法决定是否修剪这个结点步骤如下:

1:删除以此结点为根的子树

2:使其成为叶子结点

3:赋予该结点关联的训练数据的最常见分类

4:当修剪后的树对于验证集合的性能不会比原来的树差时,才真正删除该结点

REP是最简单的后剪枝方法之一,不过在数据量比较少的情况下,REP方法趋于过拟合而较少使用。这是因为训练数据集合中的特性在剪枝过程中被忽略,所以在验证数据集合比训练数据集合小的多时,要注意这个问题。由于验证集合没有参与决策树的创建,所以用REP剪枝后的决策树对于测试样例的偏差要好很多,能够解决一定程度的过拟合问题。

2). Pessimistic Error Pruning(PEP,悲观剪枝):

上文的REP方法思想简单且易于使用,不过最大的问题在于它需要一个新的验证集来修正我们的决策树。PEP方法也是根据剪枝前后的错误率来决定是否剪枝,和REP不同之处在于:PEP不需要新的验证集,而是完全使用训练数据来生成决策树,又用这些训练数据来完成剪枝,并且PEP是自上而下剪枝的。将该结点的某子节点不需要被剪枝时被剪掉;另外PEP方法会有剪枝失败的情况出现。由于我们还是用生成决策树时相同的训练样本,那么对于每个节点剪枝后的错分率一定是会上升的,因此在计算错分率时需要加一个惩罚因子0.5。PEP后剪枝技术是由大师Quinlan提出的。它不需要像REP(错误率降低修剪)样,需要用部分样本作为测试数据,。决策树生成和剪枝都使用训练集, 所以会产生错分。

PEP剪枝算法是在C4.5决策树算法中提出的, 把一颗子树(具有多个叶子节点)用一个叶子节点来替代,比起REP剪枝法,它不需要一个单独的测试数据集。PEP算法是唯一使用Top-Down剪枝策略,这种策略会导致与先剪枝出现同样的问题,虽然PEP方法存在一些局限性,但是在实际应用中表现出了较高的精度,。两外PEP方法不需要分离训练集合和验证机和,对于数据量比较少的情况比较有利。再者其剪枝策略比其它方法相比效率更高,速度更快。因为在剪枝过程中,树中的每颗子树最多需要访问一次,在最坏的情况下,它的计算时间复杂度也只和非剪枝树的非叶子节点数目成线性关系。

# 详细原理待总结。

3). Cost-Complexity Pruning(CCP、代价复杂度):

代价复杂度选择节点表面误差率增益值最小的非叶子节点,删除该非叶子节点的左右子节点,若有多个非叶子节点的表面误差率增益值相同小,则选择非叶子节点中子节点数最多的非叶子节点进行剪枝。CART就是采用CCP(代价复杂度)剪枝方法,CART剪枝分为剪枝成子树序列,并通过交叉验证选取最优子树。也就是说,CART树的剪枝算法可以概括为两步,第一步是从原始决策树生成各种剪枝效果的决策树,第二步是用交叉验证来检验剪枝后的预测能力,选择泛化预测能力最好的剪枝后的数作为最终的CART树。

CCP算法为子树Tt定义了代价和复杂度,以及一个衡量代价与复杂度之间关系的参数α。代价指的是在剪枝过程中因子树Tt被叶节点替代而增加的错分样本,复杂度表示剪枝后子树Tt减少的叶结点数,α则表示剪枝后树的复杂度降低程度与代价间的关系,表面误差率增益值定义为:

其中,R(t)表示节点t的错误代价,R(t)=r(t)∗p(t);r(t)表示节点t的错分样本率,p(t)表示节点t中样本占全部样本的比例,|N|表示子树T​t中的叶节点数。

从原始决策树生成各种剪枝效果的决策树的具体步骤:

1). 令决策树的非叶子节点为{T1,T2,T3,......,Tn}

2). 计算所有非叶子节点的表面误差率增益值α={α1,α2,α3,......,αn}

3). 选择表面误差率增益值αi最小的非叶子节点Ti(若多个非叶子节点具有相同小的表面误差率增益值,选择节点数最多的非叶子节点)

4). 对Ti进行剪枝

实例:

假设数据有100条,从下往上,首先计算T5:

同理,T6​ 的α为0.03,由于0 < 0.03,此时将T5​ 剪枝而得到一颗新树。

CCP算法的实现步骤:

1)按照上述公式从下到上计算每一个非叶节点的α值,然后每一次都剪掉具有最小α值的子树。从而得到一个集合{T0,T1,T2,......,TM},其中,T0​ 表示完整的决策树,TM​ 表示根节点

2)根据真实的错误率在集合{T0,T1,T2,...,TM}选出一个最好的决策树(交叉验证)

剪枝过程特别重要,所以在最优决策树生成过程中占有重要地位。有研究表明,剪枝过程的重要性要比树生成过程更为重要,对于不同的划分标准生成的最大树(Maximum Tree),在剪枝之后都能够保留最重要的属性划分,差别不大。反而是剪枝方法对于最优树的生成更为关键。C4.5使用了PEP剪枝方法,本文的CART使用了CCP的剪枝方法。

决策树算法总结:

决策树学习的关键就是如何选择最优划分属性。三种算法主要区别:CART构建的一定是二叉树,ID3,C4.5构建的不一定是二叉树。分类树是基于概率来构建的,采用信息增益、信息增益率、基尼系数来作为树的评价指标。回归数是基于平均值来构建的,采用均方差作为树的评价指标。

算法

支持模型

树结构

特征选择

连续值处理

缺失值处理

剪枝

ID3

分类

多叉树

信息增益

不支持

不支持

不支持

C4.5

分类

多叉树

信息增益比

支持

支持

支持

CART

分类,回归

二叉树

基尼系数,均方差

支持

支持

支持

决策树优化策略:

1.决策树欠拟合:没有将不同的数据类别划分开,原因:决策树深度太浅导致。解决方案:1.增加树的深度。2.使用集成算法,Boosting算法(GBDT)

2.决策树过拟合:学习能力太强,将噪音数据特征也学习到数据分割中了,原因:决策树深度太深导致。解决方案:1.剪枝(调整API中的参数)2.使用集成算法:Bagging算法(随机森林)

决策树算法的优点:

1)简单直观,易于理解和解释,可以可视化分析,容易提取出规则

2)基本不需要预处理,不需要提前归一化,处理缺失值

3)既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值

4)能够处理不相关的特征

5)可以处理多维度输出的分类问题。

7)可以交叉验证的剪枝来选择模型,从而提高泛化能力。

8) 对于异常点的容错能力好,健壮性高。

9)测试数据集时,运行速度比较快,在相对短的时间内能够对大型数据源做出可行且效果良好的结果。

决策树算法的缺点:

1)决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进。

2)决策树会因为样本发生一点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习之类的方法解决。

3)寻找最优的决策树是一个NP难的问题,我们一般是通过启发式方法,容易陷入局部最优。可以通过集成学习之类的方法来改善

4)如果某些特征的样本比例过大,生成决策树容易偏向于这些特征。这个可以通过调节样本权重来改善。

5)决策树容易忽略数据集中属性的相互关联

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值