熵反应信息的混乱程度熵的计算公式为
p*log(p,2)对每个分类的概率进行求和,值越大反应信息越混乱,用python实现的代码:
from math import log
def calcShannonEnt(dataSet):
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
shannonEnt=shannonEnt-prob*log(prob,2)
return shannonEnt
def createDataset():
dataSet=[[1,1,'yes'],
[1,1,'yes'],
[1,0,'no'],
[0,1,'no'],
[0,1,'no']]
labels=['no surfacing','flippers']
return dataSet,labels
myDat,labels=createDataset()
print myDat
shan=calcShannonEnt(myDat)
print shan