卷 V · 共CH 19深度 19/24

互信息:知道了 Y,X 还剩多少不确定

前十八章的信息都是「从一头流到另一头」。这一卷换个问法:两样东西之间共享多少?这个问法会给出决策树的第一刀砍在哪、什么叫「相关」、以及一条消息值多少钱。

★ 真信息增益I(X;Y)比相关系数强在哪

▷ 先猜一下

教科书里那份「今天打不打球」的数据:14 天,9 天打了 5 天没打。四个特征(天气、气温、湿度、风)里,哪个和「打不打」共享的信息最多

A 天气B 气温C 湿度D 风

一个减法

互信息的定义就是一个减法:

I(X; Y) = H(X) − H(X | Y)
          ↑        ↑
     本来有多不确定   知道 Y 之后还有多不确定

# 读法:知道了 Y 之后,X 的不确定性【掉了多少】。
# 单位还是比特。

它有几个等价写法,各有各的用处:

I(X;Y) = H(X) − H(X|Y)          # 知道 Y 帮我省了多少
       = H(Y) − H(Y|X)          # 知道 X 帮我省了多少 —— 【一样多】
       = H(X) + H(Y) − H(X,Y)   # 两个圈的重叠部分
       = D( P(x,y) ‖ P(x)P(y) ) # 「联合分布」离「假装独立」有多远
◆ 三个立刻能用的性质
  1. 对称。I(X;Y) = I(Y;X)。「知道天气对判断打不打球的帮助」和「知道打不打球对判断天气的帮助」是同一个数。这一点很反直觉,但它是定义的直接推论。
  2. 非负。I(X;Y) ≥ 0,等于 0 当且仅当两者统计独立知道一件事,平均而言不可能让你对另一件事更糊涂。(注意「平均而言」——具体某一次观测确实可能让你更不确定,但期望不会。)
  3. 最后那个写法最深。I(X;Y) 就是「真实联合分布」和「假装它们独立」之间的 KL 散度。互信息量的是:「假设它们无关」这个错误,要付多少比特。

决策树的第一刀

现在拿它去做点事。经典的「今天打不打球」数据集,14 行:

# 什么都不知道的时候:
9 天打球,5 天不打
H(打球) = −(9/14)log₂(9/14) − (5/14)log₂(5/14) = 【0.9403 比特】

# 按「天气」分成三堆:
  sunny    5 天:打 2 / 不打 3   H = 0.9710
  overcast 4 天:打 4 / 不打 0   H = 0.0000   ← 全都一样!
  rain     5 天:打 3 / 不打 2   H = 0.9710

# 加权平均:
H(打球 | 天气) = (5/14)(0.9710) + (4/14)(0) + (5/14)(0.9710) = 0.6935

# 信息增益:
I(天气; 打球) = 0.9403 − 0.6935 = 【0.2467 比特】

四个特征算下来:

特征信息增益占原有不确定的说明
天气0.246726.2%overcast 那一支直接结出叶子
湿度0.151816.1%次优
0.04815.1%帮助不大
气温0.02923.1%几乎没用
◆ 「信息增益」不是一个类比,它就是互信息

ID3、C4.5 这些决策树算法里那个决定「先按哪个特征分」的指标,字面上就是 I(特征; 标签)

算法在每个节点做的事是:挑那个能让标签的熵掉得最多的特征。翻译成日常语言就是——先问那个最能缩小范围的问题。

而这正是第 1 章那个二十问游戏的策略。决策树是二十问游戏的自动化版本,而信息增益是它的评分函数。

一个真实的坑:信息增益偏爱「取值多」的特征

✗ 这个直觉是错的
「信息增益最高的特征,就是最有用的特征。」 信息增益系统性地偏爱取值种类多的特征,哪怕那个特征毫无预测能力。

极端例子:给这 14 行数据加一列「日期」,每行一个不同的值。

按「日期」分:14 堆,每堆 1 行
每一堆的熵都是 0(一行怎么可能不确定)
条件熵 = 0
信息增益 = 0.9403 − 0 = 【0.9403】—— 满分!

# 于是决策树会毫不犹豫地按日期分,
# 得到一棵 14 片叶子的树,训练集 100% 正确,
# 而它对新数据一无所知。

这就是第 13 章那个过拟合,在决策树里的具体长相。

C4.5 的修正是「信息增益率」:把信息增益除以特征本身的熵。

增益率 = I(特征; 标签) / H(特征)

# 日期这一列 H(日期) = log₂14 = 3.807,很大
# 于是增益率 = 0.9403 / 3.807 = 0.247,被拉回正常水平

这个修正的思路很值得记:一个指标如果偏爱「更复杂」的选项,就用「复杂度」去除它。这和 MDL 是同一个精神——好处要减去代价才是净收益。

互信息 vs 相关系数

「两个变量有关系」最常用的度量是皮尔逊相关系数 r。互信息比它强在哪?

◆ 相关系数只看得见直线

考虑 Y = X²,其中 X 在 [−1, 1] 上均匀分布。

  • 相关系数 r = 0。因为正负两边的效应完全抵消——按线性标准,它们「毫无关系」。
  • 互信息很大。因为知道 X 就完全知道了 Y。

相关系数问的是「能不能用一条直线描述」,互信息问的是「知道一个能不能减少另一个的不确定」。后者不关心形状。

这个差别有实际后果:

  • 特征筛选时只看相关系数,会漏掉所有非单调的特征(U 形、周期性、阈值型)。
  • 「这两个指标不相关」不等于「这两个指标无关」——这句话在数据分析里害人不浅。

代价是:互信息更难估。相关系数只要算两个矩,互信息要估整个联合分布——在连续变量和小样本上,估计误差可能大到淹没信号。所以实践中常用 MIC、KSG 估计量这类专门方法,而不是直接分箱数频率。

▸ 在现实里:互信息在哪里干活
  • 词共现与 word2vec。两个词的逐点互信息(PMI) = log₂ P(a,b)/(P(a)P(b)),量的是「这两个词一起出现,比它们各自独立出现应有的频率高多少」。Levy 和 Goldberg 在 2014 年证明了:word2vec 的 skip-gram 目标函数,在数学上等价于对一个平移过的 PMI 矩阵做矩阵分解。那些「国王 − 男人 + 女人 = 女王」的向量,底下就是这张 PMI 表。
  • 医学影像配准。把 CT 和 MRI 对齐,用的是互信息最大化——两种成像的灰度值完全不同,没法直接比像素,但对齐的时候互信息最高。这是 1990 年代的一个重要方法,至今仍在用。
  • 特征选择。mRMR(最大相关最小冗余):选和标签互信息大、但特征之间互信息小的那些。「有用」和「不重复」这两个要求,用同一个量表达。
  • 信道容量。第 14 章那个 C = max I(X;Y)——容量本来就是互信息的最大值。整个卷 IV 讲的其实都是这一章的量。
∑ 那个「两个圈」的图,和一个陷阱

互信息常被画成两个圆的交集:

   ┌───────H(X)───────┐
   │        ┌─────────┼──────H(Y)─────┐
   │        │ I(X;Y)  │               │
   │H(X|Y)  │         │      H(Y|X)   │
   └────────┼─────────┘               │
            └─────────────────────────┘

H(X,Y) = H(X) + H(Y) − I(X;Y)

这个图对两个变量很好用。但它在三个变量时会骗你。

三变量的「交互信息」I(X;Y;Z) 可以是负数,而面积不可能是负的。

一个具体例子:X 和 Y 是两枚独立硬币,Z = X XOR Y

I(X;Y)   = 0        # X 和 Y 独立
I(X;Y|Z) = 1 比特   # 但知道 Z 之后,知道 X 就完全知道 Y!

# 「条件之后相关性反而出现了」。
# 三个圈的图画不出这个。

这个现象在因果推断里叫「对撞因子(collider)」,是「多控制几个变量总是更好」这个直觉致命错误的根源。控制一个对撞因子,会凭空造出本来不存在的相关性。

所以:两变量时放心用文氏图,三变量以上时把它扔掉,回到公式。

◇ 结账
A:天气,0.2467 比特

而气温只有 0.0292——差了八倍多。如果你凭生活经验选了气温(「天热就不想动」),数据不同意。

天气之所以赢,很大程度上是因为 overcast 那四天全部打了球,那一支的熵是 0——问完这个问题,那一支就到头了。

这也是信息增益的一个直觉:它偏爱那些能「一刀切干净」的划分,哪怕只切干净了一部分。

这一章的一句话

互信息是「知道 Y 之后 X 的熵掉了多少」,它对称、非负、而且等于「假装两者独立要付的 KL 罚金」。决策树的信息增益字面上就是它,而相关系数只是它的一个只看得见直线的近亲。

下一章有一条只有一行的定理,但它会一次性解释很多事:为什么电影里那句「放大,增强」是假的、为什么再好的模型也救不了烂数据、以及为什么「多分析几轮」不会产生新信息。

它叫数据处理不等式,形式简单到近乎废话——而它是这本书里最容易被违反的一条常识。