【数据挖掘】决策树中C4.5与CART算法讲解及决策树应用iris数据集实战(图文解释 附源码)

简介: 【数据挖掘】决策树中C4.5与CART算法讲解及决策树应用iris数据集实战(图文解释 附源码)

需要完整代码和PPT请点赞关注收藏后评论区留言私信~~~

1:C4.5算法

Quinlan在1993年提出了ID3的改进版本C4.5算法。它与ID3算法的不同主要有以下几点

(1)分支指标采用增益比例,而不是ID3所使用的信息增益

(2)按照数值属性值的大小对样本排序,从中选择一个分割点,划分数值属性的取值区间,从而将ID3的处理能力扩充到数值属性上来

(3)将训练样本集中的位置属性值用最常用的值代替,或者用该属性的所有取值的平均值代替,从而处理缺少属性值的训练样本

(4)使用K次迭代交叉验证,评估模型的优劣程度

(5)根据生成的决策树,可以产生一个if-then规则的集合,每一个规则代表从根结点到叶结点的一条路径

C4.5算法的优缺点

C4.5是基于ID3算法进行改进的算法,目标是通过学习,找到一个从属性值到类别的映射关系,并且这个映射能用于对新的未知类别进行分类。C4.5算法产生的分类规则易于理解,准确率高,改进了ID3算法倾向于选择具有最大增益率的属性作为分裂属性的缺点,而且相比于ID3算法,能处理非离散数据或不完整数据。 C4.5由于使用了熵模型,里面有大量的耗时的对数运算,如果是连续值还需要大量的排序运算,而且C4.5只能用于分类

2:CART算法

原理:分类回归树(Classification And Regression Tree, CART)算法最早由Breiman等人提出,目前已在统计领域和数据挖掘技术中普遍使用。Python中的scikit-learn模块的Tree子模块主要使用CART算法实现决策树

CART算法用基尼系数代替熵模型。基尼指数度量数据分区或训练元组D的不纯度,定义为:

CART算法将最大化不纯度降低的属性选择为分裂属性,CART算法采用与传统统计学完全不同的方式构建准则,而且以二叉树形式给出,易于理解,使用和解释。由CART算法构建的决策树在很多情况下比常用的统计方式构建的代数预测更加准确,而且数据越复杂,变量越多,算法的优越性越显著

树剪枝

随着决策树深度的增加,模型的准确度肯定会越来越好。但是对于新的未知数据,模型的表现会很差,产生的决策树会出现过分适应数据的问题。而且,由于数据中的噪声和孤立点,许多分枝反映的是训练数据中的异常,对新样本的判定很不精确。为防止构建的决策树出现过拟合,需要对决策树进行剪枝。决策树的剪枝方法一般有预剪枝和后剪枝方法

1. 预剪枝

当在某一结点选择使用某一属性作为划分属性时,会由于本次划分而产生几个分支。预剪枝就是对划分前后两棵树的泛化性能进行评估,根据评估结果决定该结点是否进行划分。如果在一个结点划分样本将导致低于预定义临界值的分裂(如使用信息增益度量)则提前停止树的构造,但是选择一个合适的临界值往往非常困难

2. 后剪枝

在后剪枝方法中,先构造一颗完整的决策树,然后从下向上计算每个结点的经验熵,递归地从决策树的叶子结点进行回缩,通过计算回缩前后的损失函数并进行比较判断是否进行剪枝。剪枝可以只在树的某一部分进行,即局部剪枝,这样极大提高了剪枝的效率

3:决策树应用

sklearn.tree.DecisionTreeClassifier实现了决策树的构建,在该方法中,参数criterion规定了该决策树所采用的 最佳分割属性的判决方法,取值有“gini”和“entropy”两种;max_depth限定了决策树的最大深度,对于防止过拟合非常有用。参数min_samples_leaf 限定了叶子结点包含的最小样本数

 

生成的决策树如下图所示

代码如下

