决策树缺失值处理和剪枝

  大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法行业就业。希望和大家一起成长进步。

  今天给大家带来的文章是决策树缺失值处理和剪枝,希望能对学习决策树的同学们有所帮助。

文章目录

缺失值处理

原始数据为:
西瓜数据集
我们开始计算第一个分叉点是用哪个特征?我们对ID3算法进行修正。包含缺失值属性样本的信息增益 = p * (不包含缺失值属性样本的信息增益)。由于前面对计算过程以及比较熟悉,所以我们只在第一次分叉中计算色泽这个属性的信息增益。

Gain(all_data) = p * (Gain(not_missing_data))
Gain(not_missing_data) = H1 - H2
在这里插入图片描述
H1 = -( (6 / 14) * np.log2(6 / 14) + (8 / 14) * np.log2(8 / 14) ) = 0.985228
在这里插入图片描述
H2 = - ( (6 / 14) * ( (4 / 6) * np.log2(4 / 6) + (2 / 6) * np.log2(2 / 6) ) ) - \
( (4 / 14) * ( (2 / 4) * np.log2(2 / 4) + (2 / 4) * np.log2(2 / 4) ) ) - 0 = 0.6792696
Gain(not_missing_data) = H1 - H2 = 0.985228 - 0.6792696 = 0.305958

p为非缺失值样本个数占所有样本的个数,即14 / 17
Gain(all_data) = p * (Gain(not_missing_data)) = (14 / 17) * (0.305958) = 0.251966。

简单理解一下为什么是乘以p呢?
在这里插入图片描述

结合全概率公式,也可以表述成公式2。至于公式1和公式2为什么相等,这个数学证明暂且不证了。由于缺失值样本的信息增益为0,则公式2后面一项为0了。

剪枝

剪枝分为预剪枝和后剪枝。预剪枝指的是在决策树生长过程中,对每个结点在划分先前进行估计,如果当前结点的划分不能带来决策树泛化能力的提升(验证集指标),则停止划分并将当前结点划分标记为叶结点。

后剪枝指的是先从测试集生成一颗完整的决策树,然后自底向上地对非叶节点进行考察,若将该结点对应的子树替换成叶子结点能给决策树带来泛化能力的提升,则将该子树替换为叶结点。

结合西瓜书的实例,假如以后剪枝为例。书上讲了剪枝前和剪之后验证集的准确率的变化,实际上没有必要。只要对根节点的样本进行计算即可。如下图所示:
此图为验证集数据
在这里插入图片描述
在这里插入图片描述
我们考察结点6。我们可以看出色泽为乌黑的样本为8、9、13。其中9和13为坏瓜,8为好瓜。如果不进行划分的话,就以多数样本的类别,即坏瓜为结果。有一个错分样本。
8 清晰 -> 坏瓜(真实为好瓜)
9 稍糊 -> 好瓜(真实为坏瓜)
13 稍糊 -> 好瓜(真实为坏瓜)。
三个样本全部划分错了!,所以剪枝是比较合适的。

当然,在sklearn中其实并不是通过验证集的指标提升来作为剪枝的条件(计算量还是比较大)。而是通过树的最大深度和叶子节点中样本的最少数目作为树生长的终止条件。The default values for the parameters controlling the size of the trees (e.g. max_depth, min_samples_leaf, etc.) lead to fully grown and unpruned trees which can potentially be very large on some data sets. To reduce memory consumption, the complexity and size of the trees should be controlled by setting those parameter values.(https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

herosunly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值