OpenTURNS 的连续变量和离散变量
Continuous and discrete variables with OpenTURNS
如何使用 OpenTURNS 创建包含连续和离散随机变量的实验设计?
我知道我们可以做到:
X0 = ot.Normal()
X1 = ot.Normal()
distribution = ot.ComposedDistribution([X0,X1])
但这只会创建一个连续的联合分布,我可以从中进行采样。但是如何创建连续变量和离散变量的联合分布呢?那我可以从中取样吗?
实际上,一般来说,OpenTURNS 对连续分布和离散分布没有太大区别。所以,一旦我们创建了一个 Distribution
,我们所要做的就是使用 getSample
方法来获得一个简单的蒙特卡洛样本。下面的示例表明,我们可以通过创建 LHS 实验设计进一步推动这个想法。
为了创建分布的第一个边缘,我们 select 一个单变量离散分布。其中许多,如 Bernoulli
或 Geometric
发行版,都在库中实现。在此示例中,我们选择 UserDefined
分布,它为值 -2、-1、1 和 2 分配相等的权重。
然后我们首先使用 getSample
方法创建蒙特卡洛实验,然后使用 MonteCarloExperiment
方法。可以基于此分布生成任何其他类型的实验设计,这就是我们最终展示如何创建 LHS(拉丁超立方体)实验的原因。
import openturns as ot
sample = ot.Sample([-2., -1., 1., 2.],1)
X0 = ot.UserDefined(sample)
X1 = ot.Normal()
distribution = ot.ComposedDistribution([X0,X1])
# Monte-Carlo experiment, simplest version
sample = distribution.getSample(10)
print(sample)
# Monte-Carlo experiment
size = 100
experiment = ot.MonteCarloExperiment(distribution, size)
sample = experiment.generate()
以下脚本生成关联的图形。
graph = ot.Graph("MonteCarloExperiment", "x0", "x1", True, "")
cloud = ot.Cloud(sample, "blue", "fsquare", "")
graph.add(cloud)
graph
之前的脚本打印:
[ v0 X0 ]
0 : [ 2 -0.0612243 ]
1 : [ 1 0.789099 ]
2 : [ -1 0.583868 ]
3 : [ -1 1.33198 ]
4 : [ -2 -0.934389 ]
5 : [ 2 0.559401 ]
6 : [ -1 0.860048 ]
7 : [ 1 -0.822009 ]
8 : [ 2 -0.548796 ]
9 : [ -1 1.46505 ]
并生成以下图形:
在同一分布上创建 LHS 很简单。
size = 100
experiment = ot.LHSExperiment(distribution, size)
sample = experiment.generate()
如何使用 OpenTURNS 创建包含连续和离散随机变量的实验设计?
我知道我们可以做到:
X0 = ot.Normal()
X1 = ot.Normal()
distribution = ot.ComposedDistribution([X0,X1])
但这只会创建一个连续的联合分布,我可以从中进行采样。但是如何创建连续变量和离散变量的联合分布呢?那我可以从中取样吗?
实际上,一般来说,OpenTURNS 对连续分布和离散分布没有太大区别。所以,一旦我们创建了一个 Distribution
,我们所要做的就是使用 getSample
方法来获得一个简单的蒙特卡洛样本。下面的示例表明,我们可以通过创建 LHS 实验设计进一步推动这个想法。
为了创建分布的第一个边缘,我们 select 一个单变量离散分布。其中许多,如 Bernoulli
或 Geometric
发行版,都在库中实现。在此示例中,我们选择 UserDefined
分布,它为值 -2、-1、1 和 2 分配相等的权重。
然后我们首先使用 getSample
方法创建蒙特卡洛实验,然后使用 MonteCarloExperiment
方法。可以基于此分布生成任何其他类型的实验设计,这就是我们最终展示如何创建 LHS(拉丁超立方体)实验的原因。
import openturns as ot
sample = ot.Sample([-2., -1., 1., 2.],1)
X0 = ot.UserDefined(sample)
X1 = ot.Normal()
distribution = ot.ComposedDistribution([X0,X1])
# Monte-Carlo experiment, simplest version
sample = distribution.getSample(10)
print(sample)
# Monte-Carlo experiment
size = 100
experiment = ot.MonteCarloExperiment(distribution, size)
sample = experiment.generate()
以下脚本生成关联的图形。
graph = ot.Graph("MonteCarloExperiment", "x0", "x1", True, "")
cloud = ot.Cloud(sample, "blue", "fsquare", "")
graph.add(cloud)
graph
之前的脚本打印:
[ v0 X0 ]
0 : [ 2 -0.0612243 ]
1 : [ 1 0.789099 ]
2 : [ -1 0.583868 ]
3 : [ -1 1.33198 ]
4 : [ -2 -0.934389 ]
5 : [ 2 0.559401 ]
6 : [ -1 0.860048 ]
7 : [ 1 -0.822009 ]
8 : [ 2 -0.548796 ]
9 : [ -1 1.46505 ]
并生成以下图形:
在同一分布上创建 LHS 很简单。
size = 100
experiment = ot.LHSExperiment(distribution, size)
sample = experiment.generate()