互信息和条件互信息——信息熵计算


之前自己用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