【概率分布】多项分布详解

概率分布之多项分布详解

多项分布是概率论与统计学中核心的离散概率分布之一,是二项分布的自然推广,专门用于描述多结果、固定次数、独立重复试验中各结果出现频率的概率规律,本科阶段的概率论、数理统计课程,以及研究生阶段的机器学习、数据分析相关研究中都会频繁用到这一分布。

一、多项分布的通俗理解

简单来说,当一次试验有3个及以上可能的结果,且每个结果的发生概率固定、试验之间相互独立、总试验次数确定时,想要知道各结果分别出现多少次的概率,就可以用多项分布来描述。

经典例子

  1. 掷骰子实验:骰子有6个面(6个结果),每个面出现的概率都是1/6,投掷10次,想知道1-6每个数字分别出现多少次,这是典型的多项分布应用场景。
  2. 抽球实验:袋中有红、蓝、绿三种球,抽到红球概率0.5、蓝球0.3、绿球0.2,重复抽10次且每次抽完放回,想知道红、蓝、绿球分别抽到多少次,也符合多项分布的条件。

对比二项分布(仅2个结果,如掷硬币:正面/反面)就能快速理解:多项分布是二项分布在「结果数量」上的推广,二项分布能解决的是"两种结果出现次数的概率",多项分布则能解决"多种结果同时出现对应次数的概率"。

二、多项分布的核心特点

多项分布的适用场景必须满足以下5个核心条件,缺一不可,也是判断一个试验是否能用多项分布分析的关键:

  1. 多结果 :单次试验有k个(k≥3) 互斥的可能结果;
  2. 独立试验:每次试验的结果互不影响,前一次试验的结果不会改变后一次各结果的发生概率;
  3. 固定次数:总试验次数n是预先确定的常数;
  4. 概率固定且和为1 :每个结果在单次试验中的发生概率pip_ipi固定不变,且所有结果的概率之和为1,即p1+p2+...+pk=1p_1+p_2+...+p_k=1p1+p2+...+pk=1;
  5. 计数型 :研究的核心是"各结果在n次试验中出现的次数",而非其他指标。

三、多项分布的数学定义与概率计算

1. 符号与分布表示

假设进行n次独立重复试验,单次试验有k个结果,各结果的发生概率为p1,p2,...,pkp_1,p_2,...,p_kp1,p2,...,pk(满足∑i=1kpi=1\sum_{i=1}^k p_i=1∑i=1kpi=1)。

用X1,X2,...,XkX_1,X_2,...,X_kX1,X2,...,Xk分别表示k个结果在n次试验中出现的次数(满足∑i=1kXi=n\sum_{i=1}^k X_i=n∑i=1kXi=n,且Xi≥0X_i≥0Xi≥0为整数),则称随机向量(X1,X2,...,Xk)(X_1,X_2,...,X_k)(X1,X2,...,Xk)服从参数为n和p=(p1,p2,...,pk)p=(p_1,p_2,...,p_k)p=(p1,p2,...,pk)的多项分布 ,记为:
(X1,X2,...,Xk)∼Multinomial(n,p=(p1,p2,...,pk))(X_1,X_2,...,X_k) \sim Multinomial(n, p=(p_1,p_2,...,p_k))(X1,X2,...,Xk)∼Multinomial(n,p=(p1,p2,...,pk))

示例表示 :上述抽球实验(n=10,红0.5、蓝0.3、绿0.2),记XRX_RXR为红球出现次数、XBX_BXB为蓝球次数、XGX_GXG为绿球次数,则:
(XR,XB,XG)∼Multinomial(n=10,p=[0.5,0.3,0.2])(X_R,X_B,X_G) \sim Multinomial(n=10, p=[0.5,0.3,0.2])(XR,XB,XG)∼Multinomial(n=10,p=[0.5,0.3,0.2])

2. 概率质量函数(PMF)

