西瓜书决策树实现(基于ID3)补充——采用自定义数据结构实现

本文介绍了在实现决策树(基于ID3)时,使用自定义数据结构而非Python字典的优势。通过自定义节点结构,可以更方便地添加额外元素如父节点指针,以优化预剪枝和后剪枝操作。同时,提供了将自定义节点结构转换为轻量级字典的方法,以便于利用现有的图解工具绘制决策树。
摘要由CSDN通过智能技术生成

刚刚写过一篇决策树实现的案列,树结构采用python自带的字典作为存储决策树的数据结构,为了下一步便于实现预剪枝和后剪枝,老叔认为采用自定义数据结构可能会更便于操作,也更灵活,可以在节点随意添加自己认为重要的元素。节点定义如下:

class Node(object):
    #定义节点类,类数据为样本列表,以及剩余属性列表
    def __init__(self, node_dataset, node_A):
        
        #节点的样本集合,可有可无
        self.node_dataset = node_dataset
        #节点的剩余特征集合
        self.node_A = node_A
        #叶结点标记,如果是叶结点,self.label为叶结点的标签值
        self.label = None
        #根结点标记,如果是根结点,self.ai_best为结点样本的最优增益特征
        self.ai_best = None
        #将子节点的指针为字典,key为特征标签,value为子节点地址
        self.child = {
   }

这时,决策树生成函数其实和字典差不多,不同的是此次函数返回的是一个根节点的地址,而不是字典。代码如下:

def TreeGenerate(node_dataset, A):
    
    #data,A生成节点
    node = Node(node_dataset, A)
    #如果样本标签相同,标记该节点为叶节点,节点标签为样本标签,并且返回节点指针
    if is_the_same_jugement(node_dataset):
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值