Conditional mutual information 条件互信息

主要参考wiki,
另外参考下面博客的联合熵部分的感性理解,对联合熵的描述非常形象生动。
http://blog.csdn.net/pipisorry/article/details/51695283

  • 首先理解信息(I)的定义
    I 是衡量信息w的量,只和w发生的概率P(w)有关,认为

    I(w)=f(P(w))

    并且满足公式
    I(A,B)=I(A)+I(B)P(A,B)=P(A)P(B)

    若A,B是独立事件,那么AB同时发生的信息量是AB分别发生的信息量之和,而概率则是求乘积。
    那么满足公式的加法和乘法条件的 f(.) 就是 log(.) 函数了。
    所以定义 I(w)=log(P(w))
    详细展开:
    https://en.wikipedia.org/wiki/Self-information
    这里写图片描述
    这里写图片描述

  • 熵Entropy(E)的定义
    熵就是信息的期望,所以要做一个 E(w)=P(w)I(w)=P(w)log(P(w))
    注意到当P(w)等于0时,由于在P(w)极限逼近0时,P(w)log(P(w))等于0,所以规定

    if:P(w)=0,then:P(w)log(P(w))=0

    这里写图片描述
    这里写图片描述

  • joint entropy 联合熵
    描述一个变量集(这个集合包括X,Y)的不确定性
    注意H(X,Y)理解为描述X和Y要用到的信息量,那么H(X,Y)包括要来描述X的H(X)+已知X要额外描述Y需要增加的H(Y|X)。而I(X;Y)可以理解为描述X和Y信息关联程度的量。
    换到图上,H(X,Y)是两个圆覆盖的总面积,I(X,Y)是重叠面积,H(X|Y)和H(Y|X)是两个圆互不交的地方。
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

  • mutul information 互信息
    描述X和Y的之间的依赖程度。如果X和Y完全独立,那么 p(x,y)=p(x)p(y) ,则log(1)=0,最后的I(X;Y)=0,如果存在依赖,那么I能够描述出依赖的程度;
    这里写图片描述
    这里写图片描述
    这里写图片描述

  • 条件互信息
    在条件(Z)发生时的条件互信息
    这里写图片描述
    这里写图片描述

总结

  • 信息I(w)=f(P(I(w)))
  • 信息发生的概率P(I(w))
  • 信息*概率=熵(其实就是信息的期望)
  • f(.)=Klog(.)
  • 优美的加法(I(w)之间)乘法(P(I(w))之间),他们的联系就是log,是log让他们直接加法变成了乘法。
  • 11
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
上面的回答中已经给出了Python实现条件互信息的代码,但是这里再给一个更详细的代码: ```python import numpy as np from scipy import special, stats def conditional_mutual_information(x, y, z): # Compute mutual information between x and y mi_xy = mutual_information(x, y) # Compute mutual information between x and y conditioned on z mi_xyz = mutual_information(np.column_stack((x, z)), np.column_stack((y, z))) mi_xz = mutual_information(z, x) mi_yz = mutual_information(z, y) # Compute conditional mutual information cmi = mi_xy - mi_xz - mi_yz + mi_xyz return cmi def mutual_information(x, y): # Compute joint probability distribution p_xy, _, _ = np.histogram2d(x, y) # Compute marginal probability distributions p_x = p_xy.sum(axis=1) p_y = p_xy.sum(axis=0) # Compute entropy of marginal probability distributions h_x = entropy(p_x) h_y = entropy(p_y) # Compute entropy of joint probability distribution h_xy = entropy(p_xy.reshape(-1)) # Compute mutual information mi = h_x + h_y - h_xy return mi def entropy(p): # Compute entropy of probability distribution p = p[np.nonzero(p)] return -np.sum(p * np.log2(p)) # Example usage x = np.random.normal(0, 1, size=1000) y = x ** 2 + np.random.normal(0, 0.5, size=1000) z = np.random.binomial(1, 0.5, size=1000) cmi = conditional_mutual_information(x, y, z) print("CMI between x and y conditioned on z:", cmi) ``` 此代码实现了条件互信息互信息的计算。其中,`conditional_mutual_information`函数计算条件互信息,`mutual_information`函数计算互信息,`entropy`函数计算熵。使用示例数据进行测试,输出CMI的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值