我们已经知道ID3算法是基于信息增益来实现的,下面就根据原理写出代码:
1.首先计算信息熵
from math import log
# 计算数据集的信息熵,注意,该数据的数据类型是list
def calcShannonEnt(dataset):
numEntries = len(dataset) # 样本数,这里的dataSet是列表
labelCounts = {} #定义一个字典,key为类别,值为类别数
for featVec in dataset: # 统计各个类别的个数
currentLabel = featVec[-1] #最后一列是类别
if currentLabel not in labelCounts.keys(): #主要判断类别中的类别有有没有出现过,如果以前没有出现过,这赋值为0,
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1 #用于计算每个类别的个数
shannonEnt = 0.0 # 信息熵
for key in labelCounts:
prob = float(labelCounts[key])/numEntries #记得要将数据转Wie浮点型
shannonEnt -= prob * log(prob,2)
return shannonEnt # 信息熵
2.按照给定特征划分数据集,主要用于
标签:currentLabel,labelCounts,python,shannonEnt,dataset,信息熵,类别,原理,决策树
来源: https://www.cnblogs.com/cgmcoding/p/13558050.html