python计算互信息_邻域互信息的python实现

互信息中,涉及到熵的概念,首先我们看一下熵如何用python实现。

首先,我们知道,世界的确定性越大,所获取到的信息就会越少,所以对应的信息熵也会越小。所以我们的信息度量是随着概率增加而单调递减的函数。这里我们用的公式为:

I(x_0) = -log(p(x_0))

对于一个属性来说,那么该集合的信息熵为:

H(X) = - \sum_{i=1}^{n}p(x_i)log(p(x_i))

在代码中可以用以下方式实现,其实在python的 sklearn 库中,有现成的计算函数—— mutual_info_score ,计算原理如下。

import numpy as np

from collections import Counter

def entropy(labels):

prob_dict = Counter(labels) #Counter 对相关list 进行计算。

s = sum(prob_dict.values())

probs = np.array([i/s for i in prob_dict.values()]) #计算每个重复函数所占的比率

# result = 0

# for x in probs:

# result += (-x)*np.log(x)

# return result

return -probs.dot(np.log(probs)) # 获取该分类的信息熵

labels_1 = ['a','a','a','c','c','c','s','s']

result= entropy(labels_1)

print(result)

而对于两个不同的属性的互信息,其计算公式为:

I(A,B) = H(A)+H(B)-H(A,B)

同样该方法可以用上面所示的公式计算出来。但是如果我们所用的数据是连续值的话,该方法就不奏效了。这里我们使用邻域互信息的概念。可以参考下面文档:什么是邻域互信息

在邻域互信息中,邻域半径半径  δ 目前并没有有效的方法来确定最优值。大部分论文在该值的获取中,都是使用的 经验法和试凑法。

计算步骤:

计算样本邻域

计算样本不确定性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值