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

实验一:决策树算法实现

时间:2022-10-29 17:23:33浏览次数:71  
标签:剪枝 ID3 算法 实验 增益 C4.5 决策树

|20大数据三班| 首页 - 20级大数据3班机器学习 - 池州学院 - 班级博客 - 博客园 (cnblogs.com)

|学号:201613328|博客后台 - 博客园 (cnblogs.com)

实验目的

理解决策树算法原理,掌握决策树算法框架;
理解决策树学习算法的特征选择,树的生成和树的剪枝;
能根据不同的数据类型,选择不同的决策树算法;
针对特定应用场景及数据,能应用决策树算法解决实际问题。

实验内容

设计算法实现熵,经验条件熵,信息增益等方法。
实现ID3算法。
熟悉sklearn库中的决策树算法;
针对iris数据集,应用sklearn的决策树算法进行类别预测。
针对iris数据集,利用自编决策树算法进行类别预测。

实验报告要求

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

实验内容及结果

1、导入包

 

 

 2、导入数据

 

3、转换数据集格式并查看

 

 4、实现熵

 

 5、实验经验条件熵

 

 6、实现信息增益

 

 7、选择根节点特征

 

 8、定义节点类与二叉树

 

 

 

 

 

 

 

 9、创建决策树

 

 

 

 

 10、决策树测试

 

 11、创建iris数据集

 

 12、预测

 

 13、使用graphviz作图

 

 

 

实验中出现的问题及解决

问题: graphviz环境变量添加错误

 

解决:在环境变量中添加dot.exe路径

 

 

 实验小结

 

ID3算法

1、 ID3算法是基于信息增益计算的,信息增益是指划分可以带来纯度的提高,信息熵的下降。

2、信息增益计算:是父亲节点和信息熵减去所以子结点的加权信息熵,这个权重系数为每个子结点在父节点出现的概率,即每个子结点的归一化信息熵。

3、计算每个属性的信息增益,选择信息增益最大的作为根节点即可,其他节点选择也类似。

4、 ID3算法的特点

优点:算法简单,可解释性强;
缺点:对噪声敏感,且倾向于选择取值比较多的属性,尽管某些属性可能对分类任务没有太大的作用,但依然被选作最优属性。
C4.5算法
1、C4.5算法是ID3算法的改进,具体的,有以下四方面的改进:

采用信息增益率而非信息增益,解决了ID3倾向于选择取值多属性的问题。信息增益率=信息增益/属性熵。

采用悲观剪枝(属于后剪枝技术),通过递归估算每个内部节点的分类错误率来判断是否对其进行剪枝,这种剪枝方法不再需要一个单独的测试数据集,解决了ID3构造决策树容易产生过拟合的情况,提升了决策树的泛化能力。

C4.5算法通过选择具有最高信息增益的划分所对应的阈值,可以离散化处理连续属性。

针对数据集不完整情况,即存在缺失值,C4.5可以进行处理,乘以加权系数即可。

2、 C4.5算法的特点:

优点:C4.5算法在ID3算法的基础上,用信息增益率代替了信息增益,解决了噪声敏感的问题;并且可以对构造树进行剪枝、处理连续属性以及数值缺失等情况;
缺点:C4.5算法需要对数据集进行多次扫面,算法效率相对较低。

引用文献:https://blog.csdn.net/weixin_43851352/article/details/107309851

 

标签:剪枝,ID3,算法,实验,增益,C4.5,决策树
From: https://www.cnblogs.com/hxy02/p/16839144.html

相关文章

  • python | 算法-网络延迟时间-dijikstra算法应用
    写在前面:我自己用python练习算法与数据结构的典型算法汇总在这里:汇总-算法与数据结构-python版,欢迎翻阅!1️⃣参考链接:https://github.com/algorithmzuo/algorithmbasic......
  • 实验6:开源控制器实践——RYU
    实验6:开源控制器实践——RYU一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验......
  • 实验一:决策树算法实验
    【实验目的】理解决策树算法原理,掌握决策树算法框架;理解决策树学习算法的特征选择、树的生成和树的剪枝;能根据不同的数据类型,选择不同的决策树算法;针对特定应用场景及......
  • 机器学习 | 决策树
    Def信息熵\[\text{Ent}(D)=\sump_k\logp_k\]条件熵\[\text{Ent}(D|A)=\sum\frac{|D^v|}{|D|}\text{Ent}(D^v)\]信息增益\[\text{Gain}(D,A)=\text{Ent}(D)-\text{E......
  • Java经典面试算法2
    二:经典算法问题?2.1鸡兔同笼问题(穷举法)      已知:鸡兔共35只,共94只脚,那么鸡和兔各几只?      示例代码:1publicclassSameCage{......
  • 实验4:开源控制器实践——OpenDaylight
    一、实验目的1.能够独立完成OpenDaylight控制器的安装配置;2.能够使用Postman工具调用OpenDaylightAPI接口下发流表。二、实验环境Ubuntu22.04.1Desktopamd64三、实......
  • 实验7:基于REST API的SDN北向应用实践
    (一)基本要求编写Python程序,调用OpenDaylight的北向接口实现以下功能利用Mininet平台搭建下图所示网络拓扑,并连接OpenDaylight;下发指令删除s1上的流表数据。delet......
  • 实验7:基于REST API的SDN北向应用实践
    实验7:基于RESTAPI的SDN北向应用实践一、实验目的1.能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;2.能够编写程序调用RyuRESTAPI实现特定网络功能。二、实......
  • 实验6:开源控制器实践——RYU
    实验6:开源控制器实践——RYU一、实验目的1、能够独立部署RYU控制器。2、能够理解RYU控制器实现软件定义的集线器原理。3、能够理解RYU控制器实现软件定义的交换机原理......
  • 代码随想录算法训练营第三天 | 203.移除链表元素 、707.设计链表、 206.反转链表
    链表这个数据结构我很少用到,本科的时候学过忘的都差不多了,感谢知道了可以直接添加一个虚拟头的操作!203.移除链表元素  707.设计链表: 206.反转链表未完成 ......