В настоящее время у меня возникла проблема, когда я выполняю регрессию с моими данными, а затем после этого минимизирую выбранную модель, чтобы найти оптимальный набор входных данных.
В приведенном ниже фрагменте приведен готовый пример:
# training inputs
x1 = [2, 3.2, 3, 5, 6, 7, 2, 5.3, 4.2, 3.3,
4.2, 5.2, 3.3, 3.5, 4.6, 2.7, 1.2, 0.3, 0.2, 2.3]
x2 = [4.2, 5.2, 3.3, 3.5, 4.6, 2.7, 1.2, 0.3, 0.2, 2.3,
3, 2, 4, 5.4, 3.6, 2.7, 2.1, 3.3, 4.2, 2.3]
x3 = [3, 2, 4, 5.4, 3.6, 2.7, 2.1, 3.3, 4.2, 2.3,
2, 3.2, 1.3, 1.5, 6, 2.7, 1.2, 1.3, 4.3, 2.3]
x4 = [2, 3.2, 1.3, 1.5, 6, 2.7, 1.2, 1.3, 4.3, 2.3,
4.2, 5.2, 3.3, 3.5, 4.6, 2.7, 1.2, 0.3, 0.2, 2.3]
# training outputs
y = np.array([3089.08499394, 3087.83447843, 3098.82336623, 3115.63094526,
3106.20448712, 3114.32767516, 3087.96639857, 3108.41118853,
3104.53665156, 3092.9796729 , 3093.95868803, 3103.45662977,
3087.26154199, 3086.86408161, 3114.21675091, 3091.46968285,
3081.72904861, 3078.77336133, 3090.11261335, 3088.82934059])
# model fitting
kernel = C(1.0, (1e-4, 1e4))*RBF(10,(1e-3,1e3))
model = GaussianProcessRegressor(kernel = kernel, n_restarts_optimizer = 10,optimizer='fmin_l_bfgs_b', normalize_y = True)
model.fit(X,Y)
Теперь, когда у меня есть моя модель, я буду использовать минимизацию scipy над ней:
bounds = [(x1.min(), x1.max()),
(x2.min(), x2.max()),
(x3.min(), x3.max()),
(x4.min(), x4.max())]
model_minimized = shgo(lambda x: -model.predict(np.array([x])), bounds=bounds)
Обратите внимание, что я установил границы как минимум и максимум каждого входа, чтобы избежать какой-либо экстраполяции. Тем не менее, я все еще не совсем уверен, как правильно установить эти границы. Мне интересно, что я мог бы слишком настойчиво устанавливать эти комбинации от минимума до максимума для каждой функции, и это могло бы увеличить мои шансы на то, что минимизация достигнет глобального минимума, который на самом деле имеет очень высокую ошибку из-за невозможности обобщения по этим разные входные комбинации.
Отсюда мой вопрос: как было бы разумным способом установить границы в такой ситуации, когда я хочу избежать слишком большого выхода из "удобного" региона, где модель способна хорошо обобщать?