最近在看決策樹的模型,其中涉及到信息熵的計算,這里東西是由信號處理中來的,理論部分我就不再重復前人的東西了,下面給出兩個簡單的公式:
當然學習過信號與系統的童鞋一定覺得這不是香農提出的東西嗎?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))
第一個函數式計算信息熵的,第二個函數是創建數據的。