资讯详情

资讯详情

从伯努利到狄利克雷:五大概率分布与共轭先验的建模逻辑

概率论里有一类分布初学者学完一遍觉得都懂了过两周再被问二项分布和伯努利分布到底差在哪贝塔分布为什么老跟二项分布一起出现狄利克雷分布凭什么能当多项分布的共轭先验往往就卡壳了。我自己当年也是这么过来的——公式背得滚瓜烂熟一到实际建模就分不清该用哪个。这篇东西就是把这五个分布串成一条线讲清楚从最基础的伯努利到试验次数推广后的二项再到多类别推广后的多项然后转到它们各自的参数分布——贝塔和狄利克雷。核心线索只有一条似然与概率的区别。这条线捋顺了这五个分布就不再是五个孤立公式而是一套层层递进的建模工具。这篇适合谁看如果你正在学概率统计、准备做贝叶斯相关的项目、或者写代码时被scipy.stats里一堆分布名字搞晕那这篇基本能对上你的需求。我会尽量用生活化的例子把每个分布讲透同时把似然函数怎么写、共轭先验为什么成立这些容易含糊的地方掰开揉碎。全程不堆砌推导但关键的计算逻辑会给到位方便你直接对照复现。1. 先把似然和概率这两个词掰开很多人学这五个分布卡住的第一个坎不是公式而是语言。教材里一会儿说概率一会儿说似然同一个式子P(x|θ)有时候叫概率有时候叫似然初学者很容易以为这是两个不同的东西。其实式子长得一样区别在于你把哪个量当成变量。1.1 同一个式子两种看法拿抛硬币举例。设正面朝上的概率是 θ抛一次结果是 x1 表示正面0 表示反面。那么如果 θ 已知比如 θ0.5问抛出正面的可能性多大这是在算概率。此时 θ 是固定的参数x 是变量。如果 x 已知比如已经抛出了正面问θ 取不同值的可能性多大这是在算似然。此时 x 是固定的观测数据θ 是变量。用一句话概括概率是给定参数数据出现的可能性似然是给定数据参数取某值的合理性。数学上两者都写成P(x|θ)但视角完全相反。这个视角切换是理解后面所有共轭先验的钥匙务必先建立起来。我习惯用一个类比概率像知道了骰子的配重猜能掷出几点似然像已经掷出了一堆结果反推骰子的配重。前者是正向预测后者是反向推断。贝叶斯推断干的活本质上就是似然这一侧的事情。1.2 为什么似然不是概率分布这里有个特别容易踩的坑似然函数L(θ|x)关于 θ 一般不积分为 1所以它不是 θ 的概率分布。很多人第一次看到似然这个词下意识以为它也是某种概率然后困惑为什么似然加起来不等于 1。原因很简单似然是把数据固定、让参数变而参数本身不一定是个随机变量频率学派眼里 θ 就是固定常数。只有在贝叶斯框架下我们才给 θ 配一个先验分布这时候 θ 才真正成为随机变量似然乘以先验再归一化才得到后验分布。所以似然是零件不是成品分布。理解这一点后面贝塔分布、狄利克雷分布作为先验出现时你就不会觉得突兀了。提示写代码时scipy.stats.binom.pmf(k, n, p)算的是概率给定 p 求 k 的可能性而scipy.stats.binom.logpmf(k, n, p)对 p 求导优化时用的就是似然视角。同一个函数看你把谁当输入。2. 伯努利分布一切从这里长出来伯努利分布是这五个里最简单的但恰恰因为它简单很多细节被忽略导致后面推广时理解不到位。它描述的是一次只有两种结果的试验成功/失败、正面/反面、点击/未点击。2.1 伯努利分布的似然长什么样设单次试验结果为 x ∈ {0, 1}成功概率为 θ。伯努利分布的概率质量函数是P(x|θ) θ^x * (1-θ)^(1-x)这个写法很巧妙它把两种情况合并成一个式子x1 时只剩 θx0 时只剩 (1-θ)。我第一次看到这个技巧时觉得挺妙后来发现这种用指数开关项合并分支的写法在多项分布、狄利克雷分布里会反复出现值得记住。如果观测到 n 次独立试验数据是 x₁, x₂, ..., xₙ那么似然函数是L(θ|x) ∏ θ^xi * (1-θ)^(1-xi) θ^(Σxi) * (1-θ)^(n-Σxi)注意这里的关键操作把连乘里同底数的项合并指数相加。Σxi 就是成功次数n-Σxi 就是失败次数。这一步合并是后面推导二项分布和贝塔共轭性的基础别小看它。2.2 一个常被忽略的细节独立同分布假设上面似然能写成连乘前提是各次试验独立同分布。这个假设在实际项目里经常被违反但很多人不检查就直接套公式。比如做用户点击预测同一个用户连续多次点击行为显然不独立有习惯性这时候硬套伯努利似然参数估计会有偏。我的经验是拿到数据先问一句这些观测真的独立吗。如果明显有分组结构同一用户、同一设备要么在模型里加随机效应要么至少做分组聚合后再套分布。这个检查花不了几分钟但能避免后面一堆莫名其妙的偏差。2.3 最大似然估计为什么是数数对伯努利似然求最大结果特别直观θ 的 MLE 就是成功次数除以总次数。推导过程是对数似然求导令其为零log L(θ) (Σxi) * log θ (n-Σxi) * log(1-θ) d/dθ Σxi/θ - (n-Σxi)/(1-θ) 0 θ_hat Σxi / n这个结果就是数数——抛 10 次 7 次正面θ 估计就是 0.7。但这里有个实际问题如果 n 很小比如只抛了 2 次都是正面MLE 给出 θ1意味着以后永远正面这显然不合理。这个小样本极端估计问题正是贝塔分布作为先验要解决的后面会详细讲。3. 二项分布把一次推广到多次伯努利是单次试验二项是 n 次独立伯努利试验里成功次数的分布。注意区分伯努利的随机变量是单次结果0 或 1二项的随机变量是成功总次数0 到 n 的整数。3.1 二项分布与伯努利似然的血缘关系二项分布的概率质量函数是P(k|n, θ) C(n,k) * θ^k * (1-θ)^(n-k)对比一下伯努利的 n 次似然θ^(Σxi) * (1-θ)^(n-Σxi)你会发现核心部分一模一样只多了一个组合数系数 C(n,k)。这个系数来自哪 k 次成功的组合计数——因为二项分布只关心成功总数不关心具体哪几次成功所以要把所有可能的排列方式加起来。这个观察很重要二项分布的似然关于 θ 的部分和伯努利 n 次试验的似然形状完全一致都是θ^成功数 * (1-θ)^失败数。正因为这个形状一致贝塔分布才能同时当两者的共轭先验。很多人学的时候把伯努利和二项割裂开其实它们在参数推断层面是同一回事。3.2 组合数系数在推断里为什么可以扔掉做贝叶斯推断时我们关心的是后验分布P(θ|k) ∝ P(k|θ) * P(θ)。这里 C(n,k) 是个与 θ 无关的常数归一化时会被消掉所以实际计算里经常直接写P(θ|k) ∝ θ^k * (1-θ)^(n-k) * P(θ)把组合数省了。我见过有同学纠结省掉组合数会不会算错答案是只要你在做相对比较或归一化省掉没问题但如果你要算具体的概率值比如预测下一次试验成功的边际概率组合数就得补回来。判断标准很简单这个常数里含不含你要推断的参数 θ。不含就能省含就不能省。3.3 二项分布在实战中的典型场景二项分布用得极广但用对的前提是场景匹配。我列几个典型场景和对应的注意点场景随机变量注意点广告点击率估计n 次曝光中的点击数曝光之间要近似独立同一用户重复曝光需去重或分层质检合格率n 个产品中的合格数批次间工艺若有漂移不能简单合并A/B 测试转化数每组 n 次访问的转化数两组要同分布假设成立否则比较无意义这里最容易犯的错是把不独立的观测硬塞进二项模型。比如统计某页面的点击率如果同一用户刷新多次都算一次曝光那这些曝光高度相关二项分布的方差假设方差 nθ(1-θ)会被低估导致置信区间过窄、结论过于自信。解决办法是做用户级聚合或者改用能建模相关性的模型。4. 多项分布从两类到多类二项分布是成功/失败两类多项分布把它推广到 K 个类别。掷骰子是经典例子一次掷出 1 到 6 点六个类别每个类别有各自的概率。4.1 多项分布的似然结构设一次试验有 K 个可能结果第 j 类的概率是 θⱼ且 Σθⱼ 1。做 n 次独立试验第 j 类出现次数为 nⱼΣnⱼ n那么多项分布的概率质量函数是P(n₁,...,n_K | θ) n! / (n₁!...n_K!) * ∏ θⱼ^nⱼ前面那个阶乘比值是多项式系数对应二项里的组合数。核心的似然部分又是∏ θⱼ^nⱼ和伯努利、二项一脉相承——都是参数的各次幂连乘。这个模式贯穿始终记住它五个分布就串起来了。4.2 约束条件 Σθⱼ1 带来的麻烦多项分布有个二项没有的麻烦参数有约束Σθⱼ1。这意味着 K 个参数里只有 K-1 个是自由的。做最大似然估计时不能对每个 θⱼ 独立求导得用拉格朗日乘子处理约束。推导结果依然很直观θⱼ 的 MLE 就是 nⱼ/n即第 j 类的频率。但约束的存在让贝叶斯推断稍微复杂一点——先验分布必须也定义在这个单纯形Σθⱼ1 且 θⱼ≥0 的区域上。这正是狄利克雷分布的用武之地它天然定义在单纯形上是多项似然的共轭先验。我踩过的一个坑早期写代码时直接用 K 个独立的贝塔分布当多项的先验结果发现归一化后不满足 Σθⱼ1整个后验算出来是错的。正确做法是用狄利克雷分布它内部就处理好了这个约束。这个教训说明先验的支撑集必须和参数的可行域一致否则数学上就不成立。4.3 多项分布在文本与推荐里的身影多项分布在实际项目里出现频率比想象中高。文本分类里的词频统计一篇文档里各词出现次数、推荐系统里的多品类点击分布、用户行为的多状态转移计数底层都是多项模型。举个具体例子做垃圾邮件分类把一封邮件看成词袋每个词是 K 个词表里的一个类别邮件里各词出现次数服从多项分布。朴素贝叶斯分类器就是在这个假设下工作的。这里要注意多项模型和每个词独立伯努利模型的区别前者关心词频一个词出现几次后者只关心词是否出现0/1。选错模型分类效果会有明显差异我实测过在长文本上多项模型通常更合适短文本上两者差距不大。5. 贝塔分布二项/伯努利的参数分布到这里画风一转。前面三个分布描述的是数据的分布贝塔和狄利克雷描述的是参数的分布。这个区分是理解共轭先验的关键也是很多人绕不过去的弯。5.1 贝塔分布为什么定义在 [0,1] 上贝塔分布的概率密度函数是Beta(θ|α, β) θ^(α-1) * (1-θ)^(β-1) / B(α, β)其中 B(α,β) 是贝塔函数起归一化作用。注意 θ 的取值范围是 [0,1]——这正好是伯努利/二项分布参数 θ 的可行域。这不是巧合而是贝塔分布被选作共轭先验的根本原因先验的支撑集必须覆盖参数的可行域。α 和 β 可以理解为伪计数α 相当于先验里假想的成功次数加 1β 相当于假想的失败次数加 1。这个解释特别实用调参时你可以直接说我预设了 10 次成功 10 次失败的先验对应 α11, β11或者按另一种约定 α10, β10取决于公式里是否减 1用的时候要看清定义。5.2 共轭性是怎么算出来的共轭的意思是先验和后验属于同一个分布族。贝塔分布是二项似然的共轭先验验证过程其实就是把式子乘起来看形状后验 ∝ 似然 * 先验 ∝ [θ^k * (1-θ)^(n-k)] * [θ^(α-1) * (1-θ)^(β-1)] θ^(αk-1) * (1-θ)^(βn-k-1)看最后这个式子它的形状和贝塔分布完全一样只是参数变成了 αk 和 βn-k。所以后验就是Beta(αk, βn-k)。整个过程没有复杂的积分就是指数相加。这个指数相加的推导我建议你亲手写一遍比看十遍结论都管用。写的过程中你会真正体会到为什么共轭性这么方便后验参数 先验参数 数据计数更新规则简单到可以口算。这也是贝塔-二项模型在工程上受欢迎的原因——在线更新时不需要重新做数值积分改两个数就行。5.3 用贝塔先验解决小样本极端估计回到第 2 节留下的问题抛 2 次都是正面MLE 给 θ1。如果加一个 Beta(2,2) 的先验相当于预设 1 次成功 1 次失败后验是 Beta(22, 20) Beta(4,2)后验均值是 4/(42) ≈ 0.667。这个估计比 1 合理得多体现了先验的平滑作用。实际调参时α 和 β 的大小决定了先验的强度。αβ 越大先验越固执需要更多数据才能撼动它αβ 越小比如都取 1即均匀先验先验越弱后验主要由数据决定。我一般在小样本场景用弱先验αβ1 或 2数据量上来后先验影响自然衰减不用太纠结。注意均匀先验 Beta(1,1) 不等于没有先验。它仍然是一个明确的假设θ 在 [0,1] 上均匀只是相对温和。真正无信息的先验在理论上更微妙工程上一般用弱先验近似即可。6. 狄利克雷分布多项分布的共轭先验狄利克雷是贝塔的多类别推广。贝塔的参数是二维的 (α, β)狄利克雷的参数是 K 维向量 (α₁, ..., α_K)。它定义在单纯形上正好匹配多项分布参数的约束。6.1 从贝塔到狄利克雷的类比把两个分布并排看结构一目了然维度贝塔分布狄利克雷分布参数α, β2 个α₁,...,α_KK 个支撑集[0,1]单纯形 Σθⱼ1共轭对象伯努利/二项多项伪计数解释α 成功、β 失败αⱼ 对应第 j 类狄利克雷的密度函数是Dir(θ|α) [∏ θⱼ^(αⱼ-1)] / B(α)其中 B(α) 是多维贝塔函数起归一化作用。核心部分又是各参数幂次连乘和前面所有分布一个套路。6.2 狄利克雷后验的更新规则多项似然是∏ θⱼ^nⱼ狄利克雷先验是∏ θⱼ^(αⱼ-1)乘起来后验 ∝ ∏ θⱼ^(αⱼ nⱼ - 1)所以后验是Dir(α₁n₁, ..., α_Kn_K)。更新规则和贝塔完全平行先验伪计数 实际计数。这个平行性不是巧合而是指数族分布共轭结构的体现。我在做多类别点击率预估时用过这个更新规则每个类别的先验设一个小的伪计数比如全设 1即均匀先验然后每来一批数据就把对应类别的计数加上去。在线更新时只需要维护一个 K 维计数向量内存开销极小比跑数值优化快得多。这个方案在类别数多、数据流式的场景下特别香。6.3 狄利克雷的两个实战注意点第一个注意点αⱼ 全小于 1 时分布会向单纯形的顶点聚集也就是倾向于让某一类概率接近 1、其余接近 0。这个性质在主题模型如 LDA里被用来鼓励稀疏的主题分布。但如果你不想要这种稀疏性就别把 αⱼ 设得太小否则后验会被推向极端。我一般默认 αⱼ1均匀需要稀疏时才往下调。第二个注意点K 很大时狄利克雷的采样和归一化计算量会上升。虽然更新规则简单但如果你要从后验采样做预测K 上千时要注意数值稳定性。实践中可以用对数空间计算避免下溢或者用专门的库函数而不是手写。7. 五个分布的关系图与选型清单讲了这么多最后把关系理一遍方便你以后遇到问题时快速定位该用哪个。7.1 一张表看清血缘分布描述对象随机变量参数共轭先验伯努利单次二类结果0/1θ贝塔二项n 次二类成功数0..nθ贝塔多项n 次多类计数向量θ 向量狄利克雷贝塔二类参数 θ[0,1]α, β—是别人的先验狄利克雷多类参数向量单纯形α 向量—是别人的先验看这张表要抓住两条线横向是数据分布 → 参数分布的共轭配对伯努利/二项配贝塔多项配狄利克雷纵向是二类 → 多类的推广伯努利→多项贝塔→狄利克雷。两条线交叉五个分布就全串起来了。7.2 选型时的三个自问实际建模时我习惯问自己三个问题来定位分布我的观测是单次还是多次聚合单次二类用伯努利多次聚合的成功数用二项。类别是两类还是多类两类走伯努利/二项线多类走多项线。我要建模的是数据还是参数建模数据用前三个建模参数做贝叶斯推断用后两个。这三个问题基本能覆盖 90% 的选型场景。剩下 10% 是更复杂的层次模型那时候往往是这几个分布组合使用比如多项似然 狄利克雷先验 狄利克雷的超先验但底层逻辑还是这套。7.3 几个容易混淆的边界情况最后列几个我实际遇到过、也见别人踩过的混淆点二项 vs 多项两类时两者数值上可以互相转换把一类当成功但多项的公式在 K2 时多一个归一化细节别混用代码。贝塔 vs 狄利克雷K2 时狄利克雷退化为贝塔参数对应 α₁α, α₂β。写通用代码时可以统一用狄利克雷K2 自然兼容。似然 vs 后验似然是P(数据|参数)后验是P(参数|数据)方向相反。共轭性说的是先验和后验同族不是似然和后验同族这个措辞要精确。我在实际项目里的体会是这五个分布真正难的不是公式而是在具体场景里判断该用哪个、以及先验参数怎么设。公式查手册就有但这个场景的观测独立吗先验强度设多少合适这类判断只能靠多做几个项目、多踩几次坑慢慢积累。建议你拿一个自己熟悉的业务数据比如某功能的点击日志分别用 MLE 和贝塔-二项贝叶斯方法估一遍参数对比两者的差异这个练习比看十篇文章都来得实在。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →