1.什么是香农熵?
集合信息的度量方式称为香农熵或者简称为熵。
熵定义为信息的期望值,在明晰这个概念之前,我们必须知道信息的定义。如果待分类的事务可能划分在多个分类之中,则符号的信息定义为:
其中是选择该分类的概率。
为了计算熵,我们需要计算所有类别所有可能值包含的信息期望,通过下面的式子得到:
其中n是分类的数目。
2.计算给定数据集的香农熵
代码如下:
#计算给定数据集的香农熵from math import logdef calcShannonEnt(dataSet):num=len(dataSet) #数据集的样本数量labelCount={}#创建一个数据字典,它的键是数据集最后一列的数据,集样本的类别;它的值是该分类中的样本数量#计算每种类别下的样本数量,并将其放在字典中对应的键下for featureVec in dataSet:label=featureVec[-1]#取样本中的最后一个值if label not in labelCount.keys():labelCount[label]=1else:labelCount[label]+=1#计算数据集的熵shannonEnt=0.0for key in labelCount.keys():pro=float(labelCount[key])/numshannonEnt-=pro*log(pro,2)return shannonEntdataSet=[[1,1,'yes'],[1,1,'yes'],[1,0,'no'],[0,1,'no'],[0,1,'no']]print(calcShannonEnt(dataSet))
运行结果:
0.9709505944546686
3.计算给定数据集的香农熵的步骤如下:
1.计算数据集中实例的总数
2.创建一个数据字典,它的键为数据集中最后一列的数据。如果当前键不存在,则扩展字典并将当前键加入字典。每个键对应的值都记录了当前类别出现的次数。
3.分别计算所有类别出现的概率。然后根据这个概率计算香农熵。