当前位置:   article > 正文

ID3决策树Python代码实现_id3决策树代码

id3决策树代码

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)如果该结点为空集,则将其设为叶子结点,节点类型为其父节点中类别最多的类。

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/847516?site
推荐阅读
相关标签
  

闽ICP备14008679号