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

scipy的统计学库(4):用rv_histogram类实现随机抽样

一、说明

除了rv_continuous,还有rv_discrete之外,还有一个概率密度的给出方法,就是rv_histogram。直方图在数值计算中非常之普遍,因此,用直方图表述分布也最常见,本文将介绍rv_histogram。

二、rv_histogram类基本概念

2.1 rv_histogram和

rv_histogram的基本意义是:给定一个直方图给出的分布,这对于从分箱生成模板分布非常有用,数据样本。

class rv_histogram(histogram, *args, density=None, **kwargs)

作为类的子类,继承自它 泛型方法的集合,并根据提供的 binned 的属性实现它们 数据样本。

2.2 构造参数

参数:

  • array_like的直方图:元组
    包含两个 array_like 对象的元组。第一个包含 n 个 bin 的内容,第二个包含 (n+1) 个 bin 的边界。特别地,接受 numpy.histogram 的返回值。

  • density:bool,可选
    如果为 False,则假设直方图与每个箱体的计数成正比;否则,假设直方图与密度成正比。对于恒定箱体宽度,两者等效,但当箱体宽度变化时,区别就很重要了(参见注释)。如果为 None(默认值),则设置 density=True 以实现向后兼容,但如果箱体宽度可变,则会发出警告。明确设置 density 可消除警告。

2.3 属性

random_state
获取或设置用于生成随机变量的生成器对象。

2.4 方法

call(*args,**kwds)
冻结给定参数的分布。
cdf (x, *args, **kwds)
给定 RV 的累积分布函数。
entropy(*args,**kwds)
RV 的微分熵。
expect([func, args, loc, scale, lb, ub, …])
通过数值积分计算函数相对于分布的期望值。
fit(data,*args,**kwds)
从数据中返回形状(如果适用)、位置和比例参数的估计值。
fit_loc_scale(data,*args)
使用第 1 和第 2 矩从数据中估计位置和比例参数。
freeze(*args,**kwds)
冻结给定参数的分布。
interval(confidence,*args,**kwds)
中位数周围面积相等的置信区间。
isf(q, *args, **kwds)
给定 RV 的 q 处的逆生存函数(的倒数)。
logcdf
(x, *args, **kwds)
给定 RV x 处的累积分布函数对数。
logpdf(x, *args, **kwds)
给定 RV x 处的概率密度函数的对数。
logsf(x, *args, **kwds)
给定 RV 的生存函数的对数。
mean(*args,**kwds)
分布的平均值。
medium(*args,**kwds)
分布的中位数。
monent(order,*args,**kwds)
指定订单分配的非中心矩。
nnlf(θ,x)
负对数似然函数。
pdf(x, *args, **kwds)
给定 RV x 处的概率密度函数。
ppf(q, *args, **kwds)
给定 RV 的 q 处的百分点函数( 的倒数)。
rvs
(*args,**kwds)
给定类型的随机变量。
sf(x, *参数, **kwds)
给定 RV x 处的生存函数 (1 - cdf)。
stats(*args,**kwds)
给定RV的一些统计数据。
std(*args,**kwds)
分布的标准差。
support(*args,**kwargs)
支持分发。
var(*args,**kwds)
分布的方差。

2.5 注意点

当直方图的箱宽不等时,会区分与每个箱的计数成比例的直方图和与箱上概率密度成比例的直方图。如果以默认的 density=False 调用 numpy.histogram,则生成的直方图是每个箱的计数数,因此应将 density=False 传递给 rv_histogram。如果以 density=True 调用 numpy.histogram,则生成的直方图是概率密度,因此应将 density=True 传递给 rv_histogram。为避免出现警告,当输入直方图的箱宽不等时,请务必显式传递 density 参数。
除了 loc 和 scale 之外,没有其他形状参数。概率密度函数 (pdf) 定义为所提供直方图的逐步函数。累积分布函数 (cdf) 是概率密度函数的线性插值。

三、例子

从 numpy 直方图创建 scipy.stats 分布

  import scipy.statsimport numpy as npdata = scipy.stats.norm.rvs(size=100000, loc=0, scale=1.5,
...                             random_state=123)hist = np.histogram(data, bins=100)hist_dist = scipy.stats.rv_histogram(hist, density=False)

行为类似于普通的 scipy rv_continuous分布

hist_dist.pdf(1.0)
0.20538577847618705
hist_dist.cdf(2.0)
0.90818568543056499

PDF 在直方图的最高(最低)bin 上方(下方)为零, 由原始数据集的最大值(最小值)定义

hist_dist.pdf(np.max(data))
0.0
hist_dist.cdf(np.max(data))
1.0
hist_dist.pdf(np.min(data))
7.7591907244498314e-05
hist_dist.cdf(np.min(data))
0.0

PDF 和 CDF 遵循直方图

 import matplotlib.pyplot as pltX = np.linspace(-5.0, 5.0, 100)fig, ax = plt.subplots()ax.set_title("PDF from Template")ax.hist(data, density=True, bins=100)ax.plot(X, hist_dist.pdf(X), label='PDF')ax.plot(X, hist_dist.cdf(X), label='CDF')ax.legend()fig.show()

四、后记

直方图在数值计算中非常之普遍,因此,用直方图表述分布也最常见。本文要点提示,如何将连续数据要“分箱”转化成直方图,而离散数据通过频率转成直方图,转成直方图的数据与我们常见rv_continuous密度函数用法一样,

http://www.dtcms.com/a/495200.html

相关文章:

  • Element Plus el-table 默认勾选行的方法
  • Linux系统函数opendir、closedir、readdir详解及案例(自定义ls工具)
  • 便捷网站建设哪家便宜网站建没有前景
  • 接口测试 | Postman的高级用法的测试使用
  • TR3--Transformer之pytorch复现
  • Traccar本地文件包含漏洞(CVE-2025-61666)
  • 建站网站推荐icp域名备案查询系统
  • 智能美颜引擎:美颜SDK如何实现自适应芯片性能优化
  • Java中的boolean与Boolean
  • Flutter高级进阶教程(视频教程)
  • Rocketmq 分布式事务 两阶段提交
  • 骑行,团骑和独骑冲突吗?
  • 对网站和网页的认识鞍山信息网便民信息
  • 《算法通关指南---C++编程篇(2)》
  • 【论文速递】2025年第29周(Jul-13-19)(Robotics/Embodied AI/LLM)
  • 网站 模板更改网站备案
  • VR反诈一体机-VR预防诈骗模拟系统-VR防诈骗体验馆方案
  • 大型网站seo课程沈阳关键词优化费用
  • Kubernetes PVC 扩容完全指南:静态迁移 vs 动态扩容
  • 【题解】B2613【深基1.习5】打字速度
  • Elastic DevRel 通讯 — 2025 年 10 月
  • Java面试基础题
  • 博客标题:快速解决 VS Code 终端运行 petalinux-config 界面显示错乱问题
  • 强化学习【Monte Carlo Learning][MC Basic 算法]
  • 杭州网站开发制作公司小程序源码出售
  • 从0到1学习Qt -- 创建项目
  • dw做网站基础wap网站开发价格
  • 【实时Linux实战系列】实时应用的多版本共存与无缝升级
  • Linux小课堂: 文件操作核心命令深度解析(cp、mv 与 rm 命令)
  • 【大模型小实验】考一考qwen3-8b对于历史人物的理解