【问题标题】:Best way to write bootstrapping in python在 python 中编写引导程序的最佳方法
【发布时间】:2020-06-03 23:17:47
【问题描述】:

我正在编写一种在 python 中对样本应用统计引导的方法,我提供了两种解决方案,一种是完全矢量化的,另一种是使用列表理解的。

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

sample = np.array([80,75,91,97,88,77,94])

bs_sample_1 = np.random.choice(sample,size = (10000,7)).mean(axis = 1)

bs_sample_2 = np.array([np.random.choice(sample,size = 7).mean() for i in range(10000)])

plt.figure()
sns.distplot(sample)

plt.figure()
sns.distplot(bs_sample_1)

plt.figure()
sns.distplot(bs_sample_2)

我对 RNG 了解不多,但我不确定这两个操作是否同样有效地生成引导样本。

【问题讨论】:

    标签: python machine-learning random statistics-bootstrap


    【解决方案1】:

    通常自举方法应用于拟合例程而不是单个数组。此外,您正在调用 random.choice 从 7 个元素的数组中选择 7 个元素,这有点没有意义。

    曲线拟合中的自举应用如下:

    1. 给定 n 个样本 (x,y),已知不确定性为 y。 y 的不确定性可能由仪器给出,也可能通过计算 y 的多次连续测量的标准差来给出。
    2. 拟合某个函数,比如 f(x,a,b),其中 a 和 b 是我们要提取的参数,即 x、y 值。保存拟合过程得到的 a 和 b 的结果。
    3. 生成 n 个 y* 值样本。每个 y* 是使用高斯分布生成的,该高斯分布具有相同的对应 y 的平均值,并且 sigma 与在点 1 处给出的值相同。(所有点的 sigma 值可能相等或不同,具体取决于相应的 x 值)。使用第 2 点中描述的相同程序进行拟合。值 x,y* 并保存通过拟合程序获得的参数 a 和 b。
    4. 根据需要多次迭代第 3 点(通常为 1000 次或更多次)。您最终会得到参数 a 和 b 的许多值。
    5. 此时,您可以说描述函数 y = f(x,a,b) 的最佳 a-b 值是之前获得的可能参数 a 和 b 的平均值,您可以说它们的不确定性由下式给出这些值的标准。也可以看看 a 和 b 的分布情况,再做进一步的考虑。

    在您的代码中,您只是多次计算数组中 7 个元素的平均值。但是由于“平均值的平均值”是孔数据集上的平均值,因此您最终会得到这 7 个元素的平均值(希望这是有道理的)。

    理想情况下,自举意味着您根据每个数据的已知分布生成模拟数据,然后使用这些数据计算每个不同代的一些数量。然后你可以计算得到的数量的平均值和标准。

    【讨论】:

      猜你喜欢
      • 2015-05-26
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多