当前位置: 首页 > news >正文

Beta分布 Python 3.12 实战:5种参数组合可视化与期望/方差计算

Beta分布Python 3.12实战:5种参数组合可视化与期望/方差计算

Beta分布是概率论中一种定义在(0,1)区间的连续概率分布,在贝叶斯统计、机器学习等领域有广泛应用。本文将使用Python 3.12结合SciPy和Matplotlib库,通过5种典型参数组合的可视化分析,深入理解Beta分布的特性。

1. 环境准备与基础概念

在开始之前,我们需要确保Python环境已安装必要的科学计算库。Beta分布由两个形状参数α和β决定,其概率密度函数(PDF)为:

from scipy.stats import beta import matplotlib.pyplot as plt import numpy as np # 设置绘图样式 plt.style.use('seaborn') plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文显示问题 plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题

Beta分布的数学定义如下:

$$ f(x; \alpha, \beta) = \frac{x^{\alpha-1}(1-x)^{\beta-1}}{B(\alpha, \beta)} $$

其中$B(\alpha, \beta)$是Beta函数,与Gamma函数的关系为:

$$ B(\alpha, \beta) = \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha+\beta)} $$

Beta分布的关键统计量:

统计量计算公式
期望$\frac{\alpha}{\alpha+\beta}$
方差$\frac{\alpha\beta}{(\alpha+\beta)^2(\alpha+\beta+1)}$
众数$\frac{\alpha-1}{\alpha+\beta-2}$ (当α,β>1时)

2. 5种典型参数组合的可视化分析

我们选择以下5组具有代表性的(α,β)参数组合进行对比分析:

  1. (2,5): 左偏分布
  2. (5,2): 右偏分布
  3. (1,1): 均匀分布
  4. (0.5,0.5): U型分布
  5. (2,2): 对称钟型分布
# 定义参数组合 params = [(2,5), (5,2), (1,1), (0.5,0.5), (2,2)] colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd'] # 创建画布 plt.figure(figsize=(12, 8)) x = np.linspace(0, 1, 1000) # 绘制PDF曲线 for (a, b), color in zip(params, colors): y = beta.pdf(x, a, b) plt.plot(x, y, label=f'α={a}, β={b}', color=color, linewidth=2.5) plt.title('Beta分布概率密度函数(PDF)对比', fontsize=16) plt.xlabel('x', fontsize=14) plt.ylabel('概率密度', fontsize=14) plt.legend(fontsize=12) plt.grid(True, alpha=0.3) plt.show()

每种参数组合呈现不同的分布形态:

  • (2,5)组合:峰值偏左,表示随机变量倾向于取较小值
  • (5,2)组合:峰值偏右,与(2,5)呈镜像关系
  • (1,1)组合:退化为均匀分布,所有值概率相等
  • (0.5,0.5)组合:U型分布,两端概率高而中间低
  • (2,2)组合:对称钟型分布,中心在0.5处

3. 累积分布函数(CDF)与分位数

累积分布函数反映了概率的累加过程,对于理解Beta分布的性质非常重要。

plt.figure(figsize=(12, 8)) # 绘制CDF曲线 for (a, b), color in zip(params, colors): y = beta.cdf(x, a, b) plt.plot(x, y, label=f'α={a}, β={b}', color=color, linewidth=2.5) plt.title('Beta分布累积分布函数(CDF)对比', fontsize=16) plt.xlabel('x', fontsize=14) plt.ylabel('累积概率', fontsize=14) plt.legend(fontsize=12) plt.grid(True, alpha=0.3) plt.show()

关键观察点:

  1. 所有CDF曲线从0开始,在1处达到1
  2. (2,5)的CDF上升最快,表明大部分概率质量集中在左侧
  3. (0.5,0.5)的CDF呈S型,中部变化缓慢而两端变化快

计算各分布的中位数和95%置信区间:

# 计算统计量 stats = [] for a, b in params: median = beta.ppf(0.5, a, b) lower = beta.ppf(0.025, a, b) upper = beta.ppf(0.975, a, b) stats.append([f'α={a},β={b}', median, lower, upper]) # 显示结果表格 import pandas as pd df = pd.DataFrame(stats, columns=['参数', '中位数', '2.5%分位数', '97.5%分位数']) print(df.to_markdown(index=False))

4. 期望、方差与众数计算

实现一个函数计算Beta分布的关键统计量:

def beta_stats(a, b): """计算Beta分布的期望、方差和众数""" mean = a / (a + b) var = (a * b) / ((a + b)**2 * (a + b + 1)) if a > 1 and b > 1: mode = (a - 1) / (a + b - 2) else: mode = None # 众数不存在的情况 return mean, var, mode # 计算各参数组合的统计量 stats = [] for a, b in params: mean, var, mode = beta_stats(a, b) stats.append([f'α={a},β={b}', mean, var, mode]) # 创建统计量表格 stats_df = pd.DataFrame(stats, columns=['参数', '期望', '方差', '众数']) print(stats_df.to_markdown(index=False))

