如何使用拉丁超立方体采样获得参数的分布,该采样使用Python在不同尺度上具有边界



我有一个有三个参数的方程,即abc。我通过将这个方程与实测行为进行比较,将其参数最小化。为此,我试图生成三维参数空间的拉丁超立方体采样(即abc(,并希望使用不同的样本作为最小化的初始猜测。此外,我希望分别为每个参数在边界((1e-15,1e-05), (1,5), (0,1))内生成这些样本。

我有以下代码用于生成缩放参数空间:

from scipy.stats import qmc
sampler = qmc.LatinHypercube(d=3)
sample = sampler.random(n=5)
print(sample)

生成以下LHS:

>>> [[0.85448659 0.41801193 0.22357232]
[0.00312924 0.18687008 0.65662771]
[0.60861481 0.9413831  0.55522406]
[0.56288569 0.38992472 0.93933801]
[0.30978017 0.620607   0.19730746]]

现在,我使用qmc.scale将它们缩放为:

l_bounds = [1e-15, 1, 0]
u_bounds = [1e-05, 5, 1]
sample_scaled = qmc.scale(sample, l_bounds, u_bounds)
print(sample_scaled)

结果是:

>>> [[8.54486593e-06 2.67204771e+00 2.23572322e-01]
[3.12923556e-08 1.74748031e+00 6.56627715e-01]
[6.08614807e-06 4.76553238e+00 5.55224057e-01]
[5.62885688e-06 2.55969886e+00 9.39338009e-01]
[3.09780166e-06 3.48242798e+00 1.97307459e-01]]

问题是sample_scaled的第一列。如果我们观察它,我们可以看到,在缩放的情况下,第一个参数的分布在范围1e-81e-6之间。但是,我希望它分布在1e-151e-05之间(如上面代码中所指定的(。对于其他两个参数,缩放后的分布很好。

有人能指出这里的错误或问题吗?并且可以指导我如何正确地为这个特定场景生成分发?

请注意,间隔(1e-15-1e-8(比间隔(1e-8-1e-5(小约1000倍。如果你想让某个东西跨越多个数量级,你可能想要一个对数刻度。

import numpy as np
from scipy.stats import qmc
sampler = qmc.LatinHypercube(d=3)
sample = sampler.random(n=5)
l_bounds = [np.log(1e-15), 1, 0]
u_bounds = [np.log(1e-5), 5, 1]
sample_scaled = qmc.scale(sample, l_bounds, u_bounds)
sample_scaled[:,0] = np.exp(sample_scaled[:,0])

相关内容

  • 没有找到相关文章

最新更新