互信息(Mutual Information,MI)的原理和计算

互信息(Mutual Information,MI)是信息论中的一个度量,用于量化两个随机变量之间的依赖关系。互信息度量了一个随机变量包含了关于另一个随机变量的信息量。它可以用来识别和量化两个信号之间的非线性相关性。互信息可以揭示两个信号共享的信息量,是信息论中的一个重要概念。

互信息的定义

在这里插入图片描述

直观解释

在这里插入图片描述

计算互信息的意义

在这里插入图片描述

示例

以下是一个计算互信息的示例,假设我们有两个离散化的信号
X 和 Y:

import numpy as np

def compute_probabilities(digitized_signal, bins):
    prob = np.zeros(bins)
    for bin_index in digitized_signal:
        prob[bin_index - 1] += 1
    prob /= len(digitized_signal)
    return prob

def compute_joint_probabilities(X_dig, Y_dig, bins):
    joint_prob = np.zeros((bins, bins))
    for x_bin, y_bin in zip(X_dig, Y_dig):
        joint_prob[x_bin - 1, y_bin - 1] += 1
    joint_prob /= len(X_dig)
    return joint_prob

def mutual_information(P_X, P_Y, P_XY):
    mi = 0
    for x in range(len(P_X)):
        for y in range(len(P_Y)):
            if P_XY[x, y] > 0:  # 忽略 P_XY(x,y) 为 0 的情况以避免 log(0)
                mi += P_XY[x, y] * np.log(P_XY[x, y] / (P_X[x] * P_Y[y]))
    return mi

# 生成示例数据
np.random.seed(42)
X = np.sin(np.linspace(0, 10 * np.pi, 1000)) + np.random.normal(0, 0.1, 1000)
Y = np.sin(np.linspace(0, 10 * np.pi, 1000) + np.pi / 4) + np.random.normal(0, 0.1, 1000)

# 离散化信号
def discretize_signal(signal, bins):
    min_val, max_val = np.min(signal), np.max(signal)
    bin_edges = np.linspace(min_val, max_val, bins + 1)
    digitized = np.digitize(signal, bin_edges[:-1])
    return digitized

bins = 20
X_binned = discretize_signal(X, bins)
Y_binned = discretize_signal(Y, bins)

# 计算边缘概率分布和联合概率分布
P_X = compute_probabilities(X_binned, bins)
P_Y = compute_probabilities(Y_binned, bins)
P_XY = compute_joint_probabilities(X_binned, Y_binned, bins)

# 计算互信息
mi = mutual_information(P_X, P_Y, P_XY)
print(f'互信息: {mi:.4f}')

解释

在这里插入图片描述
通过互信息,可以定量地评估两个信号之间的信息共享和依赖关系,这对于分析复杂系统中的变量关系非常有用。

注释1:

互信息(Mutual Information, MI)在脑电信号分析中的作用主要体现在以下几个方面:
在这里插入图片描述
互信息值越高,表示两个信号之间共享的信息量越大,即它们之间的依赖关系越强。互信息可以捕捉到线性和非线性依赖关系,是分析脑电信号之间关系的重要工具。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 21:12:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 21:12:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 21:12:03       57 阅读
  4. Python语言-面向对象

    2024-07-12 21:12:03       68 阅读

热门阅读

  1. 大语言模型系列-Transformer

    2024-07-12 21:12:03       21 阅读
  2. Git-Updates were rejected 解决

    2024-07-12 21:12:03       20 阅读
  3. 推荐系统中的冷启动问题及其解决方案

    2024-07-12 21:12:03       18 阅读
  4. vue在线预览excel、pdf、word文件

    2024-07-12 21:12:03       24 阅读
  5. 解决el-table表格没有横向滚动条

    2024-07-12 21:12:03       22 阅读
  6. PyTorch 1-深度学习

    2024-07-12 21:12:03       20 阅读
  7. pip install selenium异常

    2024-07-12 21:12:03       19 阅读
  8. PostgreSQL 导入 .gz 备份文件

    2024-07-12 21:12:03       18 阅读
  9. 力扣 225题 用队列实现栈 记录

    2024-07-12 21:12:03       20 阅读