首页 > 编程语言 >决策树算法实验

决策树算法实验

时间:2022-10-30 19:45:16浏览次数:38  
标签:剪枝 结点 泛化 ID3 算法 实验 决策树

一、【实验目的】

理解决策树算法原理,掌握决策树算法框架;
理解决策树学习算法的特征选择、树的生成和树的剪枝;
能根据不同的数据类型,选择不同的决策树算法;


针对特定应用场景及数据,能应用决策树算法解决实际问题。
二、【实验内容】

设计算法实现熵、经验条件熵、信息增益等方法。
针对给定的房贷数据集(数据集表格见附录1)实现ID3算法。
熟悉sklearn库中的决策树算法;
针对iris数据集,应用sklearn的决策树算法进行类别预测。
三、【实验报告要求】

对照实验内容,撰写实验过程、算法及测试结果;
代码规范化:命名规则、注释;
查阅文献,讨论ID3、5算法的应用场景;
查询文献,分析决策树剪枝策略。

 

实验内容及结果

(1)导包

 

(2)导入数据

 

 

(3)计算信息熵

 

ID3算法:

 

 

 

 

 

scikit-learn实例:  

 

 

 

实验小结
1、ID3算法应用场景:
它的基础理论清晰,算法比较简单,学习能力较强,适于处理大规模的学习问题,是数据挖掘和知识发现领域中的一个很好的范例,为后来各学者提出优化算法奠定了理论基础。ID3算法特别在机器学习、知识发现和数据挖掘等领域得到了极大发展。

2、分析决策树剪枝策略

剪枝的目的在于:缓解决策树的"过拟合",降低模型复杂度,提高模型整体的学习效率,决策树生成学习局部的模型,而决策树剪枝学习整体的模型

基本策略:

预剪枝:是指在决策树生成过程中,对每一个结点在划分前进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶子结点。
降低了过拟合地风险,并显著减少了决策树地训练时间开销和测试时间开销。有些分支地当前划分虽不能提升泛化性能、甚至可能导致泛化性能下降,但是在其基础上进行地后续划分却可能导致性能显著提高;
后剪枝:先从训练集生成一棵完整的决策树,然后自底向上地对非叶子结点进行考察,若将该结点对应地子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。
一般情况下后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树,但是自底向上的注意考察,时间开销较高。

标签:剪枝,结点,泛化,ID3,算法,实验,决策树
From: https://www.cnblogs.com/lixuanang/p/16842017.html

相关文章

  • 实验6:开源控制器实践——RYU
    实验6:开源控制器实践——RYU一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验环......
  • 实验一:决策树算法实验
    一、【实验目的】理解决策树算法原理,掌握决策树算法框架;理解决策树学习算法的特征选择、树的生成和树的剪枝;能根据不同的数据类型,选择不同的决策树算法;针对特定应用场......
  • 软件设计实验20
    实验20:备忘录模式[实验任务一]:多次撤销改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现)。直接放源码:#......
  • 决策树算法实验
    决策树算法实验 【实验目的】1、理解决策树算法原理,掌握决策树算法框架;2、理解决策树学习算法的特征选择、树的生成和树的剪枝;3、能根据不同的数据类型,选择不同的......
  • 贝叶斯分类算法及其概率论基础
    理论基础:1.先验概率:先验概率(priorprobability)是指根据以往经验和分析得到的概率(典型的例子是概率论中应用题的已知条件),如全概率公式,它往往作为"由因求果"问题中的"因"出现......
  • 实验6:开源控制器实践——RYU
    实验6:开源控制器实践——RYU一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验......
  • 排序算法之最长和谐子序列
    题目和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。现在,给你一个整数数组nums,请你在所有可能的子序列中找到最长的和谐子序列的长度。数组的子序列是......
  • 算法数组之种花问题
    题目假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组  flowerbed表示花坛,由若干0......
  • 算法队列之最近请求次数
    题目:写一个RecentCounter类来计算特定时间范围内最近的请求。请你实现RecentCounter类:RecentCounter()初始化计数器,请求数为0。intping(intt)在时间t添加一个......
  • 排序算法之数组拆分
    题目给定长度为 2n 的整数数组nums,你的任务是将这些数分成 n对,例如(a1,b1),(a2,b2),...,(an,bn),使得从1到 n的min(ai,bi)总和最大。返回该最大总和......