查看原文
其他

第8.8节 从零实现CART算法

空字符 月来客栈 2024-01-21

各位朋友大家好,欢迎来到月来客栈,我是掌柜空字符。

本期推送内容目录如下,如果本期内容对你有所帮助,欢迎点赞、转发支持掌柜!

  • 8.8 从零实现CART算法
    • 8.8.1 连续型特征生成示例
    • 8.8.2 连续型特征剪枝示例
    • 8.8.3 节点定义实现
    • 8.8.4 基尼指数实现
    • 8.8.5 决策树构建实现
    • 8.8.6 决策树预测实现
    • 8.8.7 决策树剪枝实现
    • 8.8.8 使用示例
    • 8.8.9 小结
  • 引用

8.8 从零实现CART算法

上一节内容中,我们已经详细介绍了CART分类树的构建原理和剪枝过程。在本节内容中,将开始介绍如何从零开始编码实现一个简易版的CART分类树。同时,由于在实际场景中数据集的特征维度大多都是连续型的特征变量,因此需要对其进行离散化处理,后续也将以连续型特征为例进行编码实现。具体离散化方法见第8.2.5节内容,这里不再赘述。

下面,我们将直接通过表8-6中的样本数据来详细介绍在CART分类树中如何离散化连续型特征并构造相应的决策树。

8.8.1 连续型特征生成示例

在处理连续型特征变量时,第一步便是需要将各个维度的特征进行离散化,然后再根据离散化后的区间来对特征进行判断。具体地,表8-6中对应的3个特征在离散化后各特征的取值分割点分别为:

由表8-6中的数据可知,根据式(8.35)可得,此时的其基尼不纯度为

并且对于特征来说,根据其取值是否满足条件,可以将原始样本划分为两个部分。由式(8.37)得

同理,对于特征来说,根据其取值是满足条件,也可以将原始样本划分为两个部分。此时有

进一步,对于特征来说,根据其取值是否分别满足条件,每一次也可将原始样本划分为两个部分。此时有

注意:此时每次划分时都是将样本集合划分为两个部分,即

由以上计算结果可知,使用时对样本集合进行划分所得到的基尼不纯度最小。故,根节点应该以是否成立来进行分割,如图8-20所示(在每个节点中,第1行表示当前节点的划分特征维度以及样本的索引,第2行分别表示判断区间和每个类别中的各个样本的数量)。

图 8-20. CART第一次划分

从图8-20可以看出,根据特征是否存满足条件可以将原始样本划分为两个部分。经过这次划分后,原始的样本集合就被特征“有工作”分割成了左右两个部分。接下来,再对左右两个集合递归的进行上述步骤。

1. 对于左子树来说

在特征中有

在特征中有

此时,基尼指数最小,故选择作为判断区间,此时划分结果如表8-7所示。

表 8-7.信用卡审批数据划分结果

2. 对于右子树来说

在特征中有

在特征中有

此时,基尼指数最小,故选择 作为判断区间,此时划分结果如表8-8所示。

表 8-8. 信用卡审批数据划分结果

进一步,根据表8-7和表8-8的划分结果便可以得到如图8-21所示的结果。

图 8-21. CART第二次划分

根据图8-21可知,此时对于集合来说其只有一个类别,因此停止划分。

3. 对于集合来说

在特征中有

此时,基尼指数最小,故选择作为判断区间。

4. 对于集合来说

在特征中有

此时,基尼指数最小,故选择作为判断区间。当然,对于特征来说其只有一个取值区间,所以也可以不用计算。

对于集合来说其只有一个类别,所以也停止划分。这样便可以得到如表8-9所示的划分结果。

表 8-9. 信用卡审批数据划分结果表

最终,根据表8-9便可得到如图8-22所示的决策树。

图 8-22. CART分类决策树

这里值得一提的是,由于划分方式的不同,所以图8-22中的结果与图8-13中的结果略有差异。

为你认可的知识付费,欢迎订阅本专栏阅读更多优质内容!


8.8.2 连续型特征剪枝示例

继续滑动看下一个

第8.8节 从零实现CART算法

空字符 月来客栈
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存