You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无正态分布假设下如何从给定序列模拟新值?

问题描述

我有如下序列:

series=[0.6, 4.1, 0.6, 6.7, 9.2, 7.6, 5.5, 0.9, 3.8, 8.4]

该序列的mean为4.74,np.std为3.101。

我原本想基于此序列生成1000个观测值,用了以下方法:

>>> series_1000=np.random.normal(4.74, 3.101, size=(1000))
>>> series_1000
>>> array([ 3.43395217,  6.60462489,  5.27316166,  4.20429521,  4.76772334,
        8.04441319, -0.6967243 ,  0.53378519,  2.1736758 ,  9.96333279....

但这个方法基于序列服从正态分布的假设,而我需要一种无需对原序列做任何分布假设的模拟新值的方法。

无分布假设的模拟方法

1. 自助法(Bootstrap)重采样

直接从原序列中有放回地随机抽取样本,完全保留原数据的分布特征,不需要任何分布假设。

代码示例:

import numpy as np

series = np.array([0.6, 4.1, 0.6, 6.7, 9.2, 7.6, 5.5, 0.9, 3.8, 8.4])
# 有放回抽取1000个样本
series_1000 = np.random.choice(series, size=1000, replace=True)
  • 优点:简单直接,完全复刻原数据的离散分布
  • 缺点:生成的新值只能是原序列中已有的数值

2. 核密度估计(KDE)采样

通过核密度估计拟合原序列的概率密度函数,再从这个拟合出的分布中采样,可以生成原序列范围外的新值,同时保留原数据的分布形态。

代码示例:

import numpy as np
from scipy.stats import gaussian_kde

series = np.array([0.6, 4.1, 0.6, 6.7, 9.2, 7.6, 5.5, 0.9, 3.8, 8.4])
# 拟合核密度模型
kde = gaussian_kde(series)
# 生成1000个样本
series_1000 = kde.resample(1000).flatten()
  • 优点:可以生成连续的新值,更贴近真实的潜在分布
  • 缺点:需选择合适的核函数(默认高斯核适配多数场景),结果受原样本量影响较大

内容的提问来源于stack exchange,提问作者Khaled DELLAL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:05:23