我正在尝试使用Spearmint,这是一个贝叶斯优化库,来调整机器学习分类器的超参数。我的问题是如何表达不遵循均匀分布的参数搜索空间?
从项目GitHub页面上,这里有一个如何设置两个均匀分布的参数搜索空间的例子:
"variables": { "X": { "type": "FLOAT", "size": 1, "min": -5, "max": 10 }, "Y": { "type": "FLOAT", "size": 1, "min": 0, "max": 15 }}
我们如何在Spearmint中定义如下所示的搜索空间?
SVC_PARAMS = [ { "bounds": { "max": 10.0, "min": 0.01, }, "name": "C", "type": "double", "transformation": "log", }, { "bounds": { "max": 1.0, "min": 0.0001, }, "name": "gamma", "type": "double", "transformation": "log", }, { "type": "categorical", "name": "kernel", "categorical_values": [ {"name": "rbf"}, {"name": "poly"}, {"name": "sigmoid"}, ], },]
Spearmint当前支持的所有随机表达式(如uniform
、normal
、log
等)可以在哪里查找?
回答:
Spearmint会从数据中自动学习这些类型的变换。如果你查看这里:https://github.com/HIPS/Spearmint/tree/master/spearmint/transformations,你可以看到应用的beta变换的实现(详细说明见此论文:http://arxiv.org/abs/1402.0929)。Spearmint没有办法预先指定这些变换,但你可以让Spearmint操作例如参数的对数(通过提供参数范围的对数,并在你这边进行指数运算)。