主页 模型库 竞赛 学习中心 工具箱 论文库 前沿 建模空间 AI建模
学习中心 探索专题 机器学习 贝叶斯方法

本页实验台

  1. 先验到后验
  2. 朴素贝叶斯
  3. 贝叶斯线性回归
  4. 高斯过程
LAB 01

先验到后验

抛硬币:Beta 先验一次次被数据推着走

后验均值—
直接数频率(最大似然)—
后验标准差—
大约 95% 的区间—
把抛掷次数从 0 一路拖到 400,看那条曲线怎么一步步变窄、变尖。n=0 时后验就是先验(Beta(1,1) 是一条水平线:对 p 完全没有意见);n=40 时已经能大致看出 p 在 0.6 附近;n=400 时窄成一根针,几乎盯死了真值。Beta 先验配二项似然,后验还是 Beta——参数只要做加法:a ← a + 正面数,b ← b + 反面数。这叫共轭先验,是少数几种能手算的情形。现在把先验参数 a 拖到 6.0、b 拖到 0.2(强烈相信是正面)。n 很小时后验被先验主导;但把 n 加到 200,先验的影响就基本看不见了。这是贝叶斯最常被误解的一点:先验不是"主观成见",而是"在看到数据之前你知道多少",而且数据一多它就自动退场。对比读数里的后验均值和最大似然:n 小的时候两者差很多,n 大的时候几乎相同。Beta(1,1) 先验下的后验均值是 (正面数+1)/(n+2),这就是拉普拉斯平滑——很多人把它当成一个防止除零的小技巧,其实它是一个带均匀先验的贝叶斯估计。(这也解释了为什么它在 n 小的时候比直接数频率靠谱:抛 3 次全是正面,最大似然说 p=1.0,贝叶斯说 0.8——后者显然更该信。)
LAB 02

朴素贝叶斯

"特征互相独立"这个假设明显是错的,为什么还这么好用

朴素贝叶斯的准确率—
用了协方差以后的准确率—
当前的相关性—
差多少—
朴素贝叶斯假设各个特征互相独立。这个假设几乎总是错的。奇怪的是它还经常很好用。这一页想说清什么时候好用、什么时候不好用。先把"两类均值分开多少"拖到 0——两类的中心完全重合,所有区别只藏在相关结构里(一类正相关、一类负相关,散点图上是两个交叉的椭圆)。这时朴素贝叶斯的准确率是 50.5%,也就是瞎猜;而用了协方差的模型有 85.7%。因为独立假设正好把唯一有用的信息(相关性)扔掉了。现在把分开程度拖到 1.0。朴素贝叶斯升到 92.3%,全协方差 96.5%,差距从 35 个百分点缩到 4 个。规律很清楚:当类别信息主要在各特征自己的边缘分布里时,独立假设无伤大雅;当信息藏在特征之间的关系里时,朴素贝叶斯就彻底瞎了。这解释了它在文本分类上的出色表现:"免费""中奖""点击"这些词各自出现的频率就已经很能说明问题,词与词的相关性是锦上添花。还有一个常被忽略的优点:朴素贝叶斯只需要估 2d 个参数,全协方差要估 d(d+1)/2 个。在 d 很大、样本很少的时候,一个有偏但稳定的模型,常常打得过一个无偏但方差极大的模型——这又回到了偏差—方差权衡。
LAB 03

贝叶斯线性回归

不是一条拟合线,是一束线——预测区间自己就出来了

斜率的后验:均值 ± 标准差—
截距的后验:均值 ± 标准差—
真实的斜率 / 截距—
x=6 处的区间比 x=0 处宽多少—
普通最小二乘给你一条线,贝叶斯回归给你一束线。紫色的四十条线都是从参数的后验分布里抽出来的,每一条都"和数据相容"。它们在数据密集的地方几乎重合,在数据的两端明显散开——这个扇形就是不确定性,而它是自动出现的,不需要另外做 bootstrap 或者算什么公式。下面那张图把这件事量化了:预测区间的宽度是一条向两边张开的曲线,在有数据的范围内最窄,越往外推越宽。默认参数下,x=6(已经在数据范围之外)处的区间比 x=0 处宽一倍多。这正是我们希望模型具备的诚实:它知道自己在哪儿有把握,在哪儿是在猜。普通最小二乘不会告诉你这个——它在外推一百倍的地方,报出来的点估计和在数据正中间一样自信。把先验宽度 τ 调小到 0.2 再看。后验会被明显拉向 0,斜率估计变小——这时贝叶斯线性回归就等价于岭回归,正则化系数 λ 恰好等于 σ²/τ²。这个对应关系很值得记住:L2 正则 = 高斯先验,L1 正则 = 拉普拉斯先验。"加个惩罚项防过拟合"这句工程话,在贝叶斯语言里就是"我事先认为参数不会太大"。
LAB 04

高斯过程

数据密的地方窄,数据稀的地方宽:不确定性长什么样

数据密处的标准差(x=1.5)—
空隙处的标准差(x=4)—
外推处的标准差(x=9.5)—
边缘似然(越大说明核越合适)—
高斯过程干脆不设参数形式,直接对"函数本身"放一个先验。数据点被安排在 0–3 和 5–8 两段,中间 3–5 故意留空。看那条阴影带:在有数据的地方它收得很紧(标准差 0.094),在空隙处鼓起来(0.351),越过最后一个数据点以后彻底张开(1.193)。这个"没数据的地方我不知道"的行为是自动的,不需要任何额外的建模。把长度尺度 ℓ 拖到 0.3 再看。曲线变得极其扭曲,而且离开每个数据点一点点就立刻张到最大——模型认为函数变化非常快,于是不敢做任何外推。拖到 3.0:曲线过分光滑,把真实的起伏抹掉了,但在空隙处反而很自信(0.132)——这种自信是错的,它来自一个过强的先验假设。怎么选 ℓ?看最后一行读数。边缘似然在 ℓ=1.5 附近最大(−6.51),比 ℓ=0.3 的 −16.53 和 ℓ=3 的 −9.60 都高。这是贝叶斯方法一个很漂亮的地方:超参数不需要另外留一份验证集,边缘似然自带"复杂度惩罚",会自动排斥过简和过繁。(代价是要算一个 n×n 矩阵的行列式和逆,复杂度 O(n³)——这就是高斯过程在大数据上不好用的原因。)

这一页想说的

贝叶斯方法把"参数是多少"换成了"参数的分布是什么",由此免费得到三样东西:不确定性(后验的宽度)、正则化(先验)、以及超参数选择(边缘似然)。这一页也标出了它的边界:朴素贝叶斯的独立假设在信息藏于相关结构时会彻底失效;高斯过程的 O(n³) 让它在大数据上不实用。记住那条对应关系:L2 正则就是高斯先验,λ = σ²/τ²。

接着看

← 返回模块 ← 返回探索专题