在这篇文章中我们详细的讨论了随机熵、时间无关熵和真实熵,但是他们都是针对单一变量的时间序列进行的处理,无法反映多变量时间序列之间的关系。那么要如何反映两个变量之间是否存在内在联系呢,这里就不得不提到条件熵:
信息熵反映的是随机变量的所有可能取值,即所有可能发生事件所带来的信息量的期望。那么信息熵指的是定义为X给定条件下,Y的条件概率分布的熵对X的数学期望。话不多说直接上代码:
# 计算信息熵
def calc_ent(x):
"""
calculate shanno ent of x
"""
x_value_list = set([x[i] for i in range(x.shape[0])])
ent = 0.0
for x_value in x_value_list:
p = float(x[x == x_value].shape[0]) / x.shape[0]
logp = np.log2(p)
ent -= p * logp