数据分析-基础-伯努利分布
概念
统计学中的分布是描述随机变量规律的核心工具,根据随机变量类型的不同,主要分为离散型概率分布和连续型概率分布两大类。伯努利分布是最基础但也最重要的概率分布之一,属于离散型概率分布,它描述了那些只有两种可能结果的随机现象。
一个经典的案例就是抛硬币,在抛一次硬币的试验中,若规定正面朝上为“成功”,那么 p=0.5。其方差 p(1-p)在 p=0.5时达到最大,为 0.25,这意味着当成功与失败的概率各占一半时,结果的不确定性最高;当 p接近 0 或 1 时,方差会变小,因为结果几乎可以确定。
|
特征 |
描述 |
|---|---|
|
别名 | 两点分布、0-1分布 |
|
核心特征 | 单次随机试验,只有两种互斥结果 |
|
随机变量取值 | 通常用 1表示“成功”,0表示“失败” |
|
关键参数 | p:表示一次试验中“成功”的概率 (0 ≤ p ≤ 1) |
|
概率质量函数(PMF) | P(X=1) = p;P(X=0) = 1 - p |
|
数学期望(E[X]) | p |
|
方差(Var[X]) |
|
概率质量函数
概率质量函数(PMF)是专门为离散随机变量定制的“概率清单”(例如,还是投硬币,1-6出现的概率分别是 六分之一,依次列出来),它直接给出每个可能取值对应的概率。理解PMF是掌握离散概率分布(如伯努利分布、二项分布、泊松分布)的关键一步。
与累积分布函数(CDF)的关系:CDF描述的是随机变量取值小于等于某个数的概率,记作 F(x)。对于离散随机变量,CDF是PMF的累加结果。例如,掷骰子点数小于等于3的概率 F(3),就是点数1、2、3的概率之和(即 PMF(1) + PMF(2) + PMF(3))。由于PMF是不连续的,所以离散随机变量的CDF是一个分段函数,图形呈阶梯状。
与概率密度函数(PDF)的根本区别:有时候与PDF的概念容易混淆。理解的关键在于PMF的函数值直接是概率,而PDF的函数值不是概率。对于连续变量,讨论在某一点(例如身高正好是170cm)的概率是没有意义的,概率密度只对一段区间有意义,需要通过计算PDF在该区间下的面积来获得。
与其他分布的关系
伯努利分布是许多复杂分布的基石。二项分布 可以理解为将伯努利试验独立重复进行 n次后,总成功次数的分布。当 n=1时,二项分布就是伯努利分布。
应用场景
伯努利分布的应用极其广泛,几乎所有涉及二分类问题的场景都能看到它的身影。
质量控制
在生产线上,对单个产品进行检测,其结果可以建模为伯努利分布——产品要么合格(成功),要么不合格(失败)。
用户行为分析
在互联网领域,用户的很多行为都可以用伯努利试验来建模,一位用户是否点击了某个广告、是否购买了一件商品等。
机器学习基石
伯努利分布是逻辑回归、神经网络等模型中输出层设计的理论基础。这些模型最终预测的正是某个类别(如“是垃圾邮件”)的概率 p。
使用注意事项
在使用伯努利分布时,最关键的是要确保试验满足其基本假设:
1.每次试验必须且只能有两种互斥的结果 -- 结果唯一性
2.“成功”的概率 p在每次试验中应保持不变 -- 概率稳定性
3.各次试验之间相互独立。如果事件发生多次,独立性是使用二项分布的前提 -- 独立性
Python计算
scipy.stats模块中的 bernoulli类是处理伯努利分布的核心工具。
|
函数名 |
用途说明 |
示例代码 (假设 p=0.3) |
示例结果 / 含义 |
|---|---|---|---|
|
|
计算概率质量函数,即事件恰好发生 k 次的概率。 |
|
|
|
|
生成服从伯努利分布的随机样本。 |
|
如 |
|
|
计算累积分布函数,即事件发生次数小于等于 k 的概率。 |
|
|
假设事件发生的概率 p=0.7,这个伯努利分布的理论概率
from scipy import stats
# 设置成功概率
p = 0.7
# 发生的概率 (X=1)
prob_success = stats.bernoulli.pmf(1, p)
print(f"发生的概率: {prob_success:.2f}")
# 未发生的概率 (X=0)
prob_failure = stats.bernoulli.pmf(0, p)
print(f"未发生的概率: {prob_failure:.2f}")
随机模拟:当理论概率难以直接计算或需要模拟真实过程时,可以采用样本抽样的方式来观察大量试验后的统计规律。
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
# 设置参数
p = 0.3 # 单次成功率
sample_size = 10000 # 模拟试验次数
# 生成随机样本
np.random.seed(63) # 设置随机种子以保证结果可重现
samples = stats.bernoulli.rvs(p, size=sample_size)
# 统计成功次数并计算频率
success_count = np.sum(samples)
simulated_prob = success_count / sample_size
print(f"模拟试验次数: {sample_size}")
print(f"成功次数: {success_count}")
print(f"成功的模拟频率: {simulated_prob:.4f}")
print(f"理论概率 p: {p}")
输出结果:
模拟试验次数: 10000
成功次数: 3024
成功的模拟频率: 0.3024
理论概率 p: 0.3
当模拟次数足够多时,频率会稳定在理论概率附近,也是大数定律的直观表现。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)