RandomizedSearchCV调优LightGBM时feature_fraction<=1.0报错问题
问题根源
报错的核心原因是feature_fraction参数的实际生成值超过了LightGBM要求的上限1.0,本质是对scipy.stats.uniform的参数定义理解有误。scipy.stats.uniform接收的两个参数分别是loc和scale:loc为均匀分布区间的左端点,scale为区间的长度,最终生成的随机值范围为**[loc, loc + scale]**,而非你误以为的[loc, 第二个参数]。
你当前设置的参数实际取值范围如下:
feature_fraction = uniform(0.5, 0.95):实际取值范围为 0.5 ≤ x ≤ 0.5 + 0.95 = 1.45,存在大量大于1.0的取值,直接触发LightGBM的参数校验报错bagging_fraction = uniform(0.35, 0.95):实际取值范围为 0.35 ≤ x ≤ 0.35 + 0.95 = 1.3,同样存在超出上限1.0的风险
修复方案
如果需要限定参数的取值上限为0.95,scale参数需要设置为上限值 - 左端点值:
feature_fraction要落在[0.5, 0.95]区间内,scale应设置为 0.95 - 0.5 = 0.45bagging_fraction要落在[0.35, 0.95]区间内,scale应设置为 0.95 - 0.35 = 0.6
修正后的参数配置如下:
from scipy.stats import uniform params = dict() params['feature_fraction'] = uniform(0.5, 0.45) params['bagging_fraction'] = uniform(0.35, 0.6) params['bagging_freq'] = [1]
内容的提问来源于stack exchange,提问作者Olli
相关产品推荐
相关产品推荐

