from math import log import xlrd ***# from numpy import **** import operator def calcShannonEnt(dataSet):#calculata shannonEnt numEntries = len(dataSet) labelCounts = {} for featVec in dataSet:#将当前键值加入字典并记录类别出现的次数 currentLabel = featVec[-1] if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0 labelCounts[currentLabel] += 1 shannonEnt = 0.0 for key in labelCounts:#计算香农熵 prob = float(labelCounts[key])/numEntries#使用所有类标签的发生频率计算类别出现的概率 tmp = prob*log(prob,2) shannonEnt -= tmp#得到香农熵 return shannonEnt
代码在运行时会出现TypeError: return arrays must be of ArrayType的错误,因为log的第二个参数不是base而是out array。如果你只是想执行普通的log操作,可以选择使用numpy.math.log(1.1, 2)或者使用python自带的math模块的log函数,而不是导入numpy中所有的函数TT
文章知识点与官方知识档案匹配,可进一步学习相关知识
AIEarth是一个由众多领域内专家博主共同打造的学术平台,旨在建设一个拥抱智慧未来的学术殿堂!【平台地址:https://devpress.csdn.net/aiearth】 很高兴认识你!加入我们共同进步!