我正在使用以下代码尝试调整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()))
令我惊讶的是(经过几个小时的等待),与使用默认设置训练MLPClassifier时,此随机搜索实际上返回的平均测试分数差了60%,这给了我76%的准确性:
mlp = MLPClassifier()
scores = cross_val_score(mlp, clean_df, target, cv=10)
print("Full features: mean of the scores: {:.2f}".format(scores.mean()))
知道发生什么了吗
答案 0 :(得分:3)
比较参数网格和默认值,我想问题出在hidden_layer_sizes
或alpha
中。
alpha
的默认值为1e-4
,而网格的最低值为1e-2
。可能是,您正则化过多,这会导致拟合不足。检查cv_results_
较低的alpha
模型相对于其他模型的性能如何,并可能调整网格。hidden_layer_sizes
网格,它们的大小都
第一层的<< 100,这是默认值。请注意,使用默认超参数的模型通常是一个很好的基准,当您为RandomizedSearchCV提供如此多的自由度(均匀采样)时,您不能保证所有采样的超参数都将是有意义的。实际上,我想您的情况很多。
更新: 要将交叉验证结果导出到csv,请执行以下操作:
pd.DataFrame(mlp_random.cv_results_).to_csv('export.csv')