多项分布的概率质量函数用于计算"n次试验中,第1个结果出现x1x_1x1次、第2个结果出现x2x_2x2次、...、第k个结果出现xkx_kxk次"的具体概率,公式为:
P(X1=x1,X2=x2,...,Xk=xk)=(nx1,x2,...,xk)⋅p1x1⋅p2x2⋅...⋅pkxkP\left(X_1=x_1, X_2=x_2, ..., X_k=x_k\right)=\binom{n}{x_1, x_2, ..., x_k} \cdot p_1^{x_1} \cdot p_2^{x_2} \cdot ... \cdot p_k^{x_k}P(X1=x1,X2=x2,...,Xk=xk)=(x1,x2,...,xkn)⋅p1x1⋅p2x2⋅...⋅pkxk

其中包含两个核心部分:

(1)多项式系数

(nx1,x2,...,xk)\binom{n}{x_1, x_2, ..., x_k}(x1,x2,...,xkn) 表示"n次试验中,分配各结果出现次数的方式数",计算公式为:
(nx1,x2,...,xk)=n!x1!⋅x2!⋅...⋅xk!\binom{n}{x_1, x_2, ..., x_k} = \frac{n!}{x_1! \cdot x_2! \cdot ... \cdot x_k!}(x1,x2,...,xkn)=x1!⋅x2!⋅...⋅xk!n!

(!为阶乘,如5!=5×4×3×2×1,0!=1)

(2)概率乘积项

p1x1⋅p2x2⋅...⋅pkxkp_1^{x_1} \cdot p_2^{x_2} \cdot ... \cdot p_k^{x_k}p1x1⋅p2x2⋅...⋅pkxk 表示"第1个结果出现x1x_1x1次、第2个结果出现x2x_2x2次......"的概率乘积,是单次试验概率的多次幂。

3. 实际计算示例

仍以抽球实验为例,计算10次试验中红球出现5次、蓝球3次、绿球2次 的概率:

已知n=10,xR=5,xB=3,xG=2x_R=5, x_B=3, x_G=2xR=5,xB=3,xG=2,pR=0.5,pB=0.3,pG=0.2p_R=0.5, p_B=0.3, p_G=0.2pR=0.5,pB=0.3,pG=0.2,代入公式:
P(XR=5,XB=3,XG=2)=10!5!⋅3!⋅2!⋅0.55⋅0.33⋅0.22P\left(X_R=5, X_B=3, X_G=2\right)=\frac{10!}{5! \cdot 3! \cdot 2!} \cdot 0.5^5 \cdot 0.3^3 \cdot 0.2^2P(XR=5,XB=3,XG=2)=5!⋅3!⋅2!10!⋅0.55⋅0.33⋅0.22

分步计算:

  • 多项式系数:10!5!⋅3!⋅2!=3628800120×6×2=2520\frac{10!}{5! \cdot 3! \cdot 2!}=\frac{3628800}{120 \times 6 \times 2}=25205!⋅3!⋅2!10!=120×6×23628800=2520
  • 概率乘积:0.55×0.33×0.22=0.03125×0.027×0.04=0.000033750.5^5 \times 0.3^3 \times 0.2^2=0.03125 \times 0.027 \times 0.04=0.000033750.55×0.33×0.22=0.03125×0.027×0.04=0.00003375
  • 最终概率:2520×0.00003375=0.085052520 \times 0.00003375=0.085052520×0.00003375=0.08505

即10次抽球中,红球5次、蓝球3次、绿球2次的概率为8.505%。

四、多项分布的公式推导逻辑

多项分布的公式并非凭空推导,核心基于二项分布的推广组合计数原理,理解推导逻辑能更灵活地应用该分布:

  1. 从二项分布推广:当k=2(仅两个结果)时,多项分布会直接退化为二项分布。例如将"蓝球+绿球"视为一个结果,抽球实验就变成"红球(0.5)、非红球(0.5)"的二项分布,符合二项分布的概率计算规则;
  2. 组合计数:多项式系数解决了"n次试验中,如何分配k个结果的出现次数"的问题,本质是对n次试验进行分组,每组对应一个结果的出现次数;
  3. 概率乘积:由于试验相互独立,多个结果分别出现对应次数的概率,等于各结果单次概率的多次幂的乘积。

