def calcshannonEnt(dataSet):
countDataSet = len(dataSet) #计算出数据集的数据个数,以便后面算出概率
labelCounts = {} #创建字典,后面类别和数量形成对应关系
for featVec in dataSet: # 提出[1,1,'yes']等
currentLabel = featVec[-1] #取出最后一个 yes
if currentLabel not in labelCounts.keys(): #不存在则创建新的键值对
labelCounts[currentLabel] =0
labelCounts[currentLabel] +=1 #存在则值加一
print(labelCounts) #验证答案是否正确,方便后面校对
shannonEnt = 0.0 #根据公式计算出香农熵
for key in labelCounts:
prob = float(labelCounts[key])/countDataSet #算出概率
shannonEnt -=prob*log(prob,2) #算出香农熵
return shannonEnt
计算香农熵
最新推荐文章于 2024-03-21 11:04:14 发布