1、 计算给定数据集的香农熵
def calcShannonEnt(dataSet):
#calculate the shangnon value
numEntries = len(dataSet) #求dataset的元素个数,dataSet的类型是列表
labelCounts = {} # 创建空列表,存储每一类数量
for featVec in dataSet: #对dataSet的每一类训练数据
currentLabel = featVec[-1] # 将dataSet的每一个元素的最后一个元素选择出来,dataSet的元素也是列表
if currentLabel not in labelCounts.keys(): #返回一个字典所有的键。
labelCounts[currentLabel] = 0 #若字典中不存在该类别标签,则使用字典的自动添加进行添加值为0的项
labelCounts[currentLabel] += 1 #递增类别标签的值,labelCounts[currentLabel]主要是统计同一个label出现的次数
shannonEnt = 0.0
for key in labelCounts: # 对每一分类,计算熵
prob = float(labelCounts[key])/numEntries #计算某个标签的概率 P(x)
shannonEnt -= prob*math.log(prob,2) #计算信息熵 P(x) * log(P(x))
return shannonEnt
2. 创建数据的函数
def createDataSet():
dataSet =