信息熵的計算


最近在看決策樹的模型,其中涉及到信息熵的計算,這里東西是由信號處理中來的,理論部分我就不再重復前人的東西了,下面給出兩個簡單的公式:

 

當然學習過信號與系統的童鞋一定覺得這不是香農提出的東西嗎?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))


第一個函數式計算信息熵的,第二個函數是創建數據的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM