Sklearn MLP分类器超参数优化(RandomizedSearchCV)

3

我有以下参数设置:

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

除了 hidden_layer_sizes 参数之外,其他所有参数都按预期工作。然而,拟合此 RandomizedSearchCV 模型并显示其详细文本时,它将 hidden_layer_sizes 视为:hidden_layer_sizes=(<scipy.stats._distn_infrastructure.rv_frozen object,然后抛出错误:TypeError: '<=' not supported between instances of 'rv_frozen' and 'int'。这个结果与预期的具有 100 到 600 个隐藏层神经元的 1 或 2 层 MLP 不同。有什么想法或其他相关提示吗?
1个回答

8

sp_randint 返回一个 rv_discrete 类的实例 / 一个 randint 对象,为了生成随机数,正确的语法应该是 sp_randint.rvs(low, high, size)。 为了使其正常工作,您需要按照以下方式定义 parameter_space:

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': uniform(0.0001, 0.9), 'learning_rate': ['constant','adaptive']}


1
感谢您的详细解释。 - MG_Ghost
有没有办法确保在每次RandomizedSearchCV迭代中选择隐层大小的随机值都是不同的?目前,它只会预先计算这些随机值一次,然后在各个迭代中保持不变。 - MG_Ghost
我们真的想在每次 MLP 迭代中更改 hidden_layer_sizes(MLP 的结构)吗?那么我们如何解释结果呢?我认为最好是随机生成一次并在所有迭代中保持固定。 - Sandipan Dey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接