Правильная установка границ для оптимизации модели ML - PullRequest
1 голос
/ 24 апреля 2020

В настоящее время у меня возникла проблема, когда я выполняю регрессию с моими данными, а затем после этого минимизирую выбранную модель, чтобы найти оптимальный набор входных данных.

В приведенном ниже фрагменте приведен готовый пример:

# 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)

Обратите внимание, что я установил границы как минимум и максимум каждого входа, чтобы избежать какой-либо экстраполяции. Тем не менее, я все еще не совсем уверен, как правильно установить эти границы. Мне интересно, что я мог бы слишком настойчиво устанавливать эти комбинации от минимума до максимума для каждой функции, и это могло бы увеличить мои шансы на то, что минимизация достигнет глобального минимума, который на самом деле имеет очень высокую ошибку из-за невозможности обобщения по этим разные входные комбинации.

Отсюда мой вопрос: как было бы разумным способом установить границы в такой ситуации, когда я хочу избежать слишком большого выхода из "удобного" региона, где модель способна хорошо обобщать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...