首页 > 其他分享 >机器学习——决策树(四)后剪枝

机器学习——决策树(四)后剪枝

时间:2024-03-23 13:29:05浏览次数:21  
标签:剪枝 结点 机器 data 划分 root 决策树

观前提示:这是本人决策树相关的第四篇博文,前3篇的内容如下:

1、建造训练集的决策树【完成结点类编写和建树过程】

2、用验证集评估模型、选出泛化较好的数据划分方式训练模型

3、预剪枝

读者可根据需要从上方《机器学习》专栏中查阅对应文章

第四章是后剪枝的内容,用到了许多前文相关的代码

完整代码都被集成到了colab的notebook当中,读者可以直接运行。

指路:DrawPixel/decisionTree.ipynb at main · ndsoi/DrawPixel (github.com)

目录

1、后剪枝的理论部分

2、编程实践

1、划分训练集和验证集

​编辑2、生成训练集完整的决策树

3、收集所有的非叶结点

4、处理分支结点:划分or剪枝?


1、后剪枝的理论部分

作用:减少分支,提高模型的泛化能力

对比预剪枝:优势:防止训练不充分导致欠拟合;劣势:开销较大、时间较长

算法过程:

  1. 后剪枝先从训练集生成一棵完整决策树
  2. 从完整的决策树底层的非叶子结点出发,由下至上,对每一个分支结点(非叶子结点)考虑:
    1. 如果划分:验证集精度=a
    2. 如果不划分,令当前结点的label=1,class=max,验证集精度=b 比较a和b的大小:
      1. 如果a>b 则划分,令当前结点label = 0
      2. 如果a<=b 则不划分,令当前结点的label=1

2、编程实践

1、划分训练集和验证集

train_data = D[0:3]+D[5:7]+[D[9]]+D[13:]
val_data = D[3:5]+[D[7]]+D[8:13]
print("训练集")
show(train_data)
print("验证集")
show(val_data)

2、生成训练集完整的决策树

root_v5 = TreeGenerate(train_data,Attr)
drawTree(root_v5)

drawTree显示:

手绘更明确:

3、收集所有的非叶结点

def collectAllNoLeaf(root):
  NoLeafQ = queue.Queue()
  NoLeafS = []
  if root.label == 1:
    # 根结点本身是叶子,那就没有讨论空间了
    print(f"根结点本身是叶子")
    return NoLeafS
  
  NoLeafQ.put(root)
  NoLeafS.append(root)

  while NoLeafQ.empty() == False:
    # 当前层的结点数目
    n = NoLeafQ.qsize()
    for i in range(n):
      cur = NoLeafQ.get()
      # cur结点的子结点的数目
      for value,node in cur.subDs.items():
        if node.label != 1:
          # 子结点不是叶子结点
          
          NoLeafS.append(node)
          NoLeafQ.put(node)
  return NoLeafS
NoLeafnodes = collectAllNoLeaf(root_v5) 

按层遍历了决策树,所有越底层的分支结点越在NoLeafnodes列表的后面

4、处理分支结点:划分or剪枝?

# 倒叙遍历
def train_v5(NoLeafnodes,root,val_data):
  n = len(NoLeafnodes)

  for i in range(n):

    cur = NoLeafnodes[n-1-i]
    # 沿用predict_v4 精度计算方法
    res_o,acc_o = predict_v4(root,val_data)
    print(f"划分的预测序列{res_o}")
    # 假如当前不划分
    cur.label = 1
    cur.Class = cur.max
    # 计算精度
    res_d,acc_d = predict_v4(root,val_data)
    print(f"不划分的预测序列{res_d}")
    if acc_o > acc_d:
      # 划分的精度更高
      print(f"划分的精度更高,划分了以后{acc_o}\t不划分{acc_d}")
      cur.label = 0
    else:
      print(f"不划分的精度更高,划分了以后{acc_o}\t不划分{acc_d}")
  return root

r = train_v5(NoLeafnodes,root_v5,val_data)
drawTree(r)

结果:

剪枝后的决策树为:

从最后打印的信息可以看到,虽然剪枝后决策树的分类精度还是0.875,但模型得到了简化

