Создать собственное ядро ​​для GPRPython

Программы на Python
Ответить
Anonymous
 Создать собственное ядро ​​для GPR

Сообщение Anonymous »

Я хотел бы написать ядро ​​RBF, которое работает только в определенном диапазоне по оси X. Я попытался написать класс, содержащий ядро ​​RBF, для проверки кода

Код: Выделить всё

class RangeLimitedRBFTest(Kernel):
def __init__(self, length_scale=1.0, length_scale_bounds=(1e-5, 1e5), x_min = 0., x_max = 1.):
self.length_scale = length_scale
self.length_scale_bounds = length_scale_bounds
self.rbf_kernel = RBF(length_scale, length_scale_bounds)
self.x_min = x_min
self.x_max = x_max

def __call__(self, X, Y=None, eval_gradient=False):
if eval_gradient and Y is not None:
raise ValueError("Gradient can only be evaluated when Y is None.")

X = np.atleast_2d(X)
if Y is not None:
Y = np.atleast_2d(Y)

print(f"X shape: {X.shape}")
if Y is not None:
print(f"Y shape: {Y.shape}")
else:
print("Y shape: None")

K_rbf = self.rbf_kernel(X, Y, eval_gradient=eval_gradient)

if eval_gradient:
K, K_grad = K_rbf
print(f"Kernel matrix shape (K): {K.shape}")
print(f"Kernel gradient matrix shape (K_grad): {K_grad.shape}")
return K, K_grad
else:
K = K_rbf
return K

def diag(self, X):
return self.rbf_kernel.diag(X)

def is_stationary(self):
return self.rbf_kernel.is_stationary()
Реализация и установка такая

Код: Выделить всё

kernel = 1.0 * RangeLimitedRBFTest(length_scale=0.1, length_scale_bounds=(8e-2, 8e-1), x_min=0., x_max=2.5) + WhiteKernel(noise_level=0.5, noise_level_bounds=(1e-2, 1e1))
gaussian_process = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=1, alpha=1e-5, optimizer='fmin_l_bfgs_b')
gaussian_process.optimizer_kwargs = {"max_iter": 10000}
gaussian_process.fit(X, T_PMT)
Если я запущу код, я получу следующий результат

Код: Выделить всё

X shape: (6248, 1)
Y shape: None
Kernel matrix shape (K): (6248, 6248)
Kernel gradient matrix shape (K_grad): (6248, 6248, 1)
ValueError: 0-th dimension must be fixed to 2 but got 3

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/home/tdaq/cremonini/pt100_probe/read_temperatures.py", line 97, in 
gaussian_process.fit(X, T_PMT)
File "/home/tdaq/.local/lib/python3.10/site-packages/sklearn/base.py", line 1389, in wrapper
return fit_method(estimator, *args, **kwargs)
File "/home/tdaq/.local/lib/python3.10/site-packages/sklearn/gaussian_process/_gpr.py", line 308, in fit
self._constrained_optimization(
File "/home/tdaq/.local/lib/python3.10/site-packages/sklearn/gaussian_process/_gpr.py", line 653, in _constrained_optimization
opt_res = scipy.optimize.minimize(
File "/cvmfs/atlas.cern.ch/repo/sw/software/0.3/StatAnalysis/0.3.1/InstallArea/x86_64-el9-gcc13-opt/lib/python3.10/site-packages/scipy/optimize/_minimize.py", line 713, in minimize
res = _minimize_lbfgsb(fun, x0, args, jac, bounds,
File "/cvmfs/atlas.cern.ch/repo/sw/software/0.3/StatAnalysis/0.3.1/InstallArea/x86_64-el9-gcc13-opt/lib/python3.10/site-packages/scipy/optimize/_lbfgsb_py.py", line 360, in _minimize_lbfgsb
_lbfgsb.setulb(m, x, low_bnd, upper_bnd, nbd, f, g, factr,
ValueError: failed in converting 7th argument `g' of _lbfgsb.setulb to C/Fortran array
Если я попытаюсь использовать обычное ядро ​​RBF, код будет работать без проблем. Я также попытался отключить оптимизаторOptimer=None, и код работает, но я получаю очень большую ошибку.

Подробнее здесь: https://stackoverflow.com/questions/792 ... el-for-gpr
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»