过滤不兼容的超参数
作者: fabiom91创建于 2025年7月22日更新于 2026年6月24日
标签feature
动机
在许多机器学习工作流程中,尤其是基于斯克勒恩的工作流程. 管道、超参数是相互依存的。 一些例子:
如果使用五氯苯甲醚(n 组件=n),则以下的SelectKBest(k)必须满足 k-n
如果 PCA( whiten=True) , svd solver 必须是"满" 。
如果逻辑回归( penalty='l1"), 那么解析器必须是“ liblinear” 或“ saga” 。
如果采用维度降低法,随后的估算器或选择器必须在相容特征维度上操作
目前,处理这些制约的唯一方法是在客观函数内手动回放("nan"),用于无效组合. 这导致大量试验失败,这很浪费,使网格或野蛮武力搜索特别低效.
说明
Optuna在进行试验之前,应自动过滤出不兼容的参数组合,通过回顾:
- ** 管道结构**(例如取自`sklearn.pipeline。 输油管 ' )
- ** 参数关系**(如维度减少、所需参数依赖性)
- ** 共同模型限制**(例如: scikit-learn模型中的解析器/刑罚有效性)
这种过滤应在优化开始前** 进行,特别是在 " GridSampler " 和 " BruteForceSampler " 等详尽的取样器中,以便:
- 避免不必要的审判
- 减少内存使用、计算成本和日志拼接
- 使Optuna在与结构化的ML管道合作时更聪明
这一功能将使Optuna管线-意识,尤其有助于使用模块化、动态或堆叠模型的用户。
备选方法(可选)
如果完全自动检测不可行或过于复杂,Optuna可以允许用户在声明时界定约束规则,例如:
[Python] 学习 = optuna.create study( 方向="最大化", , , 采样器=GridSampler(搜索 空间), 约束=[ ("pca n 组件",">=","selectkbest k"), ("逻辑后退-惩罚=l1","逻辑后退-解决","'saga',"liblinear""),". [ . ] (中文(简体) ).
可以在审判开始前** 评估这些结果,从而可以进行过滤,而无需进入`客观()'或跟踪失败的审判。
++ 附加上下文( 可选)
在目前的工作流程中,我正在对一个**模块和动态 scikit-learn 管道** 进行详尽的超参数搜索,步骤包括:
* 预处理:`Robust Captor'、`Power Transfer'
* 恢复:`Smote'、`ADSYN'、`SMOTENN'
* 减少影响:`PCA'
* 特长选择:`SelectKBest'、`RFE'、`特定特长选择者'
* 估计数:`后勤倒退'
我的网格搜索空间的超参数组合值超过307,000个。 我使用 " GridSampler " 来确保覆盖。 但是,由于步骤依赖性(例如,常设仲裁法院——特征选择)和模式特有的限制(例如,`法律倒退'中的不相容的`solver'/`penalty'对),** 大部分审判失败了**。
尽管设计得十分客观
. . . . . . .内容来源: optuna/optuna