【问题标题】:How to perform calibration with OpenTURNS without observed inputs?如何在没有观察到输入的情况下使用 OpenTURNS 执行校准?
【发布时间】:2020-06-12 10:36:19
【问题描述】:

一般来说,我有一个模型 g,它观察到输入 X、参数 θ 和观察到的输出 Y。但是,在某些情况下我没有观察到输入 X。在这种情况下,使用 OpenTURNS 似乎是不可能的,因为eg的构造函数LinearLeastSquaresCalibration 类需要输入样本。

为了提供一个基本的用例,让我考虑以下示例,改编自 LinearLeastSquaresCalibration 类的文档。

我们首先定义要校准的模型g。

import numpy as np
import openturns as ot

# We define the model g which has 3 inputs and one output H.
def functionFlooding(X) :
    L = 5.0e3
    B = 300.0
    Q, K_s, DeltaZ = X
    alpha = DeltaZ/L
    if alpha < 0.0 or K_s <= 0.0:
        H = np.inf
    else:
        H = (Q/(K_s*B*np.sqrt(alpha)))**(3.0/5.0)
    return [H]
g = ot.PythonFunction(3, 1, functionFlooding) 
g = ot.MemoizeFunction(g)
g.setOutputDescription(["H (m)"])

然后我们定义输入随机向量。 这是一组 3 个Dirac 分布。

# Set the parameters to be calibrated.
Q = ot.Dirac(1013.0)
K_s = ot.Dirac(30.0)
DeltaZ = ot.Dirac(5.0)
# Create the joint input distribution.
inputRandomVector = ot.ComposedDistribution([Q, K_s, DeltaZ])

然后我们创建输出 H 的 Monte-Carlo 样本。 在这种情况下,这是一个包含常量值的样本。

nbobs = 100
inputSample = inputRandomVector.getSample(nbobs)
outputH = g(inputSample)

然后我们生成观察噪声并将其添加到模型的输出中。

sigmaObservationNoiseH = 0.1 # (m)
noiseH = ot.Normal(0.0, sigmaObservationNoiseH)
sampleNoiseH = noiseH.getSample(nbobs)
Hobs = outputH + sampleNoiseH

最后,我们定义theta参数的参考值。

QInitial = 1000.0
KsInitial = 20.0
DeltaZInitial = 2.0
thetaPrior = ot.Point([QInitial,KsInitial,DeltaZInitial])

然后我们来到示例的核心。 以下语句从模型中创建校准函数。

calibratedIndices = [0,1,2]
mycf = ot.ParametricFunction(g, calibratedIndices, thetaPrior)

因此,校准后的函数没有输入,这就是为什么我们设置一个空列表作为输入参数来检查它是否有效。

>>> print(mycf([]))
[3.56855]

类的构造函数需要样例inputObservations

LinearLeastSquaresCalibration(
    model, inputObservations, 
    outputObservations, candidate, methodName)

但是,在这种情况下,我们没有这样的输入样本。如何使用校准工具?

【问题讨论】:

    标签: calibration openturns


    【解决方案1】:

    由于我们没有输入观察,我们创建一个空的Sample 作为输入。

    emptyInputObservations = [[]]*len(Hobs)
    algo = ot.LinearLeastSquaresCalibration(
        mycf, emptyInputObservations, Hobs, thetaPrior, "SVD")
    

    其他类NonLinearLeastSquaresCalibrationGaussianLinearCalibrationGaussianNonLinearCalibration 工作方式相同。

    【讨论】:

    • 正是我想要的!
    • 是否可以将相同的方法应用于 ot.RandomWalkMetropolisHastings 类并计算对数似然?
    猜你喜欢
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 2015-04-19
    相关资源
    最近更新 更多