Настройка гиперпараметров MLPRegressor - PullRequest
0 голосов
/ 12 апреля 2020

Я пытался настроить гиперпараметры модели MLP для решения проблемы регрессии, но всегда получаю предупреждение о сходимости.

Это мой код

def mlp_model(X, Y):

estimator=MLPRegressor()


param_grid = {'hidden_layer_sizes': [(50,50,50), (50,100,50), (100,1)],
          'activation': ['relu','tanh','logistic'],
          'alpha': [0.0001, 0.05],
          'learning_rate': ['constant','adaptive'],
          'solver': ['adam']}

gsc = GridSearchCV(
    estimator,
    param_grid,
    cv=5, scoring='neg_mean_squared_error', verbose=0, n_jobs=-1)

grid_result = gsc.fit(X, Y)


best_params = grid_result.best_params_

best_mlp = MLPRegressor(hidden_layer_sizes = best_params["hidden_layer_sizes"], 
                        activation =best_params["activation"],
                        solver=best_params["solver"],
                        max_iter= 5000, n_iter_no_change = 200
              )

scoring = {
           'abs_error': 'neg_mean_absolute_error',
           'squared_error': 'neg_mean_squared_error',
           'r2':'r2'}

scores = cross_validate(best_mlp, X, Y, cv=10, scoring=scoring, return_train_score=True, return_estimator = True)
return scores

Предупреждения I get являются

ConvergenceWarning: Stochastic Optimizer: Maximum iterations (5000) reached and the optimization hasn't converged yet.% self.max_iter, ConvergenceWarning)

У меня есть 87 объектов и 1384 строки в моем наборе данных, все они чисел c и масштабированы с использованием MinMaxScaler. Буду признателен за помощь в настройке гиперпараметров.

1 Ответ

0 голосов
/ 12 апреля 2020

Ну, есть три варианта, которые вы можете попробовать, один , очевидно, что вы увеличиваете max_iter с 5000 до большего числа, поскольку ваша модель не сходится в пределах 5000 эпох, во-вторых , попробуйте использовать batch_size, так как у вас есть 1384 обучающих примера, вы можете использовать размер пакета 16,32 или 64, это может помочь в сближении вашей модели за 5000 итераций, и наконец , вы всегда можете увеличить learning_rate_init до чуть более высокого значения, потому что кажется, что скорость обучения низкая, поскольку ваша модель не сходится даже после 5000 итераций. Надеюсь, это поможет

...