在Vertex AI超参数调优中配置逻辑回归不同求解器的超参数
在Vertex AI单个超参数调优任务中兼容scikit-learn逻辑回归的不同求解器参数
完全可以在单个调优任务中配置不同求解器对应的专属超参数,不需要拆分任务。核心是利用Vertex AI超参数调优的条件参数配置功能,让不同求解器自动匹配合法的超参数组合。
具体实现思路
- 先定义求解器的可选范围(
CategoricalParameterSpec),比如包含lbfgs和liblinear - 为依赖于求解器的参数(比如
penalty)设置条件规则:当求解器是lbfgs时,仅允许l2惩罚;当求解器是liblinear时,允许l1和l2惩罚 - 全局通用的参数(比如正则化强度
C)可以直接定义,无需附加条件
代码示例
from google.cloud import aiplatform from google.cloud.aiplatform.hyperparameter_tuning import ( CategoricalParameterSpec, HyperparameterTuningJob, ) # 1. 定义求解器的可选值 solver_param = CategoricalParameterSpec(values=["lbfgs", "liblinear"]) # 2. 定义带条件的惩罚项参数:默认仅支持l2,当求解器为liblinear时扩展支持l1 penalty_param = CategoricalParameterSpec( values=["l2"], conditional_parameter_specs=[ { "parent_parameter": "solver", "parent_values": ["liblinear"], "values": ["l1", "l2"], } ], ) # 3. 定义通用的正则化强度参数 c_param = CategoricalParameterSpec(values=[0.01, 0.1, 1, 10, 100]) # 4. 构建超参数调优任务 hpt_job = HyperparameterTuningJob( display_name="lr-hyperparameter-tuning", project="你的项目ID", region="你的区域", max_trial_count=20, parallel_trial_count=5, parameter_spec={ "solver": solver_param, "penalty": penalty_param, "C": c_param, }, # 指定scikit-learn训练容器(或自定义训练脚本) training_task_definition="gs://cloud-aiplatform-training/scikit-learn-1.0:latest", training_task_inputs={ "python_package_gcs_uri": "gs://你的存储桶/training-code.tar.gz", "python_module_name": "trainer.task", }, ) # 启动调优任务 hpt_job.run()
关键说明
conditional_parameter_specs是实现参数依赖的核心:通过指定父参数(parent_parameter)和父参数值(parent_values),动态调整当前参数的可选范围- 这种方式能避免无效的参数组合(比如给
lbfgs求解器分配l1惩罚),调优过程中会自动生成符合规则的参数组合进行试验 - 除了
penalty,其他依赖求解器的参数(比如multi_class)也可以用同样的条件配置方式处理
内容的提问来源于stack exchange,提问作者dbkoop
相关产品推荐
相关产品推荐

