互信息和條件互信息——信息熵計算


之前自己用R寫的互信息和條件互信息代碼,雖然結果是正確的,但是時間復雜度太高。

最近看了信息熵的相關知識,考慮用信息熵來計算互信息和條件互信息。

MI(X,Y)=H(X)-H(X|Y)

H(X):熵,一種不確定性的度量    H(X,Y):聯合熵,兩個元素同時發生的不確定度

MI(X,Y)即是信息增益,信息增益相關知識可以參考前一篇博客。

H(X,Y)=H(X)+H(Y|X)->H(X|Y)=H(X,Y)-H(Y)

則MI(X,Y)=H(X)+H(Y)-H(X,Y)

MI(X1,X2|Y)=H(X1|Y)-H(X1|X2,Y)=H(X1,Y)-H(Y)-(H(X1,X2,Y)-H(X2,Y))

                    =H(X1,Y)+H(X2,Y)-H(Y)-H(X1,X2,Y)

正好在R語言當中有直接計算信息熵的包,代碼如下:

 1 library(infotheo)
 2 data<-read.csv("E:\\qq\\alarm_data\\Alarm1_s500_v1.csv",header = F)
 3 
 4 #互信息
 5 mi<-function(mylist1,mylist2){
 6   return(entropy(mylist1)+entropy(mylist2)-entropy(cbind(mylist1,mylist2)))
 7 }
 8 pvalue<-mi(data[,1],data[,2])#測試
 9 
10 
11 #條件互信息
12 cmi<-function(mylist1,mylist2,mylist3){
13   return(entropy(cbind(mylist1,mylist3))+entropy(cbind(mylist2,mylist3))-entropy(mylist3)-entropy(cbind(mylist1,mylist2,mylist3)))
14 }
15 pvalue1<-cmi(data[,5],data[,13],data[,c(7,8)])

前面計算的是原始的互信息和條件互信息,接下來打算下載infotheo包,並將里面信息熵部分更改為論文中改進的p(x)計算公式,來處理(-3,3)的連續數據

 


免責聲明!

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



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