打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
统计学基础 | 重复抽样
userphoto

2023.10.18 辽宁

关注

重复抽样(Resampling)是统计学和数据分析中一种常见的技术,用于估计统计量的分布、评估模型的性能和处理不确定性。重复抽样方法通过多次从已有的数据集中随机抽取样本,然后对这些样本进行分析,以获取关于总体的信息。

重复抽样包括有放回抽样和无放回抽样两种方式。这两种方式的主要区别在于是否允许在抽样过程中多次抽取相同的元素。1.有放回抽样(With Replacement):在有放回抽样中,每次抽样后,抽取的元素被放回原始数据集,因此它们有可能在后续的抽样中再次被选中。这意味着同一元素可以出现在不同抽样样本中多次。有放回抽样用于自助法(Bootstrapping)等统计技术中,以生成多个具有相似特性的自助样本,用于估计统计量的不确定性和分布。2.无放回抽样(Without Replacement):在无放回抽样中,每次抽样后,被选中的元素从原始数据集中移除,因此不会在后续的抽样中再次出现。这确保了每个元素只会出现在一个抽样样本中一次,这种抽样方法常用于传统的随机抽样,例如简单随机抽样、系统抽样和分层抽样等。

具体选择哪种抽样方式通常取决于问题的性质和分析的目的。有放回抽样通常用于重复抽样技术,如自助法和蒙特卡洛模拟,以估计不确定性和构建分布。无放回抽样则更适合用于生成不重叠的样本,以获取单独、不相关的观测数据,例如用于调查和实验研究中的随机抽样。

以下是一些常见的重复抽样方法:1.自助法(Bootstrapping):自助法是一种重复抽样方法,其中从原始数据集中随机抽取的样本都是有放回的,意味着同一个数据点可以在不同的样本中出现多次。这个方法可以用于估计统计量的分布,如均值、方差和置信区间。自助法对小样本数据特别有用。2.交叉验证(Cross-Validation):交叉验证是一种用于评估模型性能的重复抽样技术。它包括将数据集分为多个子集,然后多次训练和测试模型,每次使用不同的子集作为测试集和训练集。常见的交叉验证方法包括k折交叉验证和留一法(Leave-One-Out)。3.重复随机划分(Repeated Random Subsampling):这种方法涉及多次从原始数据中进行随机抽样,每次抽样生成一个新的训练集和测试集。这可用于评估模型的性能多次以减小随机性的影响。4.蒙特卡洛模拟(Monte Carlo Simulation):蒙特卡洛模拟使用重复随机抽样来估计统计量或模拟复杂系统的行为。它可以用于估计不确定性和进行风险分析。

这些重复抽样方法有助于减小样本大小引起的估计不确定性,评估模型性能的稳定性,以及估计总体分布或特定参数的分布。选择合适的重复抽样方法通常依赖于问题的性质和可用数据。

重复抽样在统计学和数据分析中有多种重要作用,包括:1.估计不确定性:重复抽样可以用于估计统计量(如均值、方差、置信区间)的不确定性。通过多次从同一数据集中生成抽样,我们可以观察到不同样本的变化,从而了解估计的稳定性和可靠性。2.模型性能评估:在机器学习和统计建模中,重复抽样可以用于评估模型的性能。例如,通过交叉验证,我们可以多次拆分数据集,训练模型,并对其性能进行多次评估,以获得更可靠的性能指标。3.分布估计:重复抽样方法如自助法(Bootstrapping)可以用于估计总体分布或特定参数的分布。这对于推断总体特性或进行假设检验非常有用。4.风险分析:在金融领域和工程领域,蒙特卡洛模拟等重复抽样技术可以用于风险分析,帮助估计潜在的不确定性和风险。5.样本调整:重复抽样有时也用于生成更大的虚拟样本,以应对样本不足的情况。这可以有助于改进建模和统计推断。

自助法(Bootstrapping)是一种统计方法,用于估计统计量的分布或参数的不确定性,特别适用于小样本情况。它的核心思想是通过从原始数据集中有放回地随机抽取样本,生成大量的自助样本,然后对这些自助样本进行分析,以获取关于统计量或参数的分布信息。

'自助法'(Bootstrapping)这个名字源于一个类比,它起初的提出者是美国统计学家布拉德利·埃夫朗(Bradley Efron),他在20世纪70年代首次引入了这一概念。这个名字的灵感来自于一个富有想象力的比喻,描述了这种统计方法的基本原理。

在自助法中,统计学家或数据分析师利用原始数据集进行多次抽样,每次都是有放回的,因此同一个数据点可以在不同的自助样本中出现多次。这种有放回的随机抽样可以被看作是一种类似于'自己通过靴带拔起自己'的过程。因此,Efron为这一方法起名为'Bootstrap',来暗示这种方法是通过自身的数据来生成估计。   

'Bootstrap'(靴带)的本意是指穿靴子时使用的拉链或绑带,这些绑带通常用于把靴子系在脚上。在靴子的设计中,'Bootstrap'是用来帮助人们把靴子穿在脚上的工具。

在统计学中,'自己通过靴带拔起自己'这个比喻是一种隐喻,用来形容自助法(Bootstrap)的工作原理。它暗示了自助法是通过从已有数据中生成更多的数据,然后利用这些数据进行估计或推断的过程,类似于通过'Bootstrap'来拉起或提取自身。

自助法的核心思想是通过从原始数据中多次重抽样,创建了多个虚拟的数据集,以估计统计量的分布或参数的不确定性。这一方法已经成为统计学和数据分析领域中的重要工具,用于估计置信区间、评估模型性能以及处理小样本情况等。自助法的灵活性和强大性使其成为了一个有趣而有用的统计工具,尽管其名字取自于一个想象中的'Bootstrap'行为。

具体来说,自助法的步骤包括:1.从原始数据中随机抽取一个数据点(有放回),将其添加到自助样本中。2.重复上述步骤多次,每次都是独立的随机抽样,可以允许同一个数据点被多次抽取,也可以不被抽取。3.使用自助样本进行统计估计,例如计算均值、方差或构建模型。

通过这种过程,自助法生成了多个自助样本,每个自助样本都是从原始数据中有放回地抽取的,因此自助样本与原始数据有相似的性质。这允许统计学家和数据分析师使用这些自助样本来估计总体参数的分布、构建置信区间或进行假设检验,从而通过'自己通过靴带拔起自己'来获得关于总体的信息。这一比喻强调了自助法的重要性,它是一种非参数统计方法,特别适用于小样本或总体分布未知的情况。

以下是一个简单的自助法示例,涉及均值的自助估计。我们将使用Python进行演示。

假设我们有一个小样本数据集:

import numpy as np

data = np.array([23, 45, 67, 32, 19, 54, 61, 35, 58, 40])

现在,我们将使用自助法来估计这个样本均值的分布。下面是一个Python代码示例:

import numpy as np

# 原始数据集data = np.array([23, 45, 67, 32, 19, 54, 61, 35, 58, 40])

# 自助法抽样次数num_samples = 1000sample_size = len(data)bootstrap_means = []

for _ in range(num_samples):# 随机有放回地抽取自助样本bootstrap_sample = np.random.choice(data, size=sample_size, replace=True)

# 计算自助样本的均值,并存储bootstrap_mean = np.mean(bootstrap_sample)bootstrap_means.append(bootstrap_mean)

# 绘制均值分布import matplotlib.pyplot as plt

plt.hist(bootstrap_means, bins=30, edgecolor='k')plt.title('Bootstrap Mean Distribution')plt.xlabel('Mean Value')plt.ylabel('Frequency')plt.show()

这段代码的关键部分包括:1.我们指定了抽样次数num_samples,通常选择足够多的次数以获得可靠的估计。2.在每次循环中,我们使用np.random.choice 函数从原始数据集中有放回地随机抽取一个自助样本。3.我们计算每个自助样本的均值,并将它们存储在bootstrap_means 列表中。4.最后,我们绘制均值分布的直方图,以观察均值的分布情况。

通过自助法,我们可以获得关于均值的分布信息,包括均值的中心位置和可变性。这对于估计均值的不确定性非常有用,特别是在样本较小或总体分布未知的情况下。

交叉验证(Cross-Validation)是一种常用于评估和选择机器学习模型性能的技术。它通过将数据集分成多个子集,多次训练和测试模型,以评估模型的性能,特别是在样本有限的情况下。最常见的交叉验证方法包括k折交叉验证和留一法(Leave-One-Out)。

下面是一个示例,以k折交叉验证为例,演示如何实现交叉验证并使用Python的scikit-learn库:

import numpy as npfrom sklearn.model_selection import KFoldfrom sklearn.model_selection import cross_val_scorefrom sklearn.linear_model import LinearRegression

# 创建一个示例数据集X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]])y = np.array([2, 3, 4, 5, 6])

# 创建一个线性回归模型model = LinearRegression()

# 使用5折交叉验证kfold = KFold(n_splits=5, shuffle=True, random_state=42)

# 进行交叉验证results = cross_val_score(model, X, y, cv=kfold, scoring='r2')

# 输出每次折叠的R平方值for i, result in enumerate(results):print(f'Fold {i + 1}: R-squared = {result:.2f}')

