Создание ядра для регрессора 2D гауссовского процесса в sk learn

#python #scikit-learn #gaussian #gaussian-process

Вопрос:

Я пытаюсь использовать регрессионную модель гауссовского процесса для байесовской оптимизации. Модель GP предназначена для аппроксимации моей целевой функции. Он имеет два входа (переменные) (x, y), которые возвращают один вывод z. Я изо всех сил пытаюсь понять, какое ядро / какую комбинацию ядер использовать для модели GP. Я попробовал продукт и сумму двух ядер SE (RBF RBF и RBF x RBF), и до сих пор прогнозы не так уж велики. Я использовал 81 тренировочную точку (пары x,y) и результирующие значения z для обучения модели. Я также включил изображение 3D-данных ниже, если это поможет, и код. На самом деле мне просто нужна помощь, чтобы понять, какие ядра использовать / как создать собственное, соответствующее моим данным. Любая помощь будет очень признательна.

введите описание изображения здесь

Ниже приведен мой код:

 
    x_train = np.array(list_of_pairs)
    y_train = training_data['result'].to_list()
    
    kernel = gp.kernels.RBF(length_scale=0.00000000005, length_scale_bounds=(0.000001, 100000)) * gp.kernels.RBF(length_scale=0.00000000005, length_scale_bounds=(0.000001, 100000)) 
    model = gp.GaussianProcessRegressor(kernel = kernel, n_restarts_optimizer=4)
    model.fit(x_train, y_train)
    
    test_sample = [[0.1,57]]
    test_sample = np.array(test_sample)
    yhat, covar = model.predict(test_sample, return_std=True)
    print(yhat, covar)
    print(model.kernel_.get_params())

 

ниже приведен скриншот некоторых ошибок вывода, которые я также мог бы использовать для понимания.введите описание изображения здесь

Комментарии:

1. Пожалуйста, обратите внимание, что переполнение стека препятствует скриншоту , который содержит только текст . Вместо этого скопируйте и вставьте этот текст непосредственно в сообщение с вопросом.

2. Я бы предложил следующие действия, которые, я думаю, приблизят вас к решению вашей проблемы. 1. Стандартизируйте свои данные. GP очень чувствителен к различным масштабам. 2. Пока используйте только одно универсальное ядро, например RBF. Если эти два шага выполняются без ошибок и дают приблизительные результаты, вы можете усложнить свою модель, возможно, настроив гиперпараметры или используя более сложные ядра.