Sklearn MLP分类器隐藏层优化(RandomizedSearchCV)

时间:2018-08-27 03:00:15

标签: python machine-learning scikit-learn hyperparameters

我设置了以下参数:

parameter_space = {
    'hidden_layer_sizes': [(sp_randint.rvs(100,600,1),sp_randint.rvs(100,600,1),), (sp_randint.rvs(100,600,1),)],
    'activation': ['tanh', 'relu', 'logistic'],
    'solver': ['sgd', 'adam', 'lbfgs'],
    'alpha': stats.uniform(0.0001, 0.9),
    'learning_rate': ['constant','adaptive']}

除hidden_​​layer_sizes以外的所有参数均按预期工作。

当前,hidden_​​layer_sizes random值是预先计算的,并且在所有迭代中都保持不变。

是否有一种方法可以获取1层或2层MLP,其中RandomizedSearchCV的每次迭代都随机选择100到600之间的隐层神经元。

有什么想法/其他相关提示吗?

1 个答案:

答案 0 :(得分:0)

RandomizedSearchCV使用的ParameterSampler期望有一个随机采样的列表或一个attribute rvs()的对象。您可以通过以下方式模仿此对象

class RandIntMatrix(object):
    def __init__(self, low, high, shape=(1)):
        self.low = low
        self.high = high
        self.shape = shape

    def rvs(self, random_state=None):
        np.random.seed(random_state)
        return np.random.randint(self.low, self.high, self.shape)

print (RandIntMatrix(100, 600, 3).rvs())  # [ 506 124 310]