如何向SageMaker XGBoost Estimator传递lambda超参数?解决语法错误
解决SageMaker XGBoost中lambda超参数的语法错误
问题核心是lambda属于Python保留关键字,不能直接作为参数名传递给set_hyperparameters方法,这里有两种简单可行的解决方式:
方法1:使用官方支持的别名lambda_
SageMaker的XGBoost Estimator针对这个场景专门提供了带下划线的参数别名lambda_,直接替换原参数名即可:
xgb = sagemaker.estimator.Estimator(**training_dict, sagemaker_session=sagemaker_session) xgb.set_hyperparameters( num_round=2000, objective='binary:logistic', tree_method='hist', eval_metric='auc', # 用lambda_替代lambda lambda_=0.5, alpha=1 ) xgb.fit({'train': s3_input_train, 'validation': s3_input_validation})
方法2:通过字典解包传递超参数
如果更习惯使用原参数名lambda,可以把所有超参数存入字典,再通过**解包传递给方法:
xgb = sagemaker.estimator.Estimator(**training_dict, sagemaker_session=sagemaker_session) hyperparams = { 'num_round': 2000, 'objective': 'binary:logistic', 'tree_method': 'hist', 'eval_metric': 'auc', 'lambda': 0.5, 'alpha': 1 } xgb.set_hyperparameters(**hyperparams) xgb.fit({'train': s3_input_train, 'validation': s3_input_validation})
两种方式都能正常将L2正则化参数传递给XGBoost,不会触发语法错误。
内容的提问来源于stack exchange,提问作者Gaurav Chawla
相关产品推荐
相关产品推荐