# 输出交叉验证的平均R平方值print(f'Mean R-squared: {np.mean(results):.2f}')

在这个示例中,我们首先创建了一个示例数据集(X和y)。然后,我们创建了一个线性回归模型,选择了5折交叉验证,即将数据分为5个子集。接下来,我们使用cross_val_score函数来执行交叉验证,评估模型的性能。最后,我们打印每个折叠的R平方值(决定系数),以及平均R平方值,以评估模型的性能。

交叉验证有助于准确评估模型的性能,特别是在小样本数据集上。不同的数据集和模型可能需要不同的交叉验证策略,但scikit-learn库提供了强大的工具来简化交叉验证的实施。

重复随机划分(Repeated Random Subsampling)是一种重复抽样方法,用于评估模型性能或生成多次不同的训练和测试数据集以减小随机性的影响。该方法通常用于机器学习模型的评估,特别是在数据较小或噪声较大的情况下。

以下是一个示例,包括数据和Python代码,演示如何使用重复随机划分来评估一个分类模型的性能。在这个示例中,我们将使用Python的Scikit-Learn库。

数据示例:

假设我们有一个包含糖尿病患者数据的数据集,其中包括特征(如血糖水平、血压等)以及目标变量(是否患有糖尿病)。

import numpy as npfrom sklearn.datasets import load_diabetes

# 加载示例糖尿病数据集diabetes = load_diabetes()X = diabetes.datay = diabetes.target

代码示例:

以下是如何使用重复随机划分来评估一个分类模型的性能。在这里,我们使用了逻辑回归作为示例分类器,并使用cross_val_score函数进行重复随机划分。

from sklearn.model_selection import cross_val_scorefrom sklearn.linear_model import LogisticRegression

# 创建一个逻辑回归分类器classifier = LogisticRegression()

# 使用Repeated Random Subsampling来评估模型性能# n_splits是划分的次数,n_repeats是重复的次数n_splits = 5 # 每次划分为5折交叉验证n_repeats = 3 # 重复3次

# 使用cross_val_score函数进行重复随机划分scores = cross_val_score(classifier, X, y, cv=n_splits, n_jobs=-1, scoring='accuracy', n_repeats=n_repeats)

# 打印每次划分的准确性得分for repeat in range(n_repeats):for split in range(n_splits):print(f'Repeat {repeat+1}, Split {split+1}: {scores[repeat * n_splits + split]}')

在这个示例中,我们使用逻辑回归模型进行评估,将数据集分为5折交叉验证,并重复这个过程3次。cross_val_score函数返回每次划分的性能得分,然后我们打印每次划分的准确性得分。这可以帮助评估模型的性能稳定性和一致性,减小随机性的影响。

蒙特卡洛模拟(Monte Carlo Simulation)是一种数值计算方法,通过随机抽样来模拟复杂系统的行为,以估计未知参数、分析风险和进行决策分析。该方法以蒙特卡洛赌场在赌博中使用的随机性为名,它基于概率和统计原理,通过大量的模拟实验来近似解决问题。

以下是一个简单的蒙特卡洛模拟示例,用于估计π的值。蒙特卡洛模拟通过随机生成点并检测它们是否落在一个特定的区域内,来估计π的值。

import random

# 总的模拟次数total_simulations = 1000000

# 初始化落在圆内的计数器inside_circle = 0

for _ in range(total_simulations):# 随机生成点的坐标x = random.random()y = random.random()

# 检查点是否落在单位圆内if x**2 + y**2 <= 1:inside_circle += 1

# 估计π的值estimated_pi = (inside_circle / total_simulations) * 4

print('估计的π值:', estimated_pi)

在这个示例中,我们生成了大量随机点,然后通过检查它们是否落在单位圆内来估计π的值。通过统计落在圆内的点占总点数的比例,我们可以得到π的估计值。运行程序返回:

估计的π值: 3.140412

请注意,蒙特卡洛模拟的准确性通常随着模拟次数的增加而提高。在实际应用中,你可以根据问题的复杂性和精确度要求来决定模拟次数。

蒙特卡洛模拟在金融风险分析、工程设计、物理模拟、概率分布估计等各种领域都有广泛的应用,因为它可以处理各种复杂的问题,而无需显式求解数学方程。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
非参数bootstrap方法, 小数据集统计的大能手
预测建模中的重抽样方法
R机器学习:重复抽样在机器学习模型建立过程中的地位理解
简单随机抽样
r语言Bootstrap自助法重采样构建统计量T抽样分布近似值可视化|代码分享
一文读懂“随机森林”在微生态中的应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服