如何使用GridSearch配置parameter_space?

时间:2019-11-26 17:23:18

标签: python scikit-learn gridsearchcv mlp

请参见以下示例:

parameter_space = {
    'hidden_layer_sizes': [(200,100)],
    'activation': ['tanh', 'relu'],
    'solver': ['sgd', 'adam'],
    'alpha': [0.0001, 0.05],
    'learning_rate': ['constant','adaptive'],
}

clf = GridSearchCV(mlp, parameter_space, n_jobs=-1, cv=3)

问题是要了解我的人工神经网络在内部如何停留。

我希望本示例对输入层使用20个神经元,对200个和100个神经元使用两个隐藏层,对1个神经元使用一个输出层,因为我的问题是二进制分类。

InputLayer(20)---隐藏层1(200)--- Hiddenlayer2(100)--- OutputLayer(1)

我知道在“ hidden_​​layer_sizes”中仅会插入隐藏层,但是我们如何指示输入和输出层呢?以及“ GridSearchCV”将如何交替隐藏层中的神经元数量以找到最佳配置?

1 个答案:

答案 0 :(得分:1)

设置一个配置列表以尝试进行操作,然后调用gridsearch传递对MLP函数的引用(带有括号,mlp()):

from sklearn import svm
from sklearn.model_selection import GridSearchCV
from sklearn.neural_network import MLPClassifier as mlp

parameter_space = {
    'hidden_layer_sizes': [(200, 100),(100, 200),(200, 200),(100, 100)],
    'activation': ['tanh', 'relu'],
    'solver': ['sgd', 'adam'],
    'alpha': [0.0001, 0.05],
    'learning_rate': ['constant','adaptive']
}
clf = GridSearchCV(mlp(), parameter_space, scoring='precision_macro')
print("Best params:")
print(clf.best_params_)

这将遍历所有(4 * 2 * 2 * 2 * 2)= 64个可能的参数组合。隐藏层的大小可以是(200,100)或(100,200),也可以是列表中其他两个的其中之一-如果您想要更多或更少的细粒度变化,则可以修改该列表。

关于输入和输出层大小的问题是一个很好的问题,我也想知道从什么开始。答案是输入向量的大小已经确定了输入层的大小(必须相同),输出层和输出向量也是如此,因此scikit不需要这些层大小。不幸的是,其他ML工具包却无法做到这一点!