标签:剪枝,结点,机器,data,划分,root,决策树
From: https://blog.csdn.net/m0_60402183/article/details/136912880

相关文章

  • 100 天机器学习指南
    100天机器学习指南除了机器学习专栏,我们打算出另外一期专栏,叫做100天机器学习指南,目标是通过100天的深入持续学习,让我们没有机器学习经验的人,也可以从事简单的机器学习工作,为职业生涯寻找增长点,专栏的主要特点如下:从0到1覆盖面广有实战第1–10天:线性代数机器学习......
  • 决策树——泰坦尼克号
    具体步骤:1、导入相关扩展包fromsklearn.model_selectionimporttrain_test_split#划分数据集fromsklearn.feature_extractionimportDictVectorizer#字典特征值提取fromsklearn.treeimportDecisionTreeClassifier#决策树fromsklearn.treeimportexpor......
  • 【机器学习】详细解析Sklearn中的StandardScaler---原理、应用、源码与注意事项
    【机器学习】详细解析Sklearn中的StandardScaler—原理、应用、源码与注意事项......
  • 机械结构篇之四足机器人腿部结构
    欢迎关注微信公众号“四足机器人研习社”,本公众号的文章和资料和四足机器人相关,包括行业的经典教材、行业资料手册,同时会涉及到职业知识学习及思考、行业发展、学习方法等一些方面的文章。目录   1.四足机器人腿部机构概述 2.足式机器人腿部设计要点 3.四足机器人......
  • Python 机器学习 维特比算法和鲍姆-韦尔奇算法
    在机器学习和信号处理领域,特别是在处理隐马尔可夫模型(HiddenMarkovModels,HMM)时,维特比算法(ViterbiAlgorithm)和鲍姆-韦尔奇算法(Baum-WelchAlgorithm)是两个核心算法,用于不同的目的。维特比算法用于解决解码问题,即在给定观察序列的情况下找到最可能的状态序列。它通过动态规......
  • 全地形人形机器人(humanoid)是否只能进行短距视野感知呢 —— 实时地形感知
    相关:https://capital.lenovo.com/news/detail/id/924/s/1.html常见的人形机器人都是测试其手臂灵活度为主,但是近日看到一款以全地形步态行走为主的机器人(逐际动力,CL-1)。虽然很少有用双足机器人测试全地形行走能力的,但是全地形行走的能力测试在四足机器人中极为常见的,感觉测试......
  • 是否具有环境感知能力是人形机器人的基本要求 —— 基于感知的运动控制算法
    智能机器人与传统机器人的区别在于是否具有智能决策模块,直白的说就是在于是否使用强化学习算法进行动作的智能决策。但是,并不是使用强化学习算法的机器人就是智能机器人,尤其是人形机器人。强化学习算法是需要对环境进行感知的,这其实还可以分为两类,第一类是比较理想下的设定,就是指......
  • 机器人路径规划:基于霸王龙优化算法(Tyrannosaurus optimization,TROA)的机器人路径规划(提
     一、机器人路径规划介绍移动机器人(Mobilerobot,MR)的路径规划是移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量......
  • 吴恩达2022机器学习专项课程(一) 3.5 可视化成本函数
    问题预览为什么要可视化成本函数?可视化之后的成本函数是什么样子?如何在三维空间里通过w和b找到一个成本函数的值?如何在三维空间里找到成本函数的最小值?解读可视化成本函数:为了更加方便的看到不同的w和b,是如何影响成本函数的。上节课只看到了w如何影响成本函数,这节课回归......
  • 全开源小狐狸Ai系统 小狐狸ai付费创作系统 ChatGPT智能机器人2.7.6免授权版
    源码下载: 点击下载测试环境:Linux系统CentOS7.6、宝塔、PHP7.4、MySQL5.6,根目录public,伪静态thinkPHP,开启ssl证书具有文章改写、广告营销文案、编程助手、办公达人、知心好友、家庭助手、出行助手、社交平台内容、视频脚本创作、AI绘画、思维导图等功能ai通道:文心一言、Min......