XGBoost报subsample参数超出[0,1]边界,范围设置合规为何仍报错?
核心问题原因
你对scipy.stats.uniform分布的参数定义理解错误:uniform(loc, scale)生成的随机数取值区间为 [loc, loc + scale],而非你误以为的[loc, scale]。
你设置的subsample参数分布为uniform(0.8, 0.75),对应的实际取值范围是[0.8, 0.8+0.75] = [0.8, 1.55],最大值远超过XGBoost要求的[0,1]边界,报错信息中的1.10671正好落在该非法区间内,符合问题表现。
修复方案
如果需要将subsample的取值控制在[0.8, 1]区间内,将参数调整为:
"subsample": uniform(0.8, 0.2) # 0.8+0.2=1,取值区间正好为[0.8, 1]
其他参数校验
你当前设置的其余uniform类参数均符合边界要求,无需调整:
colsample_bytree: uniform(0.1, 0.2)→ 区间[0.1, 0.3],在[0,1]范围内gamma: uniform(0, 0.3)→ 区间[0, 0.3],无边界问题learning_rate: uniform(0.02, 0.3)→ 区间[0.02, 0.32],为常用合理取值范围
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