from sklearn.datasets import load_iris
import pandas as pd
from sklearn import tree
from sklearn.tree import export_graphviz
# import graphviz
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
# dot_file = 'tree.dot'
# tree.export_graphviz(clf, out_file = dot_file)
# with open("D:\\tree.dot", 'w') as f:
#     f=export_graphviz(clf, out_file = f,feature_names = ['SL','SW','PL','PW'])

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
21天前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】TF-IDF算法在人工智能方面的应用,附带代码
TF-IDF算法在人工智能领域,特别是自然语言处理(NLP)和信息检索中,被广泛用于特征提取和文本表示。以下是一个使用Python的scikit-learn库实现TF-IDF算法的简单示例,并展示如何将其应用于文本数据。
177 65
|
22天前
|
存储 人工智能 自然语言处理
算法、系统和应用,三个视角全面读懂混合专家(MoE)
【8月更文挑战第17天】在AI领域,混合专家(MoE)模型以其独特结构成为推动大型语言模型发展的关键技术。MoE通过动态选择专家网络处理输入,实现条件计算。稀疏型MoE仅激活部分专家以减少计算负担;软MoE则加权合并专家输出提升模型稳定性。系统层面,MoE优化计算、通信与存储,利用并行化策略提高效率。在NLP、CV、推荐系统等领域展现强大应用潜力,但仍面临训练稳定性、可解释性等挑战。[论文链接: https://arxiv.org/pdf/2407.06204]
168 63
|
2天前
|
机器学习/深度学习 数据采集 算法
数据挖掘和机器学习算法
数据挖掘和机器学习算法
|
22天前
|
缓存 算法 Java
刷算法,你应该知道的队列经典应用
文章介绍了队列的基本特性和经典应用,包括如何用队列实现栈、使用优先级队列解决Top K问题,并通过LeetCode题目示例展示了队列在算法实现中的应用。
刷算法,你应该知道的队列经典应用
|
23天前
|
算法 Java 测试技术
算法分析(蛮力法与减治算法应用实验报告)
这篇文章是关于算法分析的实验报告,介绍了如何使用蛮力法解决背包问题,并通过伪代码和Java代码实现,同时分析了其时间效率;还介绍了基于减治法思想实现的二叉查找树的插入与查找,同样提供了伪代码、Java源代码实现和时间效率分析,最后展示了测试结果截图。
算法分析(蛮力法与减治算法应用实验报告)
|
5天前
|
机器学习/深度学习 算法 数据挖掘
R语言中的支持向量机(SVM)与K最近邻(KNN)算法实现与应用
【9月更文挑战第2天】无论是支持向量机还是K最近邻算法,都是机器学习中非常重要的分类算法。它们在R语言中的实现相对简单,但各有其优缺点和适用场景。在实际应用中,应根据数据的特性、任务的需求以及计算资源的限制来选择合适的算法。通过不断地实践和探索,我们可以更好地掌握这些算法并应用到实际的数据分析和机器学习任务中。
|
30天前
|
机器学习/深度学习 人工智能 算法
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
本文全面介绍了人工智能(AI)的基础知识、操作教程、算法实现及其在实际项目中的应用。首先,从AI的概念出发,解释了AI如何使机器具备学习、思考、决策和交流的能力,并列举了日常生活中的常见应用场景,如手机助手、推荐系统、自动驾驶等。接着,详细介绍了AI在提高效率、增强用户体验、促进技术创新和解决复杂问题等方面的显著作用,同时展望了AI的未来发展趋势,包括自我学习能力的提升、人机协作的增强、伦理法规的完善以及行业垂直化应用的拓展等...
129 3
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
|
10天前
|
算法 C++
A : DS串应用–KMP算法
这篇文章提供了KMP算法的C++实现,包括计算模式串的next数组和在主串中查找模式串位置的函数,用于演示KMP算法的基本应用。
|
13天前
|
缓存 算法 前端开发
深入理解缓存淘汰策略:LRU和LFU算法的解析与应用
【8月更文挑战第25天】在计算机科学领域,高效管理资源对于提升系统性能至关重要。内存缓存作为一种加速数据读取的有效方法,其管理策略直接影响整体性能。本文重点介绍两种常用的缓存淘汰算法:LRU(最近最少使用)和LFU(最不经常使用)。LRU算法依据数据最近是否被访问来进行淘汰决策;而LFU算法则根据数据的访问频率做出判断。这两种算法各有特点,适用于不同的应用场景。通过深入分析这两种算法的原理、实现方式及适用场景,本文旨在帮助开发者更好地理解缓存管理机制,从而在实际应用中作出更合理的选择,有效提升系统性能和用户体验。
41 1
|
21天前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】探讨最新的深度学习算法、模型创新以及在图像识别、自然语言处理等领域的应用进展
深度学习作为人工智能领域的重要分支,近年来在算法、模型以及应用领域都取得了显著的进展。以下将探讨最新的深度学习算法与模型创新,以及它们在图像识别、自然语言处理(NLP)等领域的应用进展。
56 6

热门文章

最新文章

下一篇
DDNS