刚刚写过一篇决策树实现的案列,树结构采用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):