在 python 中编写引导程序的最佳方式
Best way to write bootstrapping in python
我正在编写一种对 python 中的样本应用统计 bootstrapping 的方法,我有两个解决方案,一个是完全矢量化的,另一个是使用列表理解的。
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 了解不多,但我不确定这两个操作是否同样有效以生成 bootstrap 个样本。
通常自举方法应用于拟合例程,而不应用于单个阵列。您还调用 random.choice 从 7 个元素的数组中选择 7 个元素,这有点没有意义。
曲线拟合中的 Bootstrapping 应用如下:
- 给定 n 个样本 (x,y),已知 y 的不确定性。 y 的不确定性可能由仪器或通过计算 y 的许多连续测量值的标准值给出。
- 用某个函数拟合比方说 f(x,a,b) 其中 a 和 b 是我们要提取的参数,即值 x、y。保存拟合过程得到的a和b的结果。
- 生成 n 个 y* 值样本。每个 y* 都是使用高斯分布生成的,具有相同的相应 y 的平均值和与点 1 给定的西格玛。(所有点的西格玛值可能相等或不同,具体取决于相应的 x 值)。使用第 2 点中描述的相同程序进行拟合。值 x、y* 并保存通过拟合例程获得的参数 a 和 b。
- 重复第 3 点任意次数(通常为 1000 次或更多次)。您最终会得到许多参数 a 和 b 的值。
- 此时你可以说描述你的函数 y = f(x,a,b) 的最佳 a-b 值是之前获得的可能参数 a 和 b 的平均值,你可以说它们的不确定性是由这些值的标准给出。大家也可以看看a和b的分布情况,再做进一步的考虑。
在您的代码中,您只是多次计算数组中 7 个元素的平均值。但是由于 "mean value of the mean value" 是孔数据集的平均值,所以您最终得到的是这 7 个元素的平均值(希望这是有意义的)。
理想情况下,自举意味着您根据每个数据的已知分布生成模拟数据,然后使用该数据计算每一代的一些数量。然后你可以计算得到的数量的平均值和标准差。
我正在编写一种对 python 中的样本应用统计 bootstrapping 的方法,我有两个解决方案,一个是完全矢量化的,另一个是使用列表理解的。
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 了解不多,但我不确定这两个操作是否同样有效以生成 bootstrap 个样本。
通常自举方法应用于拟合例程,而不应用于单个阵列。您还调用 random.choice 从 7 个元素的数组中选择 7 个元素,这有点没有意义。
曲线拟合中的 Bootstrapping 应用如下:
- 给定 n 个样本 (x,y),已知 y 的不确定性。 y 的不确定性可能由仪器或通过计算 y 的许多连续测量值的标准值给出。
- 用某个函数拟合比方说 f(x,a,b) 其中 a 和 b 是我们要提取的参数,即值 x、y。保存拟合过程得到的a和b的结果。
- 生成 n 个 y* 值样本。每个 y* 都是使用高斯分布生成的,具有相同的相应 y 的平均值和与点 1 给定的西格玛。(所有点的西格玛值可能相等或不同,具体取决于相应的 x 值)。使用第 2 点中描述的相同程序进行拟合。值 x、y* 并保存通过拟合例程获得的参数 a 和 b。
- 重复第 3 点任意次数(通常为 1000 次或更多次)。您最终会得到许多参数 a 和 b 的值。
- 此时你可以说描述你的函数 y = f(x,a,b) 的最佳 a-b 值是之前获得的可能参数 a 和 b 的平均值,你可以说它们的不确定性是由这些值的标准给出。大家也可以看看a和b的分布情况,再做进一步的考虑。
在您的代码中,您只是多次计算数组中 7 个元素的平均值。但是由于 "mean value of the mean value" 是孔数据集的平均值,所以您最终得到的是这 7 个元素的平均值(希望这是有意义的)。
理想情况下,自举意味着您根据每个数据的已知分布生成模拟数据,然后使用该数据计算每一代的一些数量。然后你可以计算得到的数量的平均值和标准差。