欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)計算信息熵的示例代碼

 更新時間:2022年12月26日 14:11:02   作者:顧城沐心  
信息熵(information?entropy)是信息論的基本概念。描述信息源各可能事件發(fā)生的不確定性。本文將通過Python實現(xiàn)信息熵的計算,感興趣的可以了解一下

一:數(shù)據(jù)集準備

如博主使用的是:

多層感知機(MLP)實現(xiàn)考勤預測二分類任務(sklearn)對應數(shù)據(jù)集

導入至工程下

二:信息熵計算

1 導包

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)考勤預測二分類任務(sklearn)對應數(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))

四:方法補充

熵,在信息論中是用來刻畫信息混亂程度的一種度量。熵最早源于熱力學,后應廣泛用于物理、化學、信息論等領域。1850年,德國物理學家魯?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()
###########################################
#運行結果
1.0
0.9182958340544896
1.965596230357602
2.0
2.3183692540329317

到此這篇關于Python實現(xiàn)計算信息熵的示例代碼的文章就介紹到這了,更多相關Python計算信息熵內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

  • Python3 assert斷言實現(xiàn)原理解析

    Python3 assert斷言實現(xiàn)原理解析

    這篇文章主要介紹了Python3 assert斷言實現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • python日志logging模塊使用方法分析

    python日志logging模塊使用方法分析

    這篇文章主要介紹了python日志logging模塊使用方法,結合實例形式較為詳細的分析了Python日志logging模塊相關API函數(shù)與應用技巧,需要的朋友可以參考下
    2019-05-05
  • Python學習筆記之字典,元組,布爾類型和讀寫文件

    Python學習筆記之字典,元組,布爾類型和讀寫文件

    這篇文章主要為大家詳細介紹了Python的字典,元組,布爾類型和讀寫文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 一文詳細介紹Python中的OrderedDict對象

    一文詳細介紹Python中的OrderedDict對象

    OrderedDict是Python標準庫collections模塊的一部分,下面這篇文章主要給大家介紹了關于Python中OrderedDict對象的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-08-08
  • Anaconda(miniconda)入門使用完全指南

    Anaconda(miniconda)入門使用完全指南

    Conda是一個管理版本和Python環(huán)境的工具,它使用起來非常容易,下面這篇文章主要給大家介紹了關于Anaconda(miniconda)入門使用的相關資料,文中介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • Python任意字符串轉16, 32, 64進制的方法

    Python任意字符串轉16, 32, 64進制的方法

    今天小編就為大家分享一篇Python任意字符串轉16, 32, 64進制的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python淺析守護線程與非守護線程的區(qū)別與使用

    python淺析守護線程與非守護線程的區(qū)別與使用

    守護線程,又稱后臺線程,它是在后臺運行的,如果所有前臺線程都死亡,那么后臺線程就會自動死亡,本章我們來了解守護線程與非守護線程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-08-08
  • python實現(xiàn)學生信息管理系統(tǒng)源碼

    python實現(xiàn)學生信息管理系統(tǒng)源碼

    這篇文章主要為大家詳細介紹了python實現(xiàn)學生信息管理系統(tǒng)源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • 對python 中re.sub,replace(),strip()的區(qū)別詳解

    對python 中re.sub,replace(),strip()的區(qū)別詳解

    今天小編就為大家分享一篇對python 中re.sub,replace(),strip()的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python中pandas nlargest()的詳細用法小結

    python中pandas nlargest()的詳細用法小結

    df.nlargest()是一個DataFrame的方法,用于返回DataFrame中最大的n個值所在的行,通過調用nlargest()方法,我們返回了分數(shù)最高的三個行,并按照降序排列,本文結合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2023-10-10

最新評論