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))


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

  • 相关阅读:
    176. Second Highest Salary
    175. Combine Two Tables
    172. Factorial Trailing Zeroes
    171. Excel Sheet Column Number
    169. Majority Element
    168. Excel Sheet Column Title
    167. Two Sum II
    160. Intersection of Two Linked Lists
    个人博客记录
    <meta>标签
  • 原文地址:https://www.cnblogs.com/awishfullyway/p/6668404.html
Copyright © 2011-2022 走看看