news 2026/10/31 3:33:29

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从伯努利到狄利克雷:五大概率分布与共轭先验的建模逻辑

概率论里有一类分布,初学者学完一遍觉得都懂了,过两周再被问"二项分布和伯努利分布到底差在哪""贝塔分布为什么老跟二项分布一起出现""狄利克雷分布凭什么能当多项分布的共轭先验",往往就卡壳了。我自己当年也是这么过来的——公式背得滚瓜烂熟,一到实际建模就分不清该用哪个。这篇东西就是把这五个分布串成一条线讲清楚:从最基础的伯努利,到试验次数推广后的二项,再到多类别推广后的多项,然后转到它们各自的"参数分布"——贝塔和狄利克雷。核心线索只有一条:似然与概率的区别。这条线捋顺了,这五个分布就不再是五个孤立公式,而是一套层层递进的建模工具。

这篇适合谁看?如果你正在学概率统计、准备做贝叶斯相关的项目、或者写代码时被scipy.stats里一堆分布名字搞晕,那这篇基本能对上你的需求。我会尽量用生活化的例子把每个分布讲透,同时把似然函数怎么写、共轭先验为什么成立这些容易含糊的地方掰开揉碎。全程不堆砌推导,但关键的计算逻辑会给到位,方便你直接对照复现。

1. 先把"似然"和"概率"这两个词掰开

很多人学这五个分布卡住的第一个坎,不是公式,而是语言。教材里一会儿说"概率",一会儿说"似然",同一个式子P(x|θ),有时候叫概率,有时候叫似然,初学者很容易以为这是两个不同的东西。其实式子长得一样,区别在于你把哪个量当成变量。

1.1 同一个式子,两种看法

拿抛硬币举例。设正面朝上的概率是 θ,抛一次结果是 x(1 表示正面,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)

