互信息:知道了 Y,X 还剩多少不确定
前十八章的信息都是「从一头流到另一头」。这一卷换个问法:两样东西之间共享多少?这个问法会给出决策树的第一刀砍在哪、什么叫「相关」、以及一条消息值多少钱。
教科书里那份「今天打不打球」的数据:14 天,9 天打了 5 天没打。四个特征(天气、气温、湿度、风)里,哪个和「打不打」共享的信息最多?
一个减法
互信息的定义就是一个减法:
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) ) # 「联合分布」离「假装独立」有多远
- 对称。
I(X;Y) = I(Y;X)。「知道天气对判断打不打球的帮助」和「知道打不打球对判断天气的帮助」是同一个数。这一点很反直觉,但它是定义的直接推论。 - 非负。
I(X;Y) ≥ 0,等于 0 当且仅当两者统计独立。知道一件事,平均而言不可能让你对另一件事更糊涂。(注意「平均而言」——具体某一次观测确实可能让你更不确定,但期望不会。) - 最后那个写法最深。
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.2467 | 26.2% | overcast 那一支直接结出叶子 |
| 湿度 | 0.1518 | 16.1% | 次优 |
| 风 | 0.0481 | 5.1% | 帮助不大 |
| 气温 | 0.0292 | 3.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)」,是「多控制几个变量总是更好」这个直觉致命错误的根源。控制一个对撞因子,会凭空造出本来不存在的相关性。
所以:两变量时放心用文氏图,三变量以上时把它扔掉,回到公式。
而气温只有 0.0292——差了八倍多。如果你凭生活经验选了气温(「天热就不想动」),数据不同意。
天气之所以赢,很大程度上是因为 overcast 那四天全部打了球,那一支的熵是 0——问完这个问题,那一支就到头了。
这也是信息增益的一个直觉:它偏爱那些能「一刀切干净」的划分,哪怕只切干净了一部分。
这一章的一句话
互信息是「知道 Y 之后 X 的熵掉了多少」,它对称、非负、而且等于「假装两者独立要付的 KL 罚金」。决策树的信息增益字面上就是它,而相关系数只是它的一个只看得见直线的近亲。
下一章有一条只有一行的定理,但它会一次性解释很多事:为什么电影里那句「放大,增强」是假的、为什么再好的模型也救不了烂数据、以及为什么「多分析几轮」不会产生新信息。
它叫数据处理不等式,形式简单到近乎废话——而它是这本书里最容易被违反的一条常识。