NumPy 二项分布生成与 Seaborn 可视化技巧

二项分布

简介

二项分布是一种离散概率分布,用于描述在固定次数的独立试验中,事件"成功"的次数的概率分布。它通常用于分析诸如抛硬币、做选择题等具有两个结果(成功或失败)的事件。

参数

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

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

p:每次试验中成功事件发生的概率。

k:成功事件发生的次数,范围为 0 到 n。

公式

二项分布的概率质量函数 (PMF) 给出了在 n 次试验中恰好获得 k 次成功的概率,计算公式为:

python 复制代码
P(k) = C(n, k) p^k (1 - p)^(n - k)

其中:

C(n, k) 是组合数,表示从 n 个元素中选取 k 个元素的方案数。
p^k 表示 k 次成功的概率。
(1 - p)^(n - k) 表示 n - k 次失败的概率。

生成二项分布数据

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

n:试验次数。
p:每次试验中成功事件发生的概率。
size:输出数组的形状。

示例:生成 10 次试验中,每次成功概率为 0.5 的事件的成功次数:

python 复制代码
import numpy as np

data = np.random.binomial(n=10, p=0.5, size=10)
print(data)

可视化二项分布

Seaborn 库提供了便捷的函数来可视化分布,包括二项分布。

示例:绘制 100 次试验中,每次成功概率为 0.6 的事件的成功次数分布:

python 复制代码
import seaborn as sns
import numpy as np

data = np.random.binomial(n=100, p=0.6, size=1000)
sns.distplot(data)
plt.show()

正态分布与二项分布的关系

当试验次数 n 很大,成功概率 p 接近 0.5 时,二项分布可以近似为正态分布。其均值 μ 为 np,标准差 σ 为 sqrt(np(1 - p))。

示例:比较二项分布和正态分布的形状:

python 复制代码
import seaborn as sns
import numpy as np

n = 100
p = 0.5

# 生成二项分布数据
data_binomial = np.random.binomial(n=n, p=p, size=1000)

# 生成正态分布数据
mu = n p
sigma = np.sqrt(n p (1 - p))
data_normal = np.random.normal(loc=mu, scale=sigma, size=1000)

sns.distplot(data_binomial, label="Binomial")
sns.distplot(data_normal, label="Normal")
plt.legend()
plt.show()

练习

  1. 在 50 次试验中,每次成功概率为 0.2 的事件,模拟成功次数并绘制分布图。
  2. 比较不同试验次数下二项分布形状的变化。
  3. 利用二项分布来模拟一次 10 道选择题的考试,每题答对的概率为 0.7,并计算平均分和及格率(60 分及格)。

解决方案

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

# 1. 模拟成功次数并绘制分布图
data = np.random.binomial(n=50, p=0.2, size=1000)
sns.distplot(data)
plt.show()

# 2. 比较不同试验次数下二项分布形状的变化
n_values = [10, 50, 100, 500]
for n in n_values:
    data = np.random.binomial(n=n, p=0.5, size=1000)
    sns.distplot(data, label=f"n={n}")
plt.legend()
plt.show()

# 3. 模拟考试成绩并计算平均分和及格率
scores

最后

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

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

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

相关推荐
喵手5 小时前
Python爬虫实战:针对Python官网,精准提取出每一个历史版本的版本号、发布日期以及对应的文档/详情页链接等信息,并最终清洗为标准化的CSV文件!
爬虫·python·爬虫实战·零基础python爬虫教学·python官方数据采集·采集历史版本版本号等信息·导出csv文件
yuanmenghao5 小时前
Linux 性能实战 | 第 10 篇 CPU 缓存与内存访问延迟
linux·服务器·缓存·性能优化·自动驾驶·unix
晴殇i5 小时前
【前端缓存】localStorage 是同步还是异步的?为什么?
前端·面试
EnglishJun5 小时前
Linux系统编程(二)---学习Linux系统函数
linux·运维·学习
宁雨桥5 小时前
Gitee迁移GitHub开源全攻略:一键配置自动同步,仅需维护单一仓库
gitee·开源·github
一个人旅程~5 小时前
我存在吗?你存在吗?
笔记·程序人生·电脑·ai写作
CaracalTiger5 小时前
OpenClaw-VSCode:在 VS Code 中通过 WebSocket 远程管理 OpenClaw 网关的完整方案
运维·ide·人工智能·vscode·websocket·开源·编辑器
databook5 小时前
像搭积木一样思考:数据科学中的“自下而上”之道
python·数据挖掘·数据分析
luoluoal5 小时前
基于python的医疗问句中的实体识别算法的研究(源码+文档)
python·mysql·django·毕业设计·源码
VekiSon5 小时前
Linux内核驱动——设备树原理与应用
linux·c语言·arm开发·嵌入式硬件