dfm / george

Fast and flexible Gaussian Process regression in Python
http://george.readthedocs.io
MIT License
451 stars 128 forks source link

Bounds, blocks and metric_bounds #113

Closed Kamuish closed 5 years ago

Kamuish commented 5 years ago

From the docs:

all of the stationary kernels can be “blocked”. This means that the kernel will only be applied within some parameter range.

bounds (Optional[list or dict]) – Bounds can be given for each parameter setting their minimum and maximum allowed values.

I have been looking into the source code and trying to understand how to implement Gaussian processes. However, for me, both of those definitions are the same thing.

What is the difference between bounds, blocks and metric_bounds ?

Kamuish commented 5 years ago

I think that I have pretty much figured it out, but just to make sure:

-> block limits the region of the input values, over which the kernel is applied -> bounds and metric_bounds are pretty much the same thing, but you use metric_bounds when the kernel has a metric. Otherwise, it uses the bounds.

However, if the kernel has a metric, like ExpSquaredKernel , why do we have the bounds argument? From a design standpoint, why do you have both arguments, when they are used for the same task?

dfm commented 5 years ago

The bounds parameter sets the range over which "hyper parameters" are allowed to vary. The block parameter sets the range of inputs (not hyperparameters, but input coordinates) where the kernel is applied.

From a design perspective, the length scales of a radial kernel are not parameters of the kernel (they're parameters of the metric) so that's what the metric_bounds parameter refers to.