模式识别与机器学习--决策树实战

简介: 模式识别与机器学习--决策树实战

硬件环境

完整代码:https://download.csdn.net/download/pythonyanyan/87390405

LenovoLegionY7000P2020H(16GBDDR4),IntelCorei7‐10750H

Windows10,Chineseversion

软件环境

VisualStudioCode1.55.2

实验目的

利用已有的数据集 winedata 实现决策树

利用 k=10 折交叉验证评估决策树

决策树可视化

实验记录

1C4.5 决策树

C4.5 算法是用于生成决策树的一种经典算法,是 ID3 算法的一种延伸和优化。

C4.5 算法对 ID3 算法主要做了一下几点改进:

1.通过信息增益率选择分裂属性,克服了 ID3 算法中通过信息增益倾向于选择拥有多个属性值的属性作为分裂属性的不足。


2.能够处理离散型和连续型的属性类型,即将连续型的属性进行离散化处理。


3.构造决策树之后进行剪枝操作。


4.能够处理具有缺失属性值的训练数据。


通过读取 ex6Data.csv 的数据,可以发现 11 个特征均为连续型属性,且整体数据量庞大需要剪枝操作,因此本次实验选用 C4.5 决策树是十分合适的。


1.1 分裂属性的选择:信息增益率


分裂属性选择的评判标准是决策树算法之间的根本区别。区别于 ID3 算法通过信息增益选择分裂属性,C4.5 算法通过信息增益率选择分裂属性。


设 D 是类标记元组训练集,类标号属性具有 m 个不同值,m 个不同类 Ci,i=1,2,.....,m,D 是 D 中 C'类的元组的集合,|D| 和 |C'D| 分别是是 D 和 C'D 中的元组个数,对于一个数据集合 D,其信息熵是


eb4ad34620033c5e58c8ca59512e4985.png

现在假定按照属性 A 划分 D 中的元组,划分为 V 的不同的类,新的信息熵为

23b298e4d739b4953625869ad8aab819.png


由此得到按照属性 A 划分 D 所获得的信息增益为原熵与新熵之差


b42d9b6474ce1fe311a0679bd6f6e725.png

信息增益率使用“分裂信息”值将信息增益规范化。分类信息类似于 Info*(*D),定义为

a41d632299beac95d5a8d3b3755cc4fb.png


由此定义信息增益率为


6cf1ab603193f5e4dcba32ceb2ac40df.png

过上述计算,最终选择具有最大信息增益率的属性作为分裂属性。


cd706ef4f62dd209b48c41c12bd9eda8.png

(a)熵


a31320ae5686dbdf54cd83a968fd1822.png

(b)信息增益


1.2 连续型属性的离散化处理


当属性类型为离散型,无须对数据进行离散化处理;当属性类型为连续型,则需要对数据进行离散化处理。


C4.5 算法针对连续属性的离散化处理的核心思想是:


1.将属性 A 的 N 个属性值按照升序排列,得到属性 A 的属性值取值序列

2031c077d59ed4431a43c28fe7f651ba.png


2.在序列

b78e47540c6d87b502b5689154103f64.png


中共有 N1 种二分方法,产生 N1 种分隔阈值,对于第 i 种二分方法,其阈值

3ab89696215b6db5499617863927ba8e.png


,它将该节点上的数据集划分为 2 个子数据集


49834993f7c714d64924f5728aa6120e.png

3.计算每种划分方法对应的信息增益,选取信息增益最大的划分方法的阈值作为属性 A 二分的阈值。

34fb35c16ac7932390fa919bff212d61.png

1.3 剪枝


由于决策树的建立完全是依赖于训练样本,因此该决策树对训练样本能够产生完美的拟合效果。但这样的决策树对于测试样本来说过于庞大而复杂,可能产生较高的分类错误率。这种现象就称为过拟合。因此需要将复杂的决策树进行简化,即去掉一些节点解决过拟合问题,这个过程称为剪枝。剪枝方法分为预剪枝和后剪枝两大类。预剪枝是在构建决策树的过程中,提前终止决策树的生长,从而避免过多的节点产生。预剪枝方法虽然简单但实用性不强,因为很难精确的判断何时终止树的生长。后剪枝是在决策树构建完成之后,对那些置信度不达标的节点子树用叶子结点代替,该叶子结点的类标号用该节点子树中频率最高的类标记。


47aa96ce4115c0206f4df15b7863c087.png


2 K 折交叉验证

将训练集数据划分为 K 部分,利用其中的 K**1 份做为训练,剩余的一份作为测试,最后取平均测试误差做为泛化误差。K 折交叉验证利用了无重复抽样技术的好处:每次迭代过程中每个样本点只有一次被划入训练集或测试集的机会。



00c914ef2a8386556a2ab231e049e328.png


3 可视化决策树

由于我个人的决策树实现不能像 sklearn 库中的那么完美,最终成型的决策树过于庞大, 但是经过 10 折交叉验证,准确率有 83%


15d0d7c91893ad42389cf5f65ef20e3b.png

结论与分析

C4.5 决策树算法优缺点分析

优点:


  1. 通过信息增益率选择分裂属性,克服了 ID3 算法中通过信息增益倾向于选择拥有多个 属性值的属性作为分裂属性的不足。

2.能够处理离散型和连续型的属性类型,即将连续型的属性进行离散化处理。


3.构造决策树之后进行剪枝操作。

  1. 能够处理具有缺失属性值的训练数据

缺点:

  1. 算法的计算效率较低,特别是针对含有连续属性值的训练样本时表现的尤为突出。
  2. 算法在选择分裂属性时没有考虑到条件属性间的相关性,只计算数据集中每一个条件 属性与决策属性之间的期望信息,有可能影响到属性选择的正确性。
相关文章
|
23天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
4天前
|
机器学习/深度学习 算法 数据挖掘
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-2
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
28 1
|
9天前
|
机器学习/深度学习 存储 算法
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
30 7
|
19天前
|
机器学习/深度学习 数据采集 算法
机器学习实战第3天:手写数字识别
机器学习实战第3天:手写数字识别
23 0
|
1月前
|
机器学习/深度学习 数据采集 算法
实现机器学习算法(如:决策树、随机森林等)。
实现机器学习算法(如:决策树、随机森林等)。
25 0
|
3月前
|
机器学习/深度学习 算法 Python
机器学习 - [源码实现决策树小专题]决策树中,信息增益、信息增益率计算以及最佳特征挑选的Python实现
机器学习 - [源码实现决策树小专题]决策树中,信息增益、信息增益率计算以及最佳特征挑选的Python实现
45 0
|
1月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
|
1月前
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
27 1
|
1月前
|
机器学习/深度学习 数据采集 算法
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
114 0
|
1月前
|
机器学习/深度学习 数据采集 监控
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
71 0