7.3 互信息
互信息(Mutual Information)衡量两个随机变量之间的共享信息量——它是比相关系数更强大的依赖度量,能捕捉非线性关系。
定义
互信息衡量两个随机变量 和 之间的共享信息量:
等价形式
互信息可以用熵表示:
- : 的不确定性
- :知道 后 剩余的不确定性,条件熵的正式定义为 ——即给定 后 的条件分布的平均不确定性
- :知道 能减少多少对 的不确定性
性质:
- ,当且仅当 和 独立时取等
- (对称性)
手算实例:2×2 联合分布
考虑一个二元随机变量的联合分布 :
步骤 1:计算 和
| 贡献 | |||||
|---|---|---|---|---|---|
| 0 | 0 | ||||
| 0 | 1 | ||||
| 1 | 0 | ||||
| 1 | 1 |
步骤 2:求和
和 之间存在正互信息——知道其中一个变量能减少约 0.1245 比特的不确定性。
Python 示例
python
import numpy as np
def mutual_information(joint):
"""计算互信息 I(X;Y)"""
joint = np.asarray(joint)
px = joint.sum(axis=1) # P(X)
py = joint.sum(axis=0) # P(Y)
# 外积 P(x)P(y)
outer = np.outer(px, py)
# 逐元素计算
mi = np.sum(joint * np.log2((joint + 1e-15) / (outer + 1e-15)))
return mi
joint = np.array([[0.3, 0.1], [0.2, 0.4]])
mi = mutual_information(joint)
print(f"互信息 I(X;Y) = {mi:.4f} 比特")
# 输出: 互信息 I(X;Y) = 0.1245 比特Quant Link:特征选择中的互信息
特征选择中,互信息是比相关系数更强大的指标——它能捕捉非线性依赖。在量化因子研究中,我们计算每个候选因子与未来收益的互信息,挑选出信息含量最高的因子,而非仅仅依赖线性相关系数。
为什么互信息优于相关系数?
| 指标 | 捕捉线性关系 | 捕捉非线性关系 | 对异常值敏感 |
|---|---|---|---|
| Pearson 相关系数 | ✅ | ❌ | ✅ 敏感 |
| Spearman 秩相关系数 | ✅ | ✅(单调) | ❌ 较稳健 |
| 互信息 | ✅ | ✅(任意关系) | ❌ 较稳健 |
实际应用流程
- 对每个候选因子 与未来收益 做离散化(分箱)
- 计算
- 按互信息从大到小排序,选取 Top-K 因子
- 去除高度冗余的因子(因子间互信息过高)
研究发现,在 A 股市场中,某些因子的互信息排名和线性相关系数排名存在显著差异——这意味着单纯依赖线性筛选会遗漏重要的非线性信号。 \n> 下一步:继续学习 7.4 最大熵原理与量化应用