def set_mean(self, mean): ''' This function constructs the mean function takes the following argument: -> mean_type ''' if mean.mean_type == 'Linear': self.mean_function = ot.LinearBasisFactory(self.input_dim).build() elif mean.mean_type == 'Constant': self.mean_function = ot.ConstantBasisFactory( self.input_dim).build() elif mean.mean_type == 'Quadratic': self.mean_function = ot.QuadraticBasisFactory( self.input_dim).build() elif mean.mean_type == 'Zero': self.mean_function = ot.Basis() else: self.mean_function = "This library does not support the specified mean function"
# equal to # # .. math:: # dim = 4 # # # in the cantilever beam case. # # We observe that the number of coefficients in the trend is 5, which corresponds to: # # * 1 coefficient for the constant part, # * dim=4 coefficients for the linear part. # %% covarianceModel.setScale(X_train.getMax()) basis = ot.QuadraticBasisFactory(dimension).build() algo = ot.KrigingAlgorithm(X_train, Y_train, covarianceModel, basis) algo.setOptimizationBounds(scaleOptimizationBounds) algo.run() result = algo.getResult() krigingWithQuadraticTrend = result.getMetaModel() result.getTrendCoefficients() print(algo.getOptimizationBounds()) print(result.getCovarianceModel()) # %% # This time, the trend has 15 coefficients: # # * 1 coefficient for the constant part, # * 4 coefficients for the linear part, # * 10 coefficients for the quadratic part.
# Set precision ot.PlatformInfo.SetNumericalPrecision(3) # Calibration of default optimizer ot.ResourceMap.SetAsScalar( 'GeneralLinearModelAlgorithm-DefaultOptimizationLowerBound', 1.0e-5) ot.ResourceMap.SetAsScalar( 'GeneralLinearModelAlgorithm-DefaultOptimizationUpperBound', 100) # Data & estimation inputDimension = 1 X = ot.Normal().getSample(100) X = X.sortAccordingToAComponent(0) covarianceModel = ot.SquaredExponential([1.0], [1.0]) model = ot.SymbolicFunction(["x"], ["x - 0.6 * cos(x/3)"]) Y = model(X) basis = ot.QuadraticBasisFactory(inputDimension).build() algo = ot.GeneralLinearModelAlgorithm(X, Y, covarianceModel, basis, True) algo.setOptimizationAlgorithm(ot.NLopt('LN_NELDERMEAD')) algo.run() # perform an evaluation result = algo.getResult() metaModel = result.getMetaModel() conditionalCovariance = result.getCovarianceModel() residual = metaModel(X) - Y ott.assert_almost_equal(residual.computeCenteredMoment(2), [1.06e-05], 1e-5, 1e-5) ott.assert_almost_equal(conditionalCovariance.getParameter(), [0.619144, 0.000937], 5e-3, 1e-3) likelihood = algo.getObjectiveFunction() assert likelihood.getInputDimension() == 1, "likelihood dim"
print("Test using NLOpt") print("================") # Calibration of default optimizer ot.ResourceMap.SetAsNumericalScalar( 'GeneralizedLinearModelAlgorithm-DefaultOptimizationLowerBound', 1.0e-5) ot.ResourceMap.SetAsNumericalScalar( 'GeneralizedLinearModelAlgorithm-DefaultOptimizationUpperBound', 100) # Data & estimation spatialDimension = 1 X = ot.Normal().getSample(100) X = X.sortAccordingToAComponent(0) covarianceModel = ot.SquaredExponential([1.0], [1.0]) model = ot.NumericalMathFunction(["x"], ["x - 0.6 * cos(x/3)"]) Y = model(X) basis = ot.QuadraticBasisFactory(spatialDimension).build() algo = ot.GeneralizedLinearModelAlgorithm(X, Y, covarianceModel, basis, True) algo.setOptimizationSolver(ot.NLopt('LN_NELDERMEAD')) algo.run() # perform an evaluation result = algo.getResult() metaModel = result.getMetaModel() conditionalCovariance = result.getCovarianceModel() residual = metaModel(X) - Y assert_almost_equal(residual.computeCenteredMoment(2), [1.06e-05], 1e-5, 1e-5) assert_almost_equal(conditionalCovariance.getParameter(), [0.702138, 0.00137], 5e-3, 1e-3) print("Test Ok")
print("x=", x) factory = ot.ConstantBasisFactory(dim) print("factory=", factory) basis = factory.build() print("basis=", basis) f = ot.AggregatedFunction(basis) y = f(x) print("y=", y) factory = ot.LinearBasisFactory(dim) print("factory=", factory) basis = factory.build() print("basis=", basis) f = ot.AggregatedFunction(basis) y = f(x) print("y=", y) factory = ot.QuadraticBasisFactory(dim) print("factory=", factory) basis = factory.build() print("basis=", basis) f = ot.AggregatedFunction(basis) y = f(x) print("y=", y)