ID3决策树Python代码实现

本文详细介绍了如何通过计算信息熵、选择信息增益最大的特征以及划分子数据集来构建决策树,包括特征计数、信息熵计算、决策分支生成和终止条件。
摘要由CSDN通过智能技术生成

1.首先输入用于分类的数据

图片

注:labels是特征的名称

2.计算给定数据集的信息熵

首先让我们看一下信息熵的公式

图片

所以计算信息熵的代码实现是:

图片

注:line[-1]是标签列,labelCounts字典是统计正负样例的个数,numData是总样例的个数。信息熵公式中的pk就是标签列各属性样例个数比上样例总个数。比如根结点所有样例标签列集合是[优等,中等,下等],优等有20个样例,中等有30个样例,下等有40个样例,那么pk就分别是20/70,30/70,40/70。

3.划分子数据集

前面我们讲过,决策树是递归进行的。每次我们都要计算当前特征下各个属性的信息熵,那么就要当前特征特定属性有多少样例,其中有多少正例和负例。

那么代码可如下表示

图片

注:dataSet是当前节点下的数据集,index是当前属性的下标,value是当前属性。比如对于上面我们creat的数据集来说,我想知道根蒂=蜷缩的数据有哪些,那么index就是1,value=蜷缩。

4.选择信息增益最大的特征来生成决策树新的分支

我们先来看,信息增益的公式如下所示:

图片

所以想要求出当前特征的信息增益,需要求出当前节点的信息熵,再求出当前特征下各属性的信息熵,再根据公式进行计算。则代码如下:

图片

注:baseEntropy是当前节点的信息熵,featList是当前节点当前属性下的所有取值,uniqueVals是对featList去重,接下来就是求当前特征下各个属性的信息熵,然后进行信息增益的计算,最后取所有特征中信息增益最大的特征作为划分分支

5.返回该节点数据集中类别出现次数最多的类别

图片

注:倒叙排列classCount得到一个字典集合,然后取出第一个就是结果(好瓜/坏瓜),即出现次数最多的结果。sortedClassCount的形式是[(),(),(),...],每个键值对变为元组并以列表形式返回

6.构建决策树

图片

注:停止划分结点的三种情况:a)所有的类标签完全相同,则直接返回该类标签;b)使用完了所有特征,仍然不能将数据集划分成仅包含唯一类别的分组,那么出现相同label多的一类,作为结果;c)如果该结点为空集,则将其设为叶子结点,节点类型为其父节点中类别最多的类。

喜欢的话点个关注哦~ 会每天分享人工智能机器学习内容,回复关键字可获取相关算法数据及代码~

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值