多项分布模拟及 Seaborn 可视化教程

多项分布

简介

多项分布是二项分布的推广,它描述了在 n 次独立试验中,k 种不同事件分别出现次数的离散概率分布。与二项分布只能有两种结果(例如成功/失败)不同,多项分布可以有 k 种(k ≥ 2)及以上的不同结果。

参数

多项分布用三个参数来定义:

n:试验次数,表示重复相同实验的次数。

pvals:一个长度为 k 的列表,其中每个元素表示对应结果出现的概率。pvals 的元素之和必须为 1。

size:输出数组的形状。

公式

多项分布的概率质量函数 (PMF) 给出了在 n 次试验中,k 种结果分别出现 k1、k2、...、kk 次的概率,计算公式为:

python 复制代码
P(k1, k2, ..., kk) = n! / (k1! * k2! * ... * kk!) * (p1 ^ k1) * (p2 ^ k2) * ... * (pk ^ kk)

其中:

P(k1, k2, ..., kk):表示 k 种结果分别出现 k1、k2、...、kk 次的概率。
n!:n 的阶乘,即 n × (n - 1) × (n - 2) × ... × 2 × 1。
k1!k2!、...、kk!:k1、k2、...、kk 的阶乘,分别表示对应结果出现的次数的阶乘。
p1p2、...、pk:对应结果出现的概率,分别为 pvals 列表中的元素。

生成多项分布数据

NumPy 提供了 random.multinomial() 函数来生成服从多项分布的随机数。该函数接受以下参数:

n:试验次数。
pvals:结果的概率列表。
size:输出数组的形状。

示例:生成掷骰子 10 次的结果,其中每个结果出现的概率相等:

python 复制代码
import numpy as np

data = np.random.multinomial(n=10, pvals=[1/6] 6, size=1000)
print(data)

可视化多项分布

由于多项分布可以表示多种结果的出现次数,因此其可视化方式通常取决于结果的个数和想要展示的信息。

条形图:如果结果个数较少,可以使用条形图来直观地显示每个结果出现的次数。

堆积条形图:如果结果个数较多,可以使用堆积条形图来显示不同试验次数下每个结果出现的次数分布。

折线图:如果需要比较不同试验次数下每个结果出现的概率分布,可以使用折线图来绘制每个结果出现的概率随试验次数的变化情况。

练习

  1. 模拟 100 次掷骰子的结果,并绘制每个结果出现的次数分布图。
  2. 比较不同试验次数下掷骰子结果的分布变化。
  3. 模拟一个具有 3 种结果的抽奖活动,每个结果出现的概率分别为 1/3、1/2 和 1/6,并计算每种结果出现 1 次的概率。

解决方案

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

# 1. 模拟掷骰子结果并绘制分布图
data = np.random.multinomial(n=10, pvals=[1/6] 6, size=1000)
result_counts = data.sum(axis=0)  # 计算每个结果出现的总次数
sns.barplot(x=np.arange(len(result_counts)), y=result_counts)
plt.xlabel("Result")
plt.ylabel("Count")
plt.title("Distribution of Dice Rolls (1000 trials)")
plt.show()

# 2. 比较不同试验次数下分布变化
n_values = [10, 50, 100, 500]
for n in n_values:
    data = np.random.multinomial(n=n, pvals=[1/6] 6, size=1000)
    result_counts = data.sum(axis=0)
    sns.barplot(x=np.arange(len))

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

相关推荐
hui函数几秒前
Python系列Bug修复|如何解决 pip install -r requirements.txt 私有索引未设为 trusted-host 导致拒绝 问题
python·bug·pip
子午2 分钟前
【2026原创】动物识别系统~Python+深度学习+人工智能+模型训练+图像识别
人工智能·python·深度学习
o_insist7 分钟前
LangChain1.0 实现 PDF 文档向量检索全流程
人工智能·python·langchain
脑洞AI食验员12 分钟前
智能体来了:用异常与文件处理守住代码底线
人工智能·python
番茄灭世神18 分钟前
Git入门使用学习
git·gitee·软件工程·计算机专业入门
冬奇Lab22 分钟前
【Kotlin系列02】变量与数据类型:从val/var到空安全的第一课
android·kotlin·编程语言
大厂技术总监下海22 分钟前
大数据生态的“主动脉”:RocketMQ 如何无缝桥接 Flink、Spark 与业务系统?
大数据·开源·rocketmq
曲幽25 分钟前
FastAPI登录验证:用OAuth2与JWT构筑你的API安全防线
python·fastapi·web·jwt·token·oauth2
幻云201027 分钟前
Next.js指南:从入门到精通
开发语言·javascript·人工智能·python·架构
2301_7809438428 分钟前
linux 对文件打补丁(Patch)
linux·运维·服务器