[置顶] 信息熵的计算

最近在看决策树的模型,其中涉及到信息熵的计算,这里东西是由信号处理中来的,理论部分我就不再重复前人的东西了,下面给出两个简单的公式:



当然学习过信号与系统的童鞋一定觉得这不是香农提出的东西吗?O(∩_∩)O~没错,就是这个东西,只不过我们用在了机器学习上,好了下面就看代码吧,这些代码也很简单,我们知道信息熵越大表示所含信息量越多。


下面是计算信息熵的方法,以及测试代码:

 

import math 



def cacShannonEnt(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 -= prob*math.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(cacShannonEnt(myDat))


第一个函数式计算信息熵的,第二个函数是创建数据的。

 

 



 

 

你可能感兴趣的:(计算)