Я использую следующий код для настройки параметров MLPClassifier:
hidden_layer_sizes = ([x for x in itertools.product((10, 20, 30, 40, 50, 53, 73, 100), repeat=1)] + \
[x for x in itertools.product((10, 20, 30, 40, 50, 100), repeat=2)] )
#[((len(clean_df.columns))+1,)] )]
#print(hidden_layer_sizes)
alpha = [0.01, 0.1, 1, 10, 100]
activation = ['identity', 'logistic', 'tanh', 'relu']
solver = ['lbfgs', 'sgd', 'adam']
learning_rate = ['constant', 'invscaling', 'adaptive']
random_grid = {'hidden_layer_sizes': hidden_layer_sizes,
'alpha': alpha,
'activation' : activation,
'solver': solver,
'learning_rate': learning_rate}
prec_metric = make_scorer(precision_score)
k = StratifiedKFold(n_splits=10, shuffle=False)
mlp = MLPClassifier()
mlp_random = RandomizedSearchCV(estimator = mlp, param_distributions=random_grid, scoring=prec_metric,
n_iter=100, cv=k, n_jobs=-1, verbose=3)
mlp_random.fit(clean_df, target)
print("Best parameters found: " + str(mlp_random.best_params_))
print("Mean test score from Randomized Search CV: " + str(mlp_random.cv_results_['mean_test_score'].mean()))
Удивительно для меня (после нескольких часов ожидания) этот рандомизированный поиск на самом деле дал худший средний балл теста на 60%, чем при обучении MLPClassifier с настройками по умолчанию, которые дали мне точность 76%:
mlp = MLPClassifier()
scores = cross_val_score(mlp, clean_df, target, cv=10)
print("Full features: mean of the scores: {:.2f}".format(scores.mean()))
Есть идеи, что происходит?