zoukankan      html  css  js  c++  java
  • [置顶] 信息熵的计算

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



    当然学习过信号与系统的童鞋一定觉得这不是香农提出的东西吗?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))


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



  • 相关阅读:
    例子2.5
    例子2.4
    例子2.3
    例2
    例2.1
    快闪PPT 快速入门教程 脑洞大开,特效随你定 ----口袋动画PA(初学易上手001):
    Linux 基础与应用教程 0011(DNS解析)
    课外阅读记录:001
    好的特效模板
    学习记住并且时常要打开去看的VIM
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3165887.html
Copyright © 2011-2022 走看看