统计量对比分析:

  1. 期望值反映了分布的中心位置
  2. 方差衡量了分布的离散程度
  3. 当α,β>1时,众数存在且与峰值位置对应
  4. (1,1)的方差最大,(5,5)的方差最小

5. 实际应用案例

Beta分布在A/B测试中的应用:假设我们进行了一个网页转化率测试,A版本获得了80次转化,200次未转化;B版本获得了120次转化,300次未转化。

# A/B测试数据 data_A = (80, 200) data_B = (120, 300) # 计算后验分布 alpha_A, beta_A = 1 + data_A[0], 1 + data_A[1] # 使用无信息先验Beta(1,1) alpha_B, beta_B = 1 + data_B[0], 1 + data_B[1] # 绘制后验分布 x = np.linspace(0, 1, 1000) plt.figure(figsize=(12, 6)) plt.plot(x, beta.pdf(x, alpha_A, beta_A), label='版本A后验', color='blue') plt.plot(x, beta.pdf(x, alpha_B, beta_B), label='版本B后验', color='orange') # 添加统计量标记 mean_A = alpha_A / (alpha_A + beta_A) mean_B = alpha_B / (alpha_B + beta_B) plt.axvline(mean_A, color='blue', linestyle='--', alpha=0.6) plt.axvline(mean_B, color='orange', linestyle='--', alpha=0.6) plt.title('A/B测试转化率后验分布', fontsize=16) plt.xlabel('转化率', fontsize=14) plt.ylabel('概率密度', fontsize=14) plt.legend() plt.grid(True, alpha=0.3) plt.show() # 计算B优于A的概率 samples = 100000 samples_A = beta.rvs(alpha_A, beta_A, size=samples) samples_B = beta.rvs(alpha_B, beta_B, size=samples) prob_B_better = np.mean(samples_B > samples_A) print(f"版本B优于版本A的概率: {prob_B_better:.2%}")

在这个案例中,我们使用Beta分布作为二项分布的共轭先验,通过后验分布可以直观比较两个版本的转化率差异。

http://www.jsqmd.com/news/1164374/

相关文章:

  • 多元微分不是多变量求导叠加,是三轴正交三维螺旋多维度微观倾斜刻度-《全域数学 vs 传统数学:人类文明进阶 200 讲》第 69 讲 高等进阶篇开篇第一课
  • S7-1200 V4.5 与 MCGS Pro 3.2 以太网通讯:5步完成数据块映射与变量绑定
  • MATLAB R2024a 极坐标绘图:3步精准控制扇形区域与刻度显示(附代码)
  • Linux LVM 存储管理:pvchange 命令详解,物理卷属性管理必备
  • AI客户管理系统源码docker构建带部署教程
  • 全球10亿OPC服务平台,花落谁家?——从1600万到10亿:谁将成为“超级个体”的“数字家园”?
  • HOT100之二叉树翻转二叉树
  • 微信同声传译插件 v0.3.4 实战:3步集成语音转文字,规避2个常见配置错误
  • Unity初学者入门指南:从零到一构建可交互3D应用
  • OneNET API 安全鉴权 2022-05-01 版本:3种生成方法对比与微信小程序集成实战
  • STM32上拉下拉电阻配置与信号完整性设计
  • 如何高效使用BiliDownloader:新手快速上手指南
  • TDA7468与PIC18F26K40音频处理系统设计与实现
  • 嵌入式机器学习 - 学习笔记1.2.1 - 嵌入式设备上的机器学习
  • 2026年珠海电脑维修避坑指南:从黑屏蓝屏到数据恢复5家靠谱推荐 - 本地品牌推荐
  • 豆包视频去水印:HLS分片解密与本地FFmpeg无损处理方案
  • RIPEMD-160 哈希算法:从 MD4 到比特币地址的 160 位安全演进
  • Suno AI音乐创作指南:从国歌改编到原创爱国旋律实战
  • 电脑主机能正常启动,但显示器黑屏显示无信号的解决方法
  • 工业负载控制:TPD2017FN MOSFET与PIC18F47Q10方案解析
  • 从OpenAI实习生模式看AI工程化:ChatGPT团队架构与开发实践
  • DID 与 DDD 模型对比:基于 SO2 排放政策数据的 3 项估计结果差异分析
  • 协议之DASH介绍
  • 二阶线性递推数列通项:Python 3.12 实现特征根法,3步求解与可视化
  • 最新AI量化开发,学习表达开发验证要分阶段
  • 2026年7月台州靠谱GEO/SEO优化公司实测推荐榜单 - 品牌测评网
  • 智能家居Wi-Fi连接:2.4GHz与5GHz频段5大关键差异与设备分配策略
  • 将 PyTorch 训练出的 PySlowFast(.pyth)模型转换为 ONNX 格式
  • ROS 2 Humble vs Noetic:树莓派4B性能实测与5个关键选型建议
  • 系统规划与管理师-数据标准化与数据管理(占 6-8 分)