Python實現(xiàn)計算信息熵的示例代碼
一:數(shù)據(jù)集準備
如博主使用的是:
多層感知機(MLP)實現(xiàn)考勤預(yù)測二分類任務(wù)(sklearn)對應(yīng)數(shù)據(jù)集
導(dǎo)入至工程下

二:信息熵計算
1 導(dǎo)包
from math import log import pandas as pd
2 讀取數(shù)據(jù)集
dataSet = pd.read_csv('dataSet.csv', header=None).values.tolist()
3 數(shù)據(jù)統(tǒng)計
numEntries = len(dataSet) # 數(shù)據(jù)集大小
labelCounts = {}
for featVec in dataSet: #
currentLabel = featVec[-1] # 獲取分類標簽
if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0 # 字典值不等于0???
labelCounts[currentLabel] += 1 # 每個類中數(shù)據(jù)個數(shù)統(tǒng)計
4 信息熵計算
infoEnt = 0.0
for key in labelCounts: # 信息熵計算
prob = float(labelCounts[key]) / numEntries
infoEnt -= prob * log(prob, 2)
return infoEnt
# 返回值 infoEnt 為數(shù)據(jù)集的信息熵,表示為 float 類型
測試運行,得到 多層感知機(MLP)實現(xiàn)考勤預(yù)測二分類任務(wù)(sklearn)對應(yīng)數(shù)據(jù)集 信息熵為0.5563916622348017

三:完整源碼分享
from math import log
import pandas as pd
dataSet = pd.read_csv('dataSet.csv', header=None).values.tolist()
def calcInfoEnt(dataSet):
numEntries = len(dataSet) # 數(shù)據(jù)集大小
labelCounts = {}
for featVec in dataSet: #
currentLabel = featVec[-1] # 獲取分類標簽
if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0 # 字典值不等于0???
labelCounts[currentLabel] += 1 # 每個類中數(shù)據(jù)個數(shù)統(tǒng)計
infoEnt = 0.0
for key in labelCounts: # 信息熵計算
prob = float(labelCounts[key]) / numEntries
infoEnt -= prob * log(prob, 2)
return infoEnt
# 返回值 infoEnt 為數(shù)據(jù)集的信息熵,表示為 float 類型
if __name__ == '__main__':
# 輸出為當前數(shù)據(jù)集的信息熵
print(calcInfoEnt(dataSet))四:方法補充
熵,在信息論中是用來刻畫信息混亂程度的一種度量。熵最早源于熱力學(xué),后應(yīng)廣泛用于物理、化學(xué)、信息論等領(lǐng)域。1850年,德國物理學(xué)家魯?shù)婪?middot;克勞修斯首次提出熵的概念,用來表示任何一種能量在空間中分布的均勻程度。1948年,Shannon在Bell System Technical Journal上發(fā)表文章“A Mathematical Theory of Communication”,將信息熵的概念引入信息論中。本文所說的熵就是Shannon熵,即信息熵,解決了對信息的量化度量問題。
下面是小編為大家收集的計算信息熵的另一種方法,希望對大家有所幫助
import math
#以整型數(shù)據(jù)為例,給出其信息熵的計算程序。
###########################################
'''統(tǒng)計已知數(shù)據(jù)中的不同數(shù)據(jù)及其出現(xiàn)次數(shù)'''
###########################################
def StatDataInf( data ):
dataArrayLen = len( data )
diffData = [];
diffDataNum = [];
dataCpy = data;
for i in range( dataArrayLen ):
count = 0;
j = i
if( dataCpy[j] != '/' ):
temp = dataCpy[i]
diffData.append( temp )
while( j < dataArrayLen ):
if( dataCpy[j] == temp ):
count = count + 1
dataCpy[j] = '/'
j = j + 1
diffDataNum.append( count )
return diffData, diffDataNum
###########################################
'''計算已知數(shù)據(jù)的熵'''
###########################################
def DataEntropy( data, diffData, diffDataNum ):
dataArrayLen = len( data )
diffDataArrayLen = len( diffDataNum )
entropyVal = 0;
for i in range( diffDataArrayLen ):
proptyVal = diffDataNum[i] / dataArrayLen
entropyVal = entropyVal - proptyVal * math.log2( proptyVal )
return entropyVal
def main():
data = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2 ]
[diffData, diffDataNum] = StatDataInf( data )
entropyVal = DataEntropy( data, diffData, diffDataNum )
print( entropyVal )
data = [1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1 ]
[diffData, diffDataNum] = StatDataInf( data )
entropyVal = DataEntropy( data, diffData, diffDataNum )
print( entropyVal )
data = [1, 2, 3, 4, 2, 1, 2, 4, 3, 2, 3, 4, 1, 1, 1 ]
[diffData, diffDataNum] = StatDataInf( data )
entropyVal = DataEntropy( data, diffData, diffDataNum )
print( entropyVal )
data = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 ]
[diffData, diffDataNum] = StatDataInf( data )
entropyVal = DataEntropy( data, diffData, diffDataNum )
print( entropyVal )
data = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3, 4, 5 ]
[diffData, diffDataNum] = StatDataInf( data )
entropyVal = DataEntropy( data, diffData, diffDataNum )
print( entropyVal )
if __name__ == '__main__':
main()
###########################################
#運行結(jié)果
1.0
0.9182958340544896
1.965596230357602
2.0
2.3183692540329317到此這篇關(guān)于Python實現(xiàn)計算信息熵的示例代碼的文章就介紹到這了,更多相關(guān)Python計算信息熵內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python學(xué)習(xí)筆記之字典,元組,布爾類型和讀寫文件
這篇文章主要為大家詳細介紹了Python的字典,元組,布爾類型和讀寫文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02
Python任意字符串轉(zhuǎn)16, 32, 64進制的方法
今天小編就為大家分享一篇Python任意字符串轉(zhuǎn)16, 32, 64進制的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
python實現(xiàn)學(xué)生信息管理系統(tǒng)源碼
這篇文章主要為大家詳細介紹了python實現(xiàn)學(xué)生信息管理系統(tǒng)源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-02-02
對python 中re.sub,replace(),strip()的區(qū)別詳解
今天小編就為大家分享一篇對python 中re.sub,replace(),strip()的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
python中pandas nlargest()的詳細用法小結(jié)
df.nlargest()是一個DataFrame的方法,用于返回DataFrame中最大的n個值所在的行,通過調(diào)用nlargest()方法,我們返回了分數(shù)最高的三個行,并按照降序排列,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2023-10-10