简单来说,多项分布的概率公式 = 分配次数的方式数 × 各结果出现对应次数的概率乘积

五、Python实现多项分布的模拟与可视化

本科/研究生在做实验、数据分析时,常需要用代码模拟多项分布并可视化结果,以下基于Python的numpy(生成多项分布数据)和matplotlib(可视化)实现,代码注释清晰,可直接运行,以**红、蓝、绿球抽球实验(n=1000,p=[0.5,0.3,0.2])**为例:

完整代码

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

# 设置多项分布参数
n = 1000  # 总试验次数
p = [0.5, 0.3, 0.2]  # 各结果的概率(红、蓝、绿)
k = len(p)  # 结果的种类数

# 生成多项分布随机数据:size=1表示生成1组数据,[0]取结果数组
data = np.random.multinomial(n, p, size=1)[0]

# 可视化结果:条形图展示各结果的出现频率
labels = ['Red', 'Blue', 'Green']  # 坐标轴标签
plt.bar(labels, data, color=['red', 'blue', 'green'])  # 绘制条形图
plt.title(f'Multinomial Distribution (n={n}, p={p})')  # 图表标题
plt.xlabel('Outcomes')  # x轴标签:试验结果
plt.ylabel('Frequency')  # y轴标签:出现次数
plt.show()  # 显示图表

# 输出各结果的具体出现次数
print(f'实验中红球出现次数:{data[0]}')
print(f'实验中蓝球出现次数:{data[1]}')
print(f'实验中绿球出现次数:{data[2]}')

运行结果说明

  1. 数值输出:运行后会打印红、蓝、绿球的具体出现次数,示例结果为:红球490次、蓝球313次、绿球197次(因随机生成,结果会在理论值附近波动,符合大数定律);
  2. 可视化输出:会生成一个条形图,横轴为试验结果(Red/Blue/Green),纵轴为出现次数,能直观看到各结果的频率分布,且频率会接近预设的概率(0.5、0.3、0.2)。

代码拓展

若需要生成多组多项分布数据(如模拟10次1000抽球实验),只需将size=1改为size=10即可,后续可对多组数据做统计分析(如求均值、方差)。

六、总结

  1. 多项分布是二项分布的推广 ,适用于k≥3个结果的独立重复试验,核心研究"各结果在固定次数试验中出现次数的概率";
  2. 适用条件为:多结果、独立试验、固定次数、概率固定且和为1、计数型研究目标;
  3. 概率计算的核心是多项式系数概率乘积项的乘积,即多项分布的概率质量函数;
  4. 借助Python的numpymatplotlib可快速模拟多项分布并可视化,是本科/研究生进行数据模拟、实验分析的常用方法。

多项分布在实际应用中十分广泛,比如机器学习中的分类问题概率建模 、统计学中的列联表分析 、经济学中的市场份额预测等,掌握该分布的定义、计算和代码实现,是后续进阶学习的重要基础。

相关推荐
_日拱一卒2 小时前
LeetCode(力扣):只出现一次的数字
java·数据结构·算法
bulingg2 小时前
LR逻辑回归详解
算法·机器学习·逻辑回归
七七肆十九2 小时前
PTA 习题4-7 最大公约数和最小公倍数
数据结构·算法
NGC_66112 小时前
八大排序对比及实现
数据结构·算法·排序算法
进击的小头2 小时前
第7篇:动态规划的数值求解算法
python·算法·动态规划
FMRbpm2 小时前
斑马日记2026.3.13
数据结构·算法
NGC_66113 小时前
ArrayList扩容机制
java·前端·算法
xsyaaaan7 小时前
leetcode-hot100-双指针:283移动零-11盛最多水的容器-15三数之和-42接雨水
算法·leetcode
炽烈小老头10 小时前
【每天学习一点算法 2026/03/08】相交链表
学习·算法·链表