这个写法很巧妙,它把两种情况合并成一个式子:x=1 时只剩 θ,x=0 时只剩 (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(2+2, 2+0) = Beta(4,2),后验均值是 4/(4+2) ≈ 0.667。这个估计比 1 合理得多,体现了先验的"平滑"作用。

实际调参时,α 和 β 的大小决定了先验的强度。α+β 越大,先验越"固执",需要更多数据才能撼动它;α+β 越小(比如都取 1,即均匀先验),先验越"弱",后验主要由数据决定。我一般在小样本场景用弱先验(α=β=1 或 2),数据量上来后先验影响自然衰减,不用太纠结。

注意:均匀先验 Beta(1,1) 不等于"没有先验"。它仍然是一个明确的假设(θ 在 [0,1] 上均匀),只是相对温和。真正"无信息"的先验在理论上更微妙,工程上一般用弱先验近似即可。

6. 狄利克雷分布:多项分布的共轭先验

狄利克雷是贝塔的多类别推广。贝塔的参数是二维的 (α, β),狄利克雷的参数是 K 维向量 (α₁, ..., α_K)。它定义在单纯形上,正好匹配多项分布参数的约束。

6.1 从贝塔到狄利克雷的类比

把两个分布并排看,结构一目了然:

维度贝塔分布狄利克雷分布
参数α, β(2 个)α₁,...,α_K(K 个)
支撑集[0,1]单纯形 Σθⱼ=1
共轭对象伯努利/二项多项
伪计数解释α 成功、β 失败αⱼ 对应第 j 类

狄利克雷的密度函数是:

Dir(θ|α) = [∏ θⱼ^(αⱼ-1)] / B(α)

其中 B(α) 是多维贝塔函数,起归一化作用。核心部分又是"各参数幂次连乘",和前面所有分布一个套路。

6.2 狄利克雷后验的更新规则

多项似然是∏ θⱼ^nⱼ,狄利克雷先验是∏ θⱼ^(αⱼ-1),乘起来:

后验 ∝ ∏ θⱼ^(αⱼ + nⱼ - 1)

所以后验是Dir(α₁+n₁, ..., α_K+n_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 选型时的三个自问

实际建模时,我习惯问自己三个问题来定位分布:

  1. 我的观测是单次还是多次聚合?单次二类用伯努利,多次聚合的成功数用二项。
  2. 类别是两类还是多类?两类走伯努利/二项线,多类走多项线。
  3. 我要建模的是数据还是参数?建模数据用前三个,建模参数(做贝叶斯推断)用后两个。

这三个问题基本能覆盖 90% 的选型场景。剩下 10% 是更复杂的层次模型,那时候往往是这几个分布组合使用,比如"多项似然 + 狄利克雷先验 + 狄利克雷的超先验",但底层逻辑还是这套。

7.3 几个容易混淆的边界情况

最后列几个我实际遇到过、也见别人踩过的混淆点:

  • 二项 vs 多项:两类时两者数值上可以互相转换(把一类当成功),但多项的公式在 K=2 时多一个归一化细节,别混用代码。
  • 贝塔 vs 狄利克雷:K=2 时狄利克雷退化为贝塔,参数对应 α₁=α, α₂=β。写通用代码时可以统一用狄利克雷,K=2 自然兼容。
  • 似然 vs 后验:似然是P(数据|参数),后验是P(参数|数据),方向相反。共轭性说的是"先验和后验同族",不是"似然和后验同族",这个措辞要精确。

我在实际项目里的体会是:这五个分布真正难的不是公式,而是在具体场景里判断该用哪个、以及先验参数怎么设。公式查手册就有,但"这个场景的观测独立吗""先验强度设多少合适"这类判断,只能靠多做几个项目、多踩几次坑慢慢积累。建议你拿一个自己熟悉的业务数据(比如某功能的点击日志),分别用 MLE 和贝塔-二项贝叶斯方法估一遍参数,对比两者的差异,这个练习比看十篇文章都来得实在。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/31 3:33:08

微电网保护技术:原理、挑战与发展趋势

1. 微电网保护概述:能源转型中的关键技术微电网作为分布式能源系统的核心单元,已经从实验室概念发展为实际工程应用。过去五年间,全球微电网装机容量以年均18.7%的速度增长(根据国际能源署最新数据),这种由…

作者头像 李华
网站建设 2026/10/31 3:31:40

WorkBuddy深度解析:AI桌面工作台从入门到自动化实战

1. 先搞清楚WorkBuddy到底是个什么东西1.1 一句话说透:它不是聊天机器人,是AI桌面工作台很多人第一次听到WorkBuddy,脑子里蹦出来的画面是“又一个套壳的AI对话工具”。我一开始也这么想,直到真正把它装进日常工作流里跑了两周&am…

作者头像 李华
网站建设 2026/10/31 3:31:13

NVIDIA GR00T N1.6:开源视觉-语言-动作模型解析

1. NVIDIA GR00T N1.6技术架构解析NVIDIA GR00T N1.6是英伟达推出的开源视觉-语言-动作(VLA)基础模型,专为人形机器人通用技能设计。作为跨具身智能(cross-embodiment)模型,它能够处理包括语言和图像在内的…

作者头像 李华
网站建设 2026/10/31 3:30:41

STM32物联网赛题代码:矩阵按键、ADC与LoRa通信联调实战

简介:《2024蓝桥杯15届物联网省赛完整代码》面向备战蓝桥杯物联网省赛的选手及嵌入式初学者,围绕矩阵按键扫描、LoRa A/B双端通信与电位器取值等赛题考点,提供可编译的完整工程与源码参考。压缩包共371个文件,约11.27MB&#xff0…

作者头像 李华
网站建设 2026/10/31 3:30:39

兴趣社区架构设计与性能优化实战

1. 项目概述:吧里BaLi社区定位解析吧里BaLi社区是一个典型的兴趣导向型网络社群平台,其命名采用谐音双关手法——"吧里"既暗示论坛版块(贴吧)的互动场景,又借用了度假胜地巴厘岛的轻松意象。这种命名策略常见…

作者头像 李华