利用Python实现Bootstrap采样

本文深入探讨如何使用Python进行Bootstrap抽样,这是一种统计学上的重要方法,用于估计统计量的变异性和不确定性。通过实例代码,我们将理解Bootstrap如何工作并应用到实际数据分析中。
摘要由CSDN通过智能技术生成
"""
1、Bootstrap采样
利用有限的样本经由 有放回的多次重复抽样 ,建立起充足的样本,解决了样本不足的问题。
Bootstrap是非参数统计方法,其实质是对观测信息进行再抽样,进而对总体的分布特性进行统计推断。

2、步骤
它是一种有放回的抽样方法,它是非参数统计中一种重要的估计统计量方差进而进行区间估计的统计方法。其核心思想和基本步骤如下:
1.采用重抽样技术从原始样本中抽取一定数量(自己给定)的样本,此过程允许重复抽样
2.根据抽出的样本计算给定的统计量T。
3.重复上述N次(一般大于1000),得到N个统计量T。
4.计算上述N个统计量T的样本方差,得到统计量的方差。
同理,可以估计总体的均值等其余统计量

3、为什么要进行Bootstrap采样
数据集较小时是不错的选择。自助法在数据集较小、难以有效划分训练集和测试集时很有用;将多次随机抽样得到的样本作为训练集,将初始数据作为测试集。
对集成学习方法有帮助。此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。
稳健性和效率高。该方法充分利用了给定的观测信息,不需要模型其他的假设和增加新的观测,并且具有稳健性和效率高的特点
但会引入估计偏差。然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此,在初始数据量足够时,留出法和交叉验证法更常用一些。

"""



import numpy as np
from sklearn.utils import resample

"""
假设我们总体中有一部分女生,一部分男生,我们想知道他们的比例是否大体相当。那么我们采用
好的,我来给您讲一下如何用 Python 实现 bootstrap 采样并得到置信区间为 95% 的值。 首先,我们需要导入相关的库: ```python import numpy as np from scipy.stats import norm ``` 然后,我们定义一个函数来进行 bootstrap 采样: ```python def bootstrap_sample(data, n): """ data: 原始数据 n: 采样次数 """ bootstrap_samples = [] for i in range(n): sample = np.random.choice(data, size=len(data), replace=True) bootstrap_samples.append(sample) return bootstrap_samples ``` 这个函数接受原始数据和采样次数作为参数,返回一个包含所有 bootstrap 采样结果的列表。 接下来,我们定义一个函数来计算样本的统计量: ```python def statistic(data): """ data: 样本数据 """ return np.mean(data) ``` 这个函数接受一个样本数据作为参数,返回样本的平均值。 然后,我们使用 bootstrap 采样得到一组样本,并计算这组样本的统计量: ```python data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) bootstrap_samples = bootstrap_sample(data, 1000) statistics = np.array([statistic(sample) for sample in bootstrap_samples]) ``` 这里我们使用了一个包含 10 个数字的数据集,并进行了 1000 次 bootstrap 采样。然后,我们将每个样本的统计量存储到一个数组中。 接下来,我们可以使用这个数组来计算置信区间。我们可以使用正态分布的累积分布函数(cdf)来计算置信区间的边界: ```python lower_bound = norm.ppf(0.025, loc=np.mean(statistics), scale=np.std(statistics)) upper_bound = norm.ppf(0.975, loc=np.mean(statistics), scale=np.std(statistics)) ``` 这里,我们使用了 `norm.ppf` 函数来计算正态分布的累积分布函数的逆函数,即给定概率、均值和标准差,计算对应的分位数。这里我们使用了 0.025 和 0.975 作为分位数,因为我们希望得到置信区间为 95%。 最后,我们可以打印出得到的置信区间: ```python print(f"95%置信区间为: ({lower_bound:.2f}, {upper_bound:.2f})") ``` 完整的代码如下: ```python import numpy as np from scipy.stats import norm def bootstrap_sample(data, n): """ data: 原始数据 n: 采样次数 """ bootstrap_samples = [] for i in range(n): sample = np.random.choice(data, size=len(data), replace=True) bootstrap_samples.append(sample) return bootstrap_samples def statistic(data): """ data: 样本数据 """ return np.mean(data) data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) bootstrap_samples = bootstrap_sample(data, 1000) statistics = np.array([statistic(sample) for sample in bootstrap_samples]) lower_bound = norm.ppf(0.025, loc=np.mean(statistics), scale=np.std(statistics)) upper_bound = norm.ppf(0.975, loc=np.mean(statistics), scale=np.std(statistics)) print(f"95%置信区间为: ({lower_bound:.2f}, {upper_bound:.2f})") ``` 希望这个例子能够帮助您理解如何使用 Python 实现 bootstrap 采样并计算置信区间。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值