我有一个非常复杂的树结构搜索空间。在顶层,我需要做出分类选择——探索哪个参数子空间。举个简单的例子,你可以想象我需要在使用线性回归、SVM 或某些神经网络之间做出决定。每个子空间的大小都大不相同,我希望 Optuna 采样器(我正在考虑使用 TPESampler)花更多时间探索更大的空间。
如果我做
trial.suggest_categorical("network_type", ["linear", "svm", "nn"])
和分支取决于这里选择的内容,我将探索比我想要的更多的小子空间。从概念上讲,如果我可以为每个类别传递一个weight
,它将解决我的问题。
我可以想象要求一个随机浮点数并将其映射到正确的类别,但它有一些明显的问题,包括:查看结果更难;采样器实际上并不知道它是一个分类空间(例如靠近的浮点数将代表完全不同的类别)。
在这个简单的例子中,TPESampler 可能会发现哪个“network_type”效果好并更频繁地选择它。在我的实际用例中,我有一千多个类别。
编辑:
我很高兴了解人们的经验,即 Optuna 在没有太多先验的情况下运行良好。我想这是非常依赖问题的。当搜索空间是高度结构化的具有 O(1000) 基数的多个分支时,即使从每个叶子空间中获取一个样本也可能非常困难。
可能没有自动调谐器可以解决我的问题,但我仍然希望知道实际问题的答案。有人能以某种方式“指导” optuna 在分类分布中的选择吗?