决策树算法(C4.5算法)

本文介绍了C4.5决策树算法,包括其相对于ID3的改进,如使用信息增益率,处理连续属性,以及对不完整数据的处理能力。C4.5算法流程包括属性选择、离散化处理和信息增益率计算。通过代码展示了C4.5算法的实现,并在数据集上进行了训练和测试,以评估其分类性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

决策树算法C4.5算法

1.1 题目的主要研究内容

  1. 组的主要任务描述

熟悉和掌握决策树的分类原理、实质和过程,掌握决策树典型算法(ID3、C4.5、CART)的核心思想和实现过程。

(2)自己工作的主要描述(宋体小四号不加粗1.5倍行距)

首先进行决策树中C4.5算法的概述及其C4.5算法的思想、说明C4.5算法的原理及其推导过程、C4.5算法的流程、C4.5算法就ID3算法的差异、C4.5算法改进的优缺点。

1.2 C4.5算法概述

C4.5算法之所以是最常用的决策树算法,是因为它继承了ID3算法的所有优点并对ID3算的进行了改进和补充。C4.5算法采用信息增益率作为选择分支属性的标准,克服了ID3算法中信息增益选择属性时偏向选择取值多的属性的不足,并能够完成对连续属性离散化是处理,还能够对不完整数据进行处理。C4.5算法属于基于信息论(Information Theory)的方法,它是以信息论为基础,以信息熵和信息增益度为衡量标准,从而实现对数据的归纳分类。

1.3 C4.5算法的思想

C4.5算法与ID3算法生成决策树的步骤过程基本相同,主要区别在于连续型属性和属性度量的计算,ID3算法不能处理连续型属性,而C4.5算法可以先离散化连续型属性,然后进行属性选择计算;在属性度量计算时,ID3算法利用信息增益进行属性选择计算,C4.5 算法则运用信息增益率计算。

1.4 C4.5算法相对于ID3算法改进之后有如下优点:

(1) C4.5算法的最大改进就是不在用信息增益来选择属性,而是采用信息增率,这么做就可以避免那些样本数量多但却对分类贡献少的属性作为根节点,提高了算法准确率。

(2)对树进行前剪枝,发现数据有问题可以及时处理,不用等到树建完后在对其剪枝,这样就大大提高了算法效率。

(3)能够通过对数据进行泛化,使连续数据离散化,从而增加了对连续数据的处理能力。

(4)在面对有缺失的数据时,C4.5算法依然能够有效处理。

1.5 C4.5算法信息增益率

信息增益率就是对信息增益进行了规范化,即C4.5算法思想运用信息增益率公式替换了ID3算法中的信息增益的计算思想。

信息增益的规范化用到了“分裂信息(split information)”的概念。

在训练集T中,公式表达了属性A的分裂信息。

与信息增益不同的是,信息增益率是用来计量相同的划分所获得的信息。

即为属性A的增益率的计算公式。

由上面公式公式可知C4.5算法的具体具体公式。

在用C4.5算法构造决策树时,信息增益率最大的属性即为当前节点的分裂属性,随着递归计算,被计算的属性的信息增益率会变得越来越小,到后期则选择相对比较大的信息增益率的条件属性作为分裂属性。

1.6 C4.5算法流程图

1.7 C4.5算法生成决策树的步骤

Stepl:创建一个节点N。

Step2:IF训练数据集为空,THEN返回单个节点N作为空的叶子节点。

Step3:IF训练集中的所有样本都属于同一个类C,THEN返回节点N为叶节点并将该节点标记为类C。

Step4:IF训练集的属性列表为空,THEN返回N作为叶节点,并标记为数据集中样本多的类别。

Step5:IF属性是连续型的,THEN对该属性进行离散化。

Step6:根据公式(2.8)计算属性列表中属性的信息增益率。

Step7:选择最高的信息增益率的属性A,并把节点N标记为属性A

Step8:递归方式循环以上步骤,得到初步决策树。

Step9:利用更大的训练数据集对决策树进行修剪(优化)。

在进行决策树构造时,会根据数据集中的信息判断是否满足停止建树的条件,否则继续迭代。一般情况下,结束的条件主要有:属性列表为空; 数据集中样本都已经归类;所剩样本都属于同一个类。满足其中一个条件便结束建树,得到初始的决策树。接着运用后剪枝的策略进行剪枝,简化决策树。

1.8主要程序代码

import numpy as np

import pandas as pd

import time

from sklearn.metrics import accuracy_score

from utils.plotDecisionTree import *

#计算经验熵

def calcEntropy(dataSet):

    mD = len(dataSet)                       # mD表示数据集的数据向量个数

    dataLabelList = [x[-1] for x in dataSet]       # 数据集最后一列 标签

    dataLabelSet = set(dataLabelList)          # 转化为标签集合,集合不重复,所以转化

    ent = 0

    for lab

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李逍遥敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值