我有一个有三个参数的方程,即a
、b
和c
。我通过将这个方程与实测行为进行比较,将其参数最小化。为此,我试图生成三维参数空间的拉丁超立方体采样(即a
、b
和c
(,并希望使用不同的样本作为最小化的初始猜测。此外,我希望分别为每个参数在边界((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-8
到1e-6
之间。但是,我希望它分布在1e-15
到1